Latex行距调整总结

解析(一)

baseline 是什么


TeX 中的每个字符都放在一个 box 里。每个 box 有 base (参考点)、width(宽度)、height(高度)、depth(深度),其中 height + depth = totalheigth (总高)。

若干字符的 box 组成一个词的 box ,同样这个 box 也有这样几个参数。TeX 断行之后,会把这一行的所有盒子的 base 连接起来,以保证改行的内容在一个基准线上,连接成的线段就是 baseline.

如图所示:

LaTeX 的行距机制


每一行都有一条 baseline, 同一段落中相邻两行之间的 baseline 的间距称为行距 (linespace). 一般来说,最终决定两条 baseline 之间的 linespace 距离的,是 LaTeX 的宏 \baselineskip 之中。也就是说,这个长度值,将会是一般情况下的两条 baseline 之间的距离,也就是我们最终的行距。

显然行距应当随着字号的大小变化;若不然,则对于给定的行距数值,较大字号的内容部分显得拥挤不堪。LaTeX 中的字号存储在内部宏 \f@size 之中,而内部宏 \f@baselineskip 则记录了行距中和字号相关的部分。这个宏当中,它的单位和字号的单位一样,都是 pt ( 1pt = 1/72.27 inch ). LaTeX 的默认情况下,\f@baselineskip 的值是当前 \f@size 的 1.2 倍——例如,当 \f@size 为 10pt 时,\f@baselineskip 的值为 12pt.

为了统一对不同字号的内容进行行距的调整,引入了因子的概念,这是一个数值(而不是长度),储存在 \f@linespread 这个宏里面。这是一个与字号无关的值,在 article 文档类中它默认是 1, 在 ctexart 中默认是 1.3. 通常我们修改行距,都是修改这个因子,而不动前段叙述的基础行距。因此就有必要将因子存储在一个外部宏(没有 @ 的宏)之中,它是 \baselinestretch. 于是我们可以大致地认为,\f@linespread 和 \baselinestretch 是一回事。

因此,根据 \baselineskip = \f@baselineskip * \baselinestretch, 在 article 中默认行距是字号的 1.2 倍,而在 ctexart 中默认行距是字号的 1.56 倍。此外,提一下,Word 中的「单倍行距」/「双倍行距」等名词,指的是因子的数值为 1 或者 2 的时候的行距;相反 setspace 宏包的 「单倍」、「一倍半」、「双倍」则是指行距相对于字号的倍数。

如何修改行距


\f@linespread 的值一旦给定,会一直作用到文档末尾或者被新的值覆盖;\f@baselineskip 的情况类似。因为 TeX 排版的过程是对一整段文字进行计算,在每个可能的断行点计算总劣度最小的断行模式,然后进行排版。所以每一段段内的行距,由最后被设置的(覆盖了前面的)\f@baselineskip 和 \f@linespread 决定。

修改行距,也就是修改因子,可以直接修改 \baselinestretch 的值(\renewcommand),或者使用 \linespread{} 来修改。然而为了保持与 LaTeX2e 的一致性,推荐使用后一种方法。

1
\linespread{<因子>}

setspace 宏包提供的 \setstretch 命令似乎做得更多一些:会同时修改数学公式、浮动体等的间距,使之与正文间距适应。

1
\setstretch{<因子>}

\fontsize{}{} 这类命令,必须在其后添加 \selectfont 才会生效。\setstretch 大致相当于 \linespread, 使用之后直接生效。


解析(二)

基线


在讲行距之前,我们先讲一下基线的概念。

维基百科中如下说道:

字体排印学中,基线(英语:Baseline)指的是多数字母排列的基准线。如右图所示,大多字母都沿着红色基线排列,唯有“p”向下延伸超过基线,超过的部分称为降部。

配图如下:

维基百科中又说,

东亚字体没有基线,每个字符坐落在一个方形盒子中,既无升部也无降部。当它与具有低基线的字体混合使用时,东亚字符应当被调整,使其字符底部在低基线字体的基线和降部高度之间。

相信大家看了这些话和配图以后,对基线应该有了一个大致的了解。

字号

介绍完基线之后,我们可以真正地了解字号了。前一篇文章,仅仅是简单地介绍了一下如何设置字号,那么字号究竟代表什么意思呢?pt和em究竟是什么呢?

