理解 LaTeX 中的空行:作用原理与控制
在 LaTeX 文档的编写过程中,我们经常会注意到源文件中输入的空行在编译后的 PDF 文件中并没有完全按照字面意思呈现为一个“空行”。理解 LaTeX 处理空行的机制对于精确控制文档布局至关重要。这里的“空行”主要指在 LaTeX 源文件中通过按下回车键(或换行键)两次以上创建的完全空白的行,不包含任何文本或命令。
是什么:LaTeX 源文件中的空行是什么?
从技术上讲,LaTeX 源文件中的一个或多个连续的空行(即只有换行符的行,或者仅包含空格和制表符后跟换行符的行)被 LaTeX 预处理器解释为段落结束的标记。它们并不是直接在输出中生成可见空白行的指令。
为什么:为什么 LaTeX 将空行处理为段落结束?
这是 LaTeX 设计哲学的一部分,旨在将内容的逻辑结构(段落、章节等)与排版的视觉呈现(行距、段落间距、缩进)分开。LaTeX 的默认行为是自动处理段落之间的垂直间距和新段落的首行缩进。源文件中的空行提供了一个简单的方式来告诉 LaTeX:“这里是一个段落的结尾,请另起一个新段落。”
因此,连续的空行(一个或多个)在大多数情况下会被视为同一个段落结束标记,它们的效果与只使用一个空行是相同的。
哪里:源文件中的空行会在哪些地方产生效果?又在哪里不会产生效果?
产生效果(产生段落间隔和首行缩进):
- 在普通文本流中: 当一个或多个空行出现在两段连续的普通文本之间时,LaTeX 会结束前一个段落,并在输出中添加一个段落间的垂直间距(通常由
\parskip参数控制),然后以新段落的首行缩进(通常由\parindent参数控制)开始排版后一个段落。 - 在某些命令或环境之后: 如果一个空行出现在一个不会自动结束段落的命令(例如设置字体的命令)或者一个不会自动添加垂直空间的短环境之后,它仍然可能被解释为段落结束。
不产生效果(不产生额外的垂直空间或段落间隔):
- 在命令之后: 如果空行紧跟在一个自动结束段落的命令之后(例如
\section,\subsection,\chapter,\maketitle等),这些命令本身已经处理了排版和间距,后续的空行通常会被忽略,不会产生额外的段落间距。 - 在环境内部: 在许多 LaTeX 环境内部,例如
itemize,enumerate,quotation,verbatim,equation,align等,空行通常会被忽略或有特殊含义(比如在itemize中可能表示列表项内部换行,而不是新的列表项)。它们不会像在普通文本中那样导致段落间距和缩进。 - 在数学模式中: 在行内数学模式 (
$...$或\(...\)) 或显示数学模式 (\[...\],equation,align等) 中,空行会被完全忽略。 - 在文本行的开头: 如果空行出现在文档的开头或某一段文本行的开头,它们通常会被忽略。
- 连续多个空行: 两个或更多的连续空行通常只会被视为一个段落结束标记,产生的效果与一个空行相同,不会生成更多的垂直空间。
- 在注释行(以 % 开头)之后: 如果空行紧跟在一个注释行之后,它仍然会被解释为段落结束,但如果空行本身是注释的一部分,则不会产生效果。
多少:一个空行(或多个)通常会产生多少垂直空间?
一个或多个连续的空行在 LaTeX 中默认产生的是一个“段落间距”,这个间距的高度由内部参数 \parskip 控制。\parskip 的默认值取决于使用的文档类和宏包,并且通常具有弹性(rubber length),这意味着它可以根据页面的垂直空间进行微调以优化排版。它不是一个固定不变的高度,比如“恰好一行文字的高度”。
需要注意的是,新的段落通常还会伴随首行缩进,这个缩进的高度由 \parindent 控制。
如何/怎么:如何控制、增加或避免空行(垂直空间)?
由于源文件中的空行主要用于标记段落结束而非直接生成固定高度的垂直空间,如果我们想要精确控制输出中的空白行或垂直间距,需要使用特定的 LaTeX 命令。
1. 避免由源文件空行产生的段落间距:
- 使用注释: 在你想要断开行以便于阅读源文件,但又不希望产生段落间距的地方,可以在上一行的末尾紧接着使用百分号
%开始注释。这样,即使下一行是空白的,或者下一行有文本,LaTeX 也会认为这是一个连续的段落。Example:
这是第一行文字,后面是一个
注释行。
%
这是紧接着的文字,它们会在同一段落中排版。 - 使用强制换行符
\\: 在行尾使用\\可以强制换行,但不会结束当前段落(除非在某些特殊环境中)。这意味着下一行文本不会产生首行缩进,并且不会有额外的段落间距。Example:
这是第一行文字,强制换行。\\
这是换到新的一行,但在同一段落。
2. 强制在输出中添加特定的垂直空间(创建“空行”效果):
- 基本垂直间距命令: 这些命令在当前位置插入一个固定的垂直间距。
\smallskip:插入一个小的垂直间距。\medskip:插入一个中等的垂直间距。\bigskip:插入一个大的垂直间距。
这些命令的实际高度也是预定义的,并在一定范围内可伸缩。它们可以在段落之间使用,也可以在其他地方使用。
- 精确控制垂直间距:
\vspace{length}这个命令可以在当前位置插入一个精确指定高度的垂直间距。
length可以是任何 LaTeX 认可的长度单位,如pt(点),mm(毫米),cm(厘米),in(英寸),ex(当前字体中小写 ‘x’ 的高度),em(当前字体中大写 ‘M’ 的宽度或字体大小)。Example:
第一段文字。
\vspace{1cm}
第二段文字,与第一段之间有 1 厘米的间隔。Example:
列表项 1
\vspace{0.5\baselineskip}
列表项 2 (在列表项之间增加半行高的空间)如果希望这个间距即使在换页时也不会被删除,可以使用
\vspace*{length}命令。 - 添加恰好一整行空行的效果:
虽然没有一个直接的命令叫做“加一个空行”,但你可以通过
\vspace命令结合当前行高\baselineskip来模拟。例如,插入一行高度的垂直空间:这是第一段文字。
\vspace{\baselineskip}
这是第二段文字,它们之间有大约一行文字高度的间隔。或者,更常见的是,你想要在段落之间有额外的空间,除了默认的
\parskip之外,你可以在段落之间使用\bigskip或\vspace。
3. 控制默认的段落间距和缩进:
- 修改
\parskip: 可以通过设置\setlength{\parskip}{length}或\addtolength{\parskip}{length}来修改默认的段落间距。将其设置为0pt可以消除段落间的额外垂直空间,但此时通常需要配合首行缩进。 - 修改
\parindent: 可以通过设置\setlength{\parindent}{length}来修改默认的首行缩进。将其设置为0pt可以消除首行缩进。 - 消除首行缩进:
\noindent在某个段落的开头使用
\noindent命令可以取消该段落的首行缩进。这常用于章节标题后的第一个段落。Example:
\section{新的章节}
\noindent这是章节后的第一段文字,它不会有首行缩进。
总结
理解 LaTeX 中源文件空行是段落结束标记的本质,是掌握排版控制的基础。直接使用空行主要用于自然地划分段落并依赖 LaTeX 的默认间距设置。当需要精确控制垂直空间或强制生成视觉上的“空行”时,必须借助于 \vspace, \smallskip, \medskip, \bigskip 等命令,或者通过调整 \parskip 和 \parindent 参数来改变默认的段落排版规则。
记住,多个连续的空行效果等同于一个空行,它们都是简单地通知 LaTeX “前一个段落结束了”。