单词内或单词前的换行符没有连字符模式

单词内或单词前的换行符没有连字符模式

我检查了警告,发现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}

在此处输入图片描述

第三段排版没有溢出。

相关内容