我是否需要关心坏盒子?

我是否需要关心坏盒子?

当我从 LaTeX 源编译我的 PDF 时,我是否必须关心有关“坏框”的所有消息(当前为 28 条)?

我觉得 PDF 不错。

答案1

值得注意的是,TeX 在这里不做出价值判断。

用户或者更可能是代表用户的类文件,对框可能溢出的数量、短页面允许的拉伸量等进行限制。只有超出这些用户设置的限制时,TeX 才会发出警告。

因此,如果您设置了包含大量不可拆分大块的复杂材料,则意味着约束可能不正确。(它们主要针对以可以连字符连接的文本为主的副本而设计,并且有足够的单词间拉伸以获得紧密贴合的框。)

与其让 TeX 尝试满足无法实现的约束,然后抱怨无法满足,不如修改(放宽)约束。但在这样做之前,您应该确保它们确实是无法实现的,而不仅仅是用户错误阻止 tex 找到良好的布局。

根据要求添加了一些一般注释:

设置仅有的影响警告信息。

有几个设置只影响 TeX 发出的消息。例如,如果你知道一些框会超出 2pt(并且你不介意这一点),但你希望在框超出 1cm 时收到警告,那么设置

\hfuzz=2pt

这将使排版有所不同,但会抑制对略微过满的框的警告。

\vfuzz

对于垂直盒子来说也是一样的。

相似的是\hbadness哪些vbadness是如何的衡量标准 坏的一个盒子通常表示必须拉伸多少白色空间。确切的数字通常不是那么重要,但 0 是好的,而 10000 是无限坏(TeX 的坏度计算会任意将任何非常糟糕的盒子强制到这个数量)。

该参数\tolerance告诉 Tex 应允许多大的拉伸。TeX 会尝试以某种方式换行,以使不良程度保持在指定的容差以下。

良好的印刷质量表明您不应该忽略(或关闭)这些警告,但有时这样做是有意义的。例如,MathML 建议的 PDF 版本由 LaTeX 从主要为规范 HTML 版本设计的源自动设置。因为它有许多一行或两行的段落和许多缩进的表格和示例,所以右边距本来就很不均匀,所以偶尔让过大的示例突出来也没什么不好,它设置为

\hfuzz=20pt
\vfuzz=20pt
\hbadness=2000
\vbadness=\maxdimen

不影响好盒子排版的设置

TeX3 引入了一个参数\emergencystretch,如果默认拉伸不能产生良好的断点,则可以更均匀地向段落添加额外的拉伸。有时将其设置为非零值可能会有所帮助。

确实影响排版的设置。

LaTeX 有一个命令\sloppy可以设置更宽松的排版

\def\sloppy{%
  \tolerance 9999%
  \emergencystretch 3em%
  \hfuzz .5\p@
  \vfuzz\hfuzz}

容忍度的设置使其比可能想要的更加草率,可能值得尝试只设置 \emergencystretch

LaTeX 使用的默认繁琐设置是

\def\fussy{%
  \emergencystretch\z@
  \tolerance 200%
  \hfuzz .1\p@
  \vfuzz\hfuzz}

对于垂直分页,如果输出例程中出现未满框,您可能更喜欢使用\raggedbottom而不是 , \flushbottom因为这会在每页末尾添加可拉伸空间,因此不会出现未满页面(但短页将被默默接受)。当然,可以在这两个极端之间找到某种方法,即添加仅延伸有限量的粘合,而不是填充粘合。

以上是主要全球的设置,但是文档设计的每个方面都会影响这一点。特别是,如果显示元素(例如列表和显示的数学)之间的空间以及段落之间的空间有弹性这样 TeX 就更容易找到“好的”分页符,但这意味着不同页面上的行之间没有垂直对齐。尤其是对于使用双页跨页的书籍设计,设计师通常希望将文本保持在网格上,文本始终在固定位置对齐。这通常意味着您必须使所有垂直空间更加严格,这增加了 Tex 发出有关 vbox 过满或过满警告的可能性。

答案2

是的,你一定要照顾好他们。

  1. Overfull \hbox消息告诉您某条线超出了右边距;

  2. Underfull \hbox消息告诉您某些行排版不佳(或者您错误地使用了\\垂直空格(例如,\\连续输入两个);

  3. Underfull \vbox这些消息通常会告诉您页面排版不佳。

有多少坏事需要行动很难说,但我会绝不接受其中有一些的最终 PDF Overfull \hbox

相关内容