我有如下一段文字:
Lorem ipsum dolor sit amet,consetetur BRANDNAME sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua。只见光亮、发出警报、只剩下痛苦和复活。
LaTeX 会将行拆分成如下形式
Lorem ipsum dolor sit amet, consetetur BRANDNAME
sadipscing elitr, sed diam nonumy eirmod tem-
por invidunt ut labore et dolore magna ali-
quyam erat, sed diam voluptua. At vero eos et
accusam et justo duo dolores et ea rebum.
相反,我期望它做类似的事情:
Lorem ipsum dolor sit amet, consetetur
BRANDNAME sadipscing elitr, sed diam nonumy ei-
rmod tempor invidunt ut labore et dolore magna
aliquyam erat, sed diam voluptua. At vero eos
et accusam et justo duo dolores et ea rebum.
我不知道如何打破拉丁音节,但我希望问题已经很明显了。名称必须完全大写且不能换行,但布局也不应该被破坏。我使用 PdfLaTeX 作为编译器和哈佛风格。这个问题只影响行末完全大写的单词。我有点惊讶,之前没有发现其他人遇到同样的问题……
答案1
处理这个问题的最佳方法是使用宏(为了方便和一致性)并\emergencystretch
根据您的需要进行调整:
\documentclass{article}
\usepackage{pgffor}
\pagestyle{empty}
\usepackage[paper=a6paper,paperheight=.25\paperheight]{geometry}
\newlength{\BRANDNAMElen}
\settowidth{\BRANDNAMElen}{BRANDNAME}
\setlength{\emergencystretch}{1.1\BRANDNAMElen}% \emergencystretch is slightly longer than \BRANDNAMElen
\newcommand{\BRANDNAME}{\mbox{BRANDNAME}}
\begin{document}
\setlength{\emergencystretch}{5em}
\foreach \x in {\unskip,s,si,sit,sit{ },
sit a,sit am,sit ame,sit amet,sit amet{ },
sit amet c,sit amet co,sit amet con,sit amet cons,
sit amet conse,sit amet conset,sit amet consete,
sit amet consetet,sit amet consetetu,sit amet consetetur,
sit amet consetetur{ },sit amet consetetur l,sit amet consetetur lo,
sit amet consetetur lor,sit amet consetetur lore,sit amet consetetur lorem,
sit amet consetetur lorem{ },sit amet consetetur lorem i,sit amet consetetur lorem ip,
sit amet consetetur lorem ips,sit amet consetetur lorem ipsu,sit amet consetetur lorem ipsum,
sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum,sit amet consetetur lorem ipsum} {
\clearpage
Lorem ipsum dolor \x{} \BRANDNAME{}
sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo
duo dolores et ea rebum.
}
\end{document}
上述宏在周围插入字母\BRANDNAME
(设置为不可中断的\mbox
),以确定换行是否会将其刷新到下一行。\emergencystretch
设置为宽度的 10% 以上,\BRANDNAME
以允许换行算法在段落设置期间第三次检查是否应进行调整。
您可能必须重置\emergencystretch
为0pt
不需要它的时间。
在段落组装期间,TeX 会尝试(可能多次)以最佳方式布置各行。
读TeX 按主题分类,具体部分19.2 破碎过程(第 179 页)。以下是摘录:
19.2.1 三次传递
首先尝试将段落拆分为不带连字符的行,即不插入任意连字符。如果没有任何行的不良度超过 ,则此尝试成功
\pretolerance
。否则,进行第二遍,插入自由裁量项并使用
\tolerance
。如果\pretolerance
为负数,则省略第一遍。如果第一和第二次失败,TeX 可以进行第三次。如果
\emergencystretch
是正维度,则在计算不良率和缺点时,TeX 会假设每行有这么多额外的可拉伸性。因此,现在仅略微超过给定公差的解决方案将变得可行。但是,实际上不存在尺寸的胶合\emergencystretch
,因此仍可能会出现盒子未满的消息。
答案2
要对拉丁文进行连字符处理,请使用 Babel 的latin
选项。TeX 在段落级别进行优化。一般来说,如果您的列较窄,最好使用不规则的右侧设置,否则您可能会得到 Wordesque 类型的连字符(例如 OP 提出的第二个示例)。
\documentclass{article}
\usepackage{microtype}
\usepackage[latin]{babel}
\begin{document}
\hsize7.2cm
Lorem ipsum dolor sit amet, consetetur \mbox{BRANDNAME}
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
accusam et justo duo dolores et ea rebum.
\emergencystretch.3em
Lorem ipsum dolor sit amet, consetetur \mbox{BRANDNAME}
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
accusam et justo duo dolores et ea rebum.
\end{document}