我经常看到 TeX 输出带有警告overfull hbox, badness 10000
。这个消息是什么意思?
答案1
引用菲尔·米勒为了完整起见,答案是:
此消息表示文档中的一行太长,无法容纳在页面的水平空间内,而 TeX 无法找到将其分开的好方法。这通常会导致文本超出页边距,甚至可能超出页面的边缘。常见原因是长单词没有正确的连字符信息和显示的方程式很长。
这些警告也可能通过手动中断工作而发生,-
如评论所述塞巴斯蒂安。可以通过导入包\usepackage{hyphenat}
并使用其命令\hyp{}
来断词(即,hyphenated\hyp{}word
而不是)来解决这个hyphenated-word
问题。但很容易注意到,\hyp{}
一直打字可能会很烦人。下面是babel
包简写。参见问题如何创建快捷方式“= 或 \hyp{} 的替代方案?,了解~=
速记的用法。因此,您可以这样写hyphenated~=word
,而不是hyphenated\hyp{}word
。
Badboxes 警告也可能是由断线引起的,正如\\
另一个\hbox
问题所示:如何停止 \newsavebox 向我提供坏盒子警告或如何使用 \setbox 来获得更好的名称?
您可以控制如何overfull hbox, badness
配置这些乳胶参数的工作,解释如下:
-
badness
是一个从 0 到 10000 的整数,用于衡量任何给定框中的间距质量。 https://en.wikibooks.org/wiki/TeX/definition/badness -
\tolerance
一个参数,告诉 TeX 在没有错误的情况下可以允许多少不良程度。[number] 的范围是 0 到 10000,没有单位。 https://en.wikibooks.org/wiki/TeX/tolerance -
TeX 基元
\pretolerance
是一个整数参数,用于 TeX 的换行算法(如下所述)。数量是 -1 到 10000 之间的整数。如果
\pretolerance
是 0 到 10000 之间的整数,则 TeX 的换行算法首先尝试拆分没有连字符的段落。在此尝试中,TeX 会尽量降低每行的不良程度。如果 TeX 可以拆分段落,使得任何行的不良程度都不超过\pretolerance
,则 TeX 会接受它。如果这不可能,TeX 将重新尝试拆分段落,并允许使用连字符。在第二次尝试中,将使用整数参数 \tolerance 而不是\pretolerance
。如果 TeX 在第二次尝试中失败,则会在日志文件中报告错误。如果
\pretolerance
是-1
,那么 TeX 将绕过第一次尝试断开没有连字符的段落。 https://en.wikibooks.org/wiki/TeX/pretolerance
关于这些问题,有更多有关换行的相关信息:
- \fussy、\sloppy、\emergencystretch、\tolerance、\hbadness 是什么意思?
- \tolerance 和 \badness 之间有什么区别?
- 为什么 Latex 可以自动为某些单词添加连字符,而其他单词却不能?
- 段落中间有较长的空白
连字:
坏盒子:
目录:
- 修复目录中的水平盒子过满的问题,删除过多的点
- 回忆使用 mathptmx 时目录中神秘的溢出水平盒子
- 使用回忆录文档类时,目录条目的 \hbox 过满警告
- titletoc:章节标题右侧不齐
- 如何在回忆录中将目录排版得参差不齐?
- 目录:章节标题右侧不齐
各种各样的:
答案2
然而,第一个答案并没有真正帮助人们解决问题。看一下:
和
http://en.wikibooks.org/wiki/LaTeX/Text_Formatting#Hyphenation
了解\tolerance
、\pretolerance
和\hyphenpenalty
以及它们如何影响过满/不足行为。此外,如果您手动修复文档,可以使用 添加连字词典条目,\hyphenation
或使用 在单词中添加自由连字符\-
。
答案3
此消息表示文档中的一行太长,无法容纳在页面的水平空间内,而 TeX 无法找到将其分开的好方法。这通常会导致文本超出页边距,甚至可能超出页面的边缘。常见原因是长单词没有正确的连字符信息和显示的方程式很长。