latex换页_[LaTeX 漫谈] 被无限拉伸的纵向间距,和页面纵向对齐方式

本文已加入专栏文章目录,归入「概论」文章系列。

情况描述

使用一些 latex 环境时, 可能遇到环境前后有极大纵向间距(空白)的问题。这些环境包括(但不限于)

  • 控制段落对齐方式的环境,如{center}
  • 列表环境,如 {enumerate}
  • 自己定义的定理环境,如通过 newtheorem 定义

简单解释

  • 上述环境在输出时,会在首末插入可拉伸的纵向间距。
  • 在纵向两端对齐的页面中,如果内容的高度不足,latex 就会拉伸(可拉伸的)纵向间距。
  • 如果纵向间距过度拉伸,在视觉上就会带来大段空白,出现本文第一节描述的情况。

详细解释

  • 可拉伸纵向间距的来源
    • 上述环境在输出时,都把内容嵌套在一个 {trivlist} 环境中
    • {trivlist} 环境的首尾有纵向间距 parsep,初始值与 parskip 相同
    • 标准文档类中,parskip 的初始值为 0pt plus 1pt,是可伸长的距离(glue)
  • 页面纵向对齐方式
    • latex2e kernel 提供了两种纵向对齐方式:
      • 两端对齐,对应命令flushbottom,视觉效果是每一(自然填满的文字)页的首行和末行,文字的基线高度分别相等。(印刷质量有保证时,把双面印刷的纸张对着光源,能看出首末行基线高度分别相等的排印效果。如果两页都是纯正文页,甚至能看出每一行的基线高度分别相等的排印效果。)
      • 顶部对齐,对应命令 raggedbottom
      • 页面(文字)内容高度小于版芯高度时,当前页面在纵向就会有空白空间
        • 两端对齐时,空白空间在可拉伸的纵向间距处,按一定比例均匀输出。
        • 顶部对齐时,空白空间在页面末尾集中输出。
      • 从排版的角度,还有纵向居中的页面对齐方式。这种情况下,空白空间在页面顶部和尾部平均输出。
  • 标准文档类中的默认纵向对齐方式
    • 标准文档类的默认纵向对齐方式
      • 文档类 articlereport,底部对齐
      • 文档类 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} 环境前后有大块纵向空白
  • 修改文档类为 articlereport,可以看到顶部对齐的效果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值