我在准备文档时经常会看到关于“\hbox 过满”的警告。由于文档仍处于早期阶段,我认为没有必要当场更正它们 - 因为文档无论如何都会发生变化。
但我也想摆脱那个难看的溢出(通过增加单词之间可能的间距宽度),这样我就可以将草稿展示给某人。
有办法吗?
答案1
TeX 有一个原始参数来处理这种情况:\emergencystretch
,Knuth 在 TeXbook 第 14 章中写道
如果您想不惜一切代价避免框线过满,而又不试图手动修复它们,您可能想设置
\tolerance=10000
;这允许在棘手的情况下接受任意糟糕的行。但无限的容忍度不是一个好主意,因为 TEX 不会区分非常糟糕和极其糟糕的行。实际上,10000 的容忍度鼓励 TEX 将所有糟糕之处集中在一处,形成一条真正难看的行,而不是两条中等糟糕的行,因为根据规则,一次“注销”产生的总缺点最少。有一种更好的方法可以获得所需效果:TEX 有一个名为 的参数,\emergencystretch
在计算糟糕程度和缺点时,会将该参数添加到每行的假定可伸缩性中,以防框线过满无法避免。如果 为正数,当前几次遍历无法满足和\emergencystretch
时,TEX 会在选择换行符之前对段落进行第三次遍历。的效果 是缩小不良程度,以便区分大无穷和小无穷。通过设置足够高(基于 ),您可以确保永远不会超过;因此永远不会出现过满框,除非断行任务确实不可能完成。\pretolerance
\tolerance
\emergencystretch
\emergencystretch
\hsize
\tolerance
例如,你可以使用
\emergencystretch=.5em
答案2
\sloppy
LaTeX对此用途有一个声明,它还设置了\emergencystretch
一些其他相关参数,其定义为
\def\sloppy{%
\tolerance=9999
\emergencystretch=3em
\hfuzz .5pt
\vfuzz=\hfuzz}
因此,除了增加之外,\emergencystretch
它还会增加(以允许导致更大“不良”的换行),并且\tolerance
增加,因此 TeX 不会警告过满的框,除非它们超过半个点的过满。\hfuzz
\vfuzz