我如何限制 LaTeX 在定义、定理、引理、推论、证明等之间的垂直间距的延伸?

我如何限制 LaTeX 在定义、定理、引理、推论、证明等之间的垂直间距的延伸?

我正在编写一份长文档,其中包含许多定义、定理、引理、推论和证明。这些在序言中使用包定义amsthm如下:

\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{thm}{Theorem}
\newtheorem{lem}{Lemma}
\newtheorem{cor}{Corollary}

在几页上,LaTeX 将这些元素之间的垂直间距(以及它们与上下文本之间的间距)拉伸得比我想要的要大。这些页面大约为 5" x 8",不允许出现孤行或孤行,因此这种激进的垂直拉伸可能只是为了将内容向下拉伸到与页面底部齐平。

我怎样才能限制 LaTeX 在整个文档中延伸这些垂直空间的程度?


笔记:

这些“过大的空白”也在答案中描述这里。但是,那里的解决方案是更改\flushbottom\raggedbottom,或者相关解决方案是让单个页面底部参差不齐,如所述这里,对于我的应用来说太极端了——我想允许一些延伸,但也限制这种延伸。

我发现由于问题的偶然性,制作 MWE 很有挑战性,但如果我成功了,我就会发布一个。

答案1

分页是 LaTeX 的致命弱点¹。无论好坏,它都能做到可怕分页的工作。

因此,您需要进行一些手动调整才能获得所需的结果。无论您对定理样式进行多小的拉伸,LaTeX 都会想要拉伸某物以达到平齐底部的效果。

首先,出于对一切神圣之物的热爱,不要让它变得\baselineskip可拉伸。

接下来,你需要做的是在受影响的页面上添加更多文本。这意味着你需要浏览整个文档并寻找调整分页符的地方。当我发布衬线早在 90 年代,我就经常寻找机会延长或缩短页面长度以获得最佳分页符(由于它是两列布局,因此我需要连续四个完美的分页符,这让事情变得更加复杂)。数字或表格是添加一点额外空间(或稍微修剪空间)的好地方,这样您就可以向前或向后移动一行。

您可以使用以下命令调整单个页面的长度

\enlargethispage{\baselineskip}

延长页面或

\enlargethispage{-\baselineskip}

缩短页面。

您需要对相对的页面进行相同的调整,以防止页面底部过长。

较长的段落有时可以拉长,如评论中提到的,通过添加

\looseness=±1

段落收紧或拉伸一行。我并不指望在较短的段落上能取得好的效果。

您还表示您已禁止在文档中使用孤行和单行。您可能会发现您需要放宽此禁令以获得更好的分页效果。就我个人而言,我不允许在分页符之间使用连字符,但如果没有办法,我可以使用孤行或更长的单行。

\mbox有助于消除分页符处的错误连字符。³ 您可能还会发现更改一些段落末尾的空格也很有帮助,以~防止分页符处的最后一行太短。

采取这些措施后,您可以通过定义以下命令放宽寡妇和孤儿规则:

\NewDocumentCommand{\okpar}{}
   {{\widowpenalty=0 \clubpenalty=0 \par}}

\okpar在段落末尾注明你想允许寡妇和/或孤儿。⁵

将任何命令包装\looseness在宏中可能也不是一个坏主意,尽管它们至少不需要使用分组技巧来\okpar将其效果限制在单个段落中。


  1. 公平地说,我还没有看到任何好的自动分页功能。我最近不得不给一个期刊的设计师提供一些具体的指导,这个期刊出版了我的故事获得良好的分页效果。原始的分页效果非常糟糕。

  2. 哥林多前书 10:23

  3. 在典型的短视模式下,我经常花很长时间调整页面大小衬线而不是仅仅\mbox{polysyllabic}在我的文档中写⁴。

  4. 事实上\hbox自从衬线是用自定义格式排版的。除其他外,它还启用了一种简单的机制来动态调整页面大小。但是,悬挂标点符号代码在 – 和 – 之后会破坏换行符,因此我不得不在源代码中的每个和实例后插入手动惩罚-----允许换行。我可能-也需要它——自从我上次查看这些文件以来已经 20 年了,它们所在的硬盘崩溃了。

  5. Knuth 对寡妇的定义就是我所学的孤儿,而他的棍棒就是寡妇。⁶ ,

  6. 为了替 Knuth 辩护,我使用谷歌搜索来验证我记得所学的内容,我发现在印刷术语中,对寡妇和孤儿的定义存在各种相互矛盾之处。

  7. 后期添加与 Bringhurst 核对印刷风格的元素,Bringhurst 将孤行字体放在页面底部,将寡行字体放在页面顶部,因此在这一点上,Knuth 拥有印刷品味的主要仲裁者之一的支持。

答案2

尝试直接回答原始问题,似乎 amsthm 包定义的定义、定理等的上下间距至少可以按照 Werner 对以下问题的回答进行一定程度的限制:问题。例如:

\newtheoremstyle{resultstyle}
  {1em} % Space above
  {1em} % Space below
  {} % Body font
  {} % Indent amount
  {\bfseries} % Theorem head font
  {.} % Punctuation after theorem head
  {.5em} % Space after theorem head
  {} % Theorem head spec (can be left empty, meaning `normal')

\theoremstyle{resultstyle}
\newtheorem{thm}{Theorem}
\newtheorem{lem}{Lemma}
\newtheorem{cor}{Corollary}

但是,正如 Fran 上述较长的评论所暗示的那样,当 LaTeX 试图实现时,这可能会扩展其他地方的垂直空间\flushbottom

\vspace{-\topsep}例如,也许令人惊讶的是,定理/引理/推论与随后的证明之间的垂直空间可能仍然会延伸很多。将一个插入到这个延伸的垂直空间中或使用相关的全局方法(例如上述方法)可能很有吸引力这里。具体来说,我们这样做可能是希望 LaTeX 优先满足 skip 和 sep 约束,并\flushbottom在必要时忽略每个相关页面上的矛盾约束。但是,根据我的经验,LaTeX(可以理解)不会这样做,而且这种方法的输出有时很差。

一般来说,通过以下方式可以获得更好的输出:

  1. 当出版商允许时,\flushbottom通过切换 到\raggedbottom
  2. 逆转航向:允许所有相关的跳跃和分段以保守的量延伸。这可以包括灵活性\parskip,甚至(假设且非常罕见) \baselineskip非常新近的问题。

\parskip就我个人而言,对于不灵活的定理、证明等,其内部和外部的变化\baselineskip在某些页面上太明显了(与我书架上的类似书籍相比),即使逐页手动调整也是如此(请参阅 Don Hosek 的回答,其中有关于这些的出色总结,以及主要问题下方的评论,获取相关链接)。我没有选择以略微灵活\parskip和略微灵活\baselineskip来实现结束\flushbottom,这在专业实践中似乎并不常见,而是选择了\raggedbottom

相关内容