当页面上容纳更多文本时,停止 LaTeX 调整垂直间距

当页面上容纳更多文本时,停止 LaTeX 调整垂直间距

我需要将两张纸并排放置。每张纸都是已编译的 LaTeX 文档的打印件。第二份文档的开头与第一份文档相同,但下方插入了更多文本。我希望行/图像/项目符号/表格单元格在文档的相同部分中对齐。

这是一个最小的例子。两个文档并排。右边的文档以与左边相同的方式开始。我添加了一些红线来引导眼睛检查我感兴趣的垂直间隙。

两个文件并排

在我看来,大致有以下几点:

  • 每个段落的行间距大致保持不变。这就是我想要的。
  • 右侧段落之间的间距略小于左侧段落之间的间距(\parskip 设置为 \medskipamount)。我希望两者相同。
  • 左侧列表中第一个项目上方的间距比右侧的相同间距大得多。我希望它们相同。
  • 我无法判断列表中项目之间的间距是否相同。
  • 我无法判断图像上方/下方的间距是否相同。
  • 我没有在这个例子中尝试过表格,并且我不确定行高是否会调整。

我想做的是:设置所有垂直间距,使它们在左侧或右侧相同。据我了解,这将涉及固定为一个常数值:

  • 段落间距
  • 列表上方和下方的空间
  • 列表中项目之间的空间
  • 浮动对象上方和下方的空间
  • 列表上方和下方的空间
  • 图像上方和下方的空间
  • 桌子上方和下方的空间
  • 表格的行高
  • 开始/结束环境时的空间(如果有)

我不知道这个列表是否详尽,但我认为它涵盖了我所有的用例。

据我所知,LaTeX 中的每个长度都有一个正/负值,我需要将所有垂直空间的正/负值设置为 0。但是,我不知道实现此目的的最佳方法,也不知道需要设置的每个长度的名称,或者是否有办法一次设置所有垂直长度。一次性设置它们会更好,因为这意味着我不会遗漏任何我不知道的变量。

我知道在 99.99% 的情况下,LaTeX 调整空格可以产生最令人满意的印刷效果,但我确实需要为我的应用程序将所有内容排列整齐。这可能会导致页面末尾出现过多的空白,但我并不介意。我几乎希望能够控制 LaTeX 是否将页面上的最后一段拆分到页面边界上,或者只是将整个段落移动到下一页(通过调整惩罚或类似方法)。

我还注意到 setspace 包有一个 \setstretch 命令,但我不完全了解它的作用以及设置了/未设置哪些长度。

最后一个选项是让 LaTeX 根据需要调整较长文档中的空格,然后将此信息反馈到较短文档的编译中,以便每个空格都相同。有什么方法可以实现此选项?

我不认为这个问题是重复的,因为我搜索了好几次都没能找到答案,但如果是重复的,请告诉我原始答案,并接受我的歉意。我可能找不到正确的搜索词。

答案1

这取决于您的使用情况,但有适合此类任务的软件包。例如paracol.sty(不对称列宽显示效果):

在此处输入图片描述

答案2

也许不太专业,但我会用

\phantom{what you don't want to see}

为第一页,并将添加的内容放入第二页中。

答案3

这里有两个很好的答案,都可以完成这项工作,但都没有直接回答我提出的问题。因此,我添加了这个答案(我的最终解决方案),以防有人遇到具有不同用例的问题。

我找到了这个页面:http://www-h.eng.cam.ac.uk/help/tpl/textprocessing/squeeze.html 这是对 LaTeX 中间距的一个非常平易近人的介绍,并且包含许多有用的变量,这些变量需要固定为常数值(不使用胶水)才能满足我的要求。

我在文档标题中设置的变量(基于从上面的链接获取的变量)是:

 %% page layout
  %% paragraphs
   \setlength{\baselineskip}{12pt plus 0pt minus 0pt}
   \setlength{\parskip}{12pt plus 0pt minus 0pt}
   \setlength{\parindent}{0pt plus 0pt minus 0pt}
  %% floats
   \setlength{\floatsep}{12pt plus 0 pt minus 0pt}
   \setlength{\textfloatsep}{20pt plus 0pt minus 0pt}
   \setlength{\intextsep}{14pt plus 0pt minus 0pt}
   \setlength{\dbltextfloatsep}{20pt plus 0pt minus 0pt}
   \setlength{\dblfloatsep}{14pt plus 0pt minus 0pt}
  %% maths
   \setlength{\abovedisplayskip}{12pt plus 0pt minus 0pt}
   \setlength{\belowdisplayskip}{12pt plus 0pt minus 0pt}
  %% lists
   \setlength{\topsep}{10pt plus 0pt minus 0pt}
   \setlength{\partopsep}{3pt plus 0pt minus 0pt}
   \setlength{\itemsep}{5pt plus 0pt minus 0pt}
   \setlength{\labelsep}{8mm plus 0mm minus 0mm}
   \setlength{\parsep}{\the\parskip}
   \setlength{\listparindent}{\the\parindent}
  %% verbatim
   \setlength{\fboxsep}{5pt plus 0pt minus 0pt}

我并不是说这个列表是详尽的,但它满足了我的要求。要获得详尽的列表,请遵循@barbara beeton的建议,并在.cls文件中查找所有seps/skips。请注意,没有必要写“plus 0pt minus 0pt”,因为如果省略它,LaTeX会推断出这一点,但我明确地将它包括在内,以便在将来重新查看文档时提醒自己“无胶水”要求。

我还曾经\raggedbottom确保任何额外的空白总是添加在页面的底部。

还需要注意的是,更改文本颜色会对垂直间距产生巨大影响。请参阅此问题:更改表格中的字体颜色并添加不必要的额外间距 我用来解决这个问题的方法是该问题所接受的答案的后半部分所建议的:使用\leavevmode之前\color

\leavevmode\color{new1}\lipsum[1]
\leavevmode\color{new2}\lipsum[2]

相关内容