如何防止 LaTeX 在短语中添加换行符?
我可以用"~
以及带有不间断空格的空格,但我正在寻找一种更通用的解决方案,以防我需要此类短语中的其他字符。
答案1
告诉 TeX 不要在长短语中换行几乎肯定会产生不好的换行,导致行数过满或不足。不过,这里有一个可行的办法。
\usepackage[italian]{babel}
\def\phrase{\begin{otherlanguage*}{nohyphenation}%
\dononbreakablespace
\dononbreakablehyphen
\dophrase}
\def\dophrase#1{#1\end{otherlanguage*}}
{\catcode`\ =\active
\gdef\dononbreakablespace{\catcode`\ =\active\def {\nobreakspace}}}
{\catcode`\-=\active
\gdef\dononbreakablehyphen{\catcode`-=\active\def-{\nobreakhyphen}}}
\def\nobreakhyphen{\hbox{-}\nobreak}
以下是一个例子:
Testo per vedere se gli spazi sono uniformi \phrase{anche in una %
\emph{phrase} che non deve essere spezzata neanche dove-si-potrebbe %
ma solo dopo}, quando finisce.
如果你还需要短破折号或长破折号,那就更复杂了。巴别塔我们可以使用它的nohyphenation
功能。它很方便但不是必需的,因为可以用不同的方式达到相同的效果。
定义如下。
该宏
\phrase
将仅具有一个“用户级参数”,它实际上是的参数\dophrase
;的目的\phrase
是打开一个组并进行一些初始化,特别是抑制连字符。\dophrase
读取参数并关闭otherlanguage*
环境,这样所有其他任务也将被撤消。\donobreakablespace
激活空格并将其转换为\nobreakspace
。请参阅下面的注释。\donobreakablehyphen
激活连字符,以便排版一个“被屏蔽”的连字符,并且不会成为允许的断点。
\phrase
注意。在(实际上是\dophrase
)连续空间的论证中将不会简化为一个,将不会在输入行的开头被忽略。此外,输入中的换行符将是 TeX 可接受的断点。使用%
(以空格开头) 屏蔽它们。
如果使用巴别塔不是一个选择,人们可以做一些改变
\def\phrase{\begingroup\phrasenohyphen
\dononbreakablespace
\dononbreakablehyphen
\dophrase}
\makeatletter
\def\phrasenohyphen{%
\language\@ifundefined{l@nohyphenation}{\@cclv}{\l@nohyphenation}}
\makeatother
\def\dophrase#1{#1\endgroup}
其他宏可以相同。“无连字符”功能可通过明确选择“无连字符”伪语言获得,或者,如果未定义(在某些旧发行版中可能如此),则选择\language255
可能未定义(因此 TeX 将使用一组空的连字符规则)。
答案2
该\mbox
命令完成该工作。