什么是未满的水平盒子和垂直盒子以及如何去除它们?

什么是未满的水平盒子和垂直盒子以及如何去除它们?

TeX 经常在运行时以及在生成的日志文件中输出 underfull hbox 和 vbox 警告。这些是什么?我该如何摆脱它们?

答案1

TeX 将元素(字母、行、段落、图片……)放入框中,并使用可拉伸的胶水(放在它们之间)将它们连接在一起,例如,以确保行对齐,或页面填充到指定的高度。在第一个示例中,行放在 hbox(水平框,或材料相对于彼此水平排列的框,在本例中为单词)中,在第二个示例中,页面放在 vbox(垂直框,或材料相对于彼此垂直排列的框,在本例中通常是段落和显示的方程式)中。

如果 TeX 必须将粘连拉伸到超出 (美学上) 可接受的范围,则这种盒子会不完整。在这种情况下,例如,一行中的单词之间会有很多空白 (水平盒子的情况),段落之间会有很多空白 (垂直盒子的情况)。

为了避免水平盒子未满(以及过满),可以在 LaTeX 中使用 microtype 包,当以 pdflatex 模式使用时(直接生成一个.pdf文件,而不是一个.dvi文件),它可以拉伸字母,从而使 TeX 能够更频繁地在行中获得可接受的空白。

另一种手动方法是重新组织句子和段落,或添加显式连字符(例如hyphen\-ation)以获得更好的换行效果。有时,人们甚至可以用这种方式修复错误的分页符(过满的垂直框),方法是用一行缩短或延长段落。

答案2

水平盒子未满意味着 LaTeX 无法将行间距设置得足够宽以填充整个页面宽度,而不会将单词间距增加到允许的最大值以上;相反,水平盒子过满,行无法换行,并且超出了可打印区域的边缘。通常,如果您自己强制换行(使用\\),就会发生这种情况,因此,如果您避免这样做,这种情况应该很少见(其他原因是奇怪的表格环境或强制空白行)

答案3

TeX 经常在运行时以及在生成的日志文件中输出 underfull hbox 和 vbox 警告。这些是什么?我该如何摆脱它们?

这只是 TeX 提醒你无法完美排版你的文档。由于大型文档可能会触发很多对于这些警告,能够抑制它们很有用。我发现了以下技巧https://tex.stackexchange.com/a/19212/126270

\hbadness=99999  % or any number >=10000

这个\hbadness变量根本不影响排版;它只是告诉 TeX 打印烦人的“未满\hbox (badness xxxx) in passage...”警告。设置的越高\hbadness,看到的此类警告就越少。我确认这个技巧对我有效。

这个技巧确实不是压制”过满\hbox (xxxx too wide)detected at line..."警告。要抑制这些,据称您可以使用

\hfuzz=99999pt

尽管这一招在实践中对我来说并没有起到作用。 https://tex.stackexchange.com/a/50850/126270非常好的概括了 TeX 所有与框相关的警告(抑制)机制。

答案4

通常\\会导致这种情况,因为您有一个没有内容的空白行(TeX 算法需要内容)。您可以删除这些空白行并正确留出空间(如果您希望段落之间有额外的空间,请使用,例如\setlength{\parskip}{6pt})。当段落中有一个很长的对象不足以完全填充它时(因此“未满”),也会发生这种情况。最后,在某些情况下,如果您有很长的单词,TeX 算法很难找到一种合适的方法来对齐段落,而不会出现未满的框(文本未达到行的末尾)。您可以通过使用一些较短的单词或重写一些内容来适应算法来避免这种情况。

相关内容