本文已加入专栏文章目录,归入「概论」文章系列。
情况描述
使用一些 latex 环境时, 可能遇到环境前后有极大纵向间距(空白)的问题。这些环境包括(但不限于)
- 控制段落对齐方式的环境,如
{center}
- 列表环境,如
{enumerate}
- 自己定义的定理环境,如通过
newtheorem
定义
简单解释
- 上述环境在输出时,会在首末插入可拉伸的纵向间距。
- 在纵向两端对齐的页面中,如果内容的高度不足,latex 就会拉伸(可拉伸的)纵向间距。
- 如果纵向间距过度拉伸,在视觉上就会带来大段空白,出现本文第一节描述的情况。
详细解释
- 可拉伸纵向间距的来源
- 上述环境在输出时,都把内容嵌套在一个
{trivlist}
环境中 {trivlist}
环境的首尾有纵向间距parsep
,初始值与parskip
相同- 标准文档类中,
parskip
的初始值为0pt plus 1pt
,是可伸长的距离(glue)
- 上述环境在输出时,都把内容嵌套在一个
- 页面纵向对齐方式
- latex2e kernel 提供了两种纵向对齐方式:
- 两端对齐,对应命令
flushbottom
,视觉效果是每一(自然填满的文字)页的首行和末行,文字的基线高度分别相等。(印刷质量有保证时,把双面印刷的纸张对着光源,能看出首末行基线高度分别相等的排印效果。如果两页都是纯正文页,甚至能看出每一行的基线高度分别相等的排印效果。) - 顶部对齐,对应命令
raggedbottom
。 - 页面(文字)内容高度小于版芯高度时,当前页面在纵向就会有空白空间
- 两端对齐时,空白空间在可拉伸的纵向间距处,按一定比例均匀输出。
- 顶部对齐时,空白空间在页面末尾集中输出。
- 从排版的角度,还有纵向居中的页面对齐方式。这种情况下,空白空间在页面顶部和尾部平均输出。
- 两端对齐,对应命令
- latex2e kernel 提供了两种纵向对齐方式:
- 标准文档类中的默认纵向对齐方式
- 标准文档类的默认纵向对齐方式
- 文档类
article
和report
,底部对齐 - 文档类 book,两端对齐
- 文档类
- 能影响纵向对齐方式的标准文档类选项
- 选项
oneside
会执行raggedbottom
- 选项
twocolumn
会执行flushbottom
- 选项
- 最后,latex2e kernel 会设置纵向对齐方式为底部对齐
- 标准文档类的默认纵向对齐方式
- glue 的拉伸
- 有限(
plus 1pt
)和无限(plus 1fil
)的拉伸范围都会带来无限的拉伸效果,参见texdoc texbytopics
, sec. 8.3.1 - 如果需要拉伸的空间很大,就会出现情况描述一节中的问题,同时向 log 输出
badbox: underfull hbox/vbox
信息。
- 有限(
解决方案
- 使用
newpage
手动换页,在「页面在段落之间断开」时这么做相当方便。 - 局部或整体地改变页面纵向对齐方式,例如用
raggedbottom
切换到顶部对齐。 - 以减少需要拉伸的空间为目的,调整文档内容。例如,改变某段落的文字长度、调整示例的出现位置。在空白空间较大时,就不得不调整文档内容。
注意,此类调整应在文档定稿、进入调版阶段后进行。
一个例子
documentclass{book}
usepackage{lipsum}
usepackage[pass, showframe]{geometry}
deftallBox{%
par
fbox{begin{minipage}{.5linewidth}
vspace{10em}hspace{10em}
end{minipage}}par}
begin{document}
lipsum[1-2]
begin{enumerate}
item a
end{enumerate}
tallBox
lipsum[3]
tallBox
end{document}
- 例子使用
book
文档类 - 编译后,能看到
{enumerate}
环境前后有大块纵向空白 - 修改文档类为
article
或report
,可以看到顶部对齐的效果