LaTeX 无法正确换行

LaTeX 无法正确换行

我有如下一段文字:

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以允许换行算法在段落设置期间第三次检查是否应进行调整。

您可能必须重置\emergencystretch0pt不需要它的时间。

在段落组装期间,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}

相关内容