我检查了警告,发现hbox
。这个词planned
超出了范围。根据本网站,它没有任何连字符,这解释了为什么 TeX 没有将其断开。但它没有解释为什么它没有在单词前断开。
那么我该如何告诉 TeX 在太长而无法连字符的单词前断行呢?
更新
为了澄清这种情况,这个问题总是发生在不可断词是一行中的最后一个单词时。这也适用于with
没有连字模式的单词,如和名称。TeX 宁愿产生一个过满的水平盒子,而不是在单词前断行,我不明白为什么或如何改变这一点。
我目前使用XeLaTeX
.microtype
并不能解决问题。
更新 MWE
下面是一个可以重现该问题的示例:
\documentclass{scrbook}
\usepackage{lipsum}
%\hyphenation{plan-ned}
\begin{document}
\lipsum[1]
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA planned BBB CCC.
\lipsum[2]
\end{document}
A
(如果您使用其他纸张格式,请根据需要 调整 的数量。)
定义连字模式时,单词会根据需要断开。但 TeX 不愿意只在单词前断开行。
答案1
仅限于受影响段落的方法是将其包装在 中\begin{sloppypar} ... \end{sloppypar}
。这不是最佳选择;如果可能的话,重写更好。这个问题也可能有帮助:是什么意思\fussy
,\sloppy
,\emergencystretch
,\tolerance
,\hbadness
?
如果任何“过多”的单词都可以合法地用连字符连接,则添加“自由连字符”(\-
)可能比 更好sloppypar
。
答案2
在单词 because 之前不换行也是一种非常糟糕的解决方案。用一个较短的单词来对齐一行根本是不可能的。没有任何空间可以拉伸。
即使打破“AAA”行也不足以实现像样的换行。只有设置非常丑陋的单词间延伸(\fontdimen3\font=1.9em
或更多),您才能在这种情况下获得自动换行。否则,使用默认设置,您将需要至少六个单词间空格才能将“planned”推到下一行。
因此,LaTeX 不会以拙劣的方式解决问题,而是更愿意警告您有关问题(启用草稿选项后更容易看到)并等待您的解决方案。在实际文档中处理此类问题的一个好方法是开始思考如何重写文本。microtype
在某些情况下,使用包也会有所帮助。
答案3
您可以针对特定问题插入软连字符(我认为全局定义plan-ned
为可能的连字符并不好)。
但是,使用 可能会更好microtype
。
使用标准设置,超额已经减少到 3pt 以下,但您可以在局部允许更自由的参数。
\documentclass{scrbook}
\usepackage{microtype}
\usepackage{lipsum}
\SetExpansion[
context = sloppy,
stretch = 100,
shrink = 40,
step = 5,
]{ encoding = {OT1,T1,TS1} }{}
\newenvironment{microtypesloppy}{%
\par\microtypecontext{expansion=sloppy}%
}{\par}
\begin{document}
\lipsum[1][1-3]
\bigskip
% with a soft hyphen
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA plan\-ned BBB CCC.
\bigskip
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA planned BBB CCC.
\bigskip
% better
\begin{microtypesloppy}
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA planned BBB CCC.
\end{microtypesloppy}
\end{document}
第三段排版没有溢出。