在现代排版学中,pt是字号的单位,中文译为磅。在Word中,1pt为1/72英寸。而在LaTeX中,1pt为1/72.27英寸。而磅与中文字号的转化关系为:

初号42pt, 小初36pt, 一号26pt, 小一24pt, 二号22pt, 小二18pt, 三号16pt, 小三15pt, 四号14pt, 小四12pt, 五号10.5pt, 小五9pt

当前的字号指的是"typically a bit larger than the distance from the tallest ascender to the lowest descender", 从之前基线的图中可以看出,就是比从descender一直到ascender的距离略大。

当前的字体大小被记作单位em, 也就是说,如果当前字号为12pt, 那当前1em=12pt.

那么,行距是什么呢?

行距


维基百科如是说道:

在字体排印学,行距(Leading)指代字体连续行的基线间的距离。

在Word中,我们谈论的单倍行距,双倍行距也源于此。对于每一个字号,有一个基准行距,它等于单倍行距。在旧时用打字机的时候,如何增加行距呢?人们选择的方法只有空一行这样。所以,在Word中有双倍行距,这时的行距就等于两倍的基准行距。

在LaTeX中的行距机制,又是怎么样呢?

我们上一篇文章中讲到,\fontsize{fontSize}{baseLineSkip}\selectfont可以同时更改字体大小及行距。事实上,这里的行距是Word中的基准行距。它并不是真正的两个基线之间的距离。它存储在LaTeX的宏\f@baselineskip中。LaTeX中还有一个宏,是\baselinestretch, 我们可以通过命令\linespread{lineSpread}\selectfont 来改变它,其中lineSpread填我们想要变成的值。而LaTeX中真正的行距,也就是两个基线之间的距离,是\baselinestretch乘以\f@baselineskip的值,它储存在\baselineskip中。

如果我们什么都不设置,对于不同的文档类,默认字体大小不同,但默认的\f@baselineskip的值为默认字号的1.2倍,\baselinestretch在不同的文档类中也不同,article文档类中为1,ctexart文档类为1.3

因此,在我们改变行距时,如果想把行距调整成精确的值,一般用 \fontsize{fontSize}{baseLineSkip}\selectfont来实现;如果想成比例地调整行距,比如单倍行距,双倍行距,则使用\linespread{lineSpread}\selectfont来实现。 比如说,双倍行距就是\linespread{2}\selectfont

此外,我们也可以用一个名叫setspace的宏包。也就是说,在导言区使用\usepackage{setspace}.然后使用\setstretch{lineSpread} 来设置linespread(不用加\selectfont). 这个命令的好处在于会同时修改数学公式、浮动体等的间距,使之与正文间距适应。

空行


那么,我们如何在LaTeX中插入多个空行呢?一直用\par\par\par是会疯狂报错的。。。正确做法是:

\vspace*{n\baselineskip} 

其中n为想空的行数。

段间距


在不同的段之间,也可以设置段间距(默认为0)。通过\setlength{\parskip}{parSkip}来实现。比如说,我想设置段间距为2em, 则使用\setlength{\parskip}{2em}即可。这样,在不同两段之间的距离,为段间距+\baselineskip的距离。

这里值得注意的是,由于\\是断行不是分段,所以由\\引起的下一行与本行之间的距离,只有\baselineskip, 而不加上\parskip

缩进


在article及ctexart中,都默认给每一段的段首进行了缩进(在下一篇文章中我们会看到,article中的每一个章节后的首段不会缩进)。我们可以通过\setlength{\parindent}{parIndent}来控制缩进距离,比如说,我想控制段首缩进2em,则应写\setlength{\parindent}{2em}. 这个命令会使该命令之后的所有段的缩进都变成这个值。如果要取消全部段落的段首缩进,则可以写\setlength{\parindent}{0em}.

如果要单独取消某一行的段首缩进,则在该行的段首写\noindent即可。

Latex行距调整总结相关推荐

  1. LaTeX行距以及字体大小

    LaTeX行距以及字体大小 1.行距 2.字体大小 1.全局模式 2.局部模式 1.行距 一:改变全文行距 导言部分前加入\linespread{2.0}即可,代表全文两倍行距. 二:部分段落需要改变 ...

  2. CTeX:中英文混排无法正常换行+字体调整+行距调整

    关于无法正常换行:一行与一行有时会参差不齐 参考材料:ctex-faq"中英文混排是为何无法正确分排?" 简单地说,一是英文字符后面要空格,二是中英文字符间要隔开 关于字体调整:\ ...

  3. Latex 页面调整常用参数

    Latex 页面调整 安装 最简单的例子 页面布局 页码 页码格式 多个文档的结合 安装 参考:http://www.nsknet.or.jp/~tony/TeX/install/win/tex.ht ...

  4. 在 LaTeX 中调整图片和表格的位置

    原  文:Positioning images and tables 译  者:Xovee 翻译时间:2020年10月30日 在 LaTeX 中调整图片和表格的位置 LaTeX 的核心理念之一即是让你 ...

  5. latex表格调整行距

    主要是在表格环境中插入这两句 \begingroup \setlength{\tabcolsep}{10pt} % Default value: 6pt \renewcommand{\arraystr ...

  6. latex 精准调整控制表格每一行之间的行距

    每一行的**换行符\**后面,加上[7ex]就能单独控制行高,其中的7可以随意修改. 如果只想调整某两行的上下两行的距离,那就只给那两行的最后添加[7ex]即可,不用每一行都添加.

  7. Latex中调整多行公式行距(间距)的方法

    在使用Latex编辑公式时,当有多行公式同时出现,如两行时, {array}{l}  M = M.*Y{A^T}./MA{A^T}, \\  A = A.*{M^T}Y./{M^T}MA.  {arr ...

  8. latex行间距调整

    如何调整LaTeX的行间距 在写论文或其他文档时,调整行间距对于页面美观和易读性非常重要.LaTeX提供了多种方式来调整行间距,本文将介绍三种基本方法. 方法一:使用setspace宏包 调用sets ...

  9. word 中公式显示不全行距调整

    当在 word 中设置固定行距时,公式经常显示不全,这是如果设置为单倍行距时,视觉上又有点拥挤,解决办法就是设置单倍行距,但需要调整 页面行距. 以 中文四号(14pt) 字体为例: word 中 布 ...

最新文章

  1. 使用Poi读取xlsx类型的Excel
  2. Linux笔记——linux下的语音合成系统
  3. Hadoop Writable机制
  4. Scikit-learn 数据预处理之归一化MinMaxScaler
  5. 03、MySQL—数据表操作
  6. mysql 允许用户远程_Mysql 允许用户远程操作
  7. 信息学奥赛一本通C++语言——1050:骑车与走路
  8. CSS彻底研究(1)
  9. java 连接eureka_在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
  10. webgame 上线版本控制
  11. 历史chrome(离线)版本下载
  12. Gantt - attachEvent所有事件(归类、索引)
  13. 数据库备份的三种方式 不要再干掉数据库跑路啦~
  14. ubuntu 强制删除文件夹
  15. PC网站实现微信扫码登录功能(一)
  16. 【HTML 教程系列第 4 篇】HTML 的注释怎么写?
  17. 数字图像分辨率的认识
  18. excel表格如何转换成word表格_将excel/word数据复制粘贴到word表格的几种方式
  19. TTSR:用Transformer来实现端到端的超分辨率任务 | CVPR2020
  20. TI mmWave radar sensors Tutorial 笔记 | Module 4 : Some System Design Topics

热门文章

  1. 计算机英语第五版翻译,计算机专业英语教程第5版翻译
  2. flutter 升级androidX的坑记录
  3. 中国三大港进入全球最高效港口排名前十,新兴市场物流竞争力中国第一,印度和南亚或继续充当西方买家采购替代市场 | 美通社头条...
  4. win2003 启动报错c0000135 this application has failed to start because csrsrv.dll was not found
  5. 80c51单片机指令大全
  6. springboot水环境检测系统的设计与实现毕业设计源码041446
  7. 达梦数据库报错“[警告]Error Code:-70037,字符串不完整”
  8. Android RxJava生命周期管理解决方案整理
  9. 速度来!《软技能:代码之外的生存指南 (第2版)》送书4本
  10. STM32串口中断接收标记USART_RX_STA 学习