我有以下内容\hbox
,如果我将其取消装箱并将其放入段落(或者当我仅输入aaa --, bbb
或时),TeX 会打破和aaa --\nobreak, bbb
之间的界限。--
,
> \box0=
\hbox(6.88875+1.94443)x46.1109
.\T1/lmr/m/n/10 a
.\T1/lmr/m/n/10 a
.\T1/lmr/m/n/10 a
.\glue 3.33333 plus 1.66666 minus 1.11111
.\T1/lmr/m/n/10 ^^U (ligature --)
.\T1/lmr/m/n/10 ,
.\glue 3.33333 plus 1.66666 minus 1.11111
.\T1/lmr/m/n/10 b
.\T1/lmr/m/n/10 b
.\T1/lmr/m/n/10 b
我的问题:
为什么会出现这样的断线情况?
为什么不禁
\nobreak
用换行符?--,
是否可以修复它,以便当源文件包含(没有任何类似\hbox
或的包装器)时不会发生换行符\mbox
?
答案1
TeX在当前字体中的 或以该字符结尾的任何连字符\discretionary{}{}{}
后添加一个隐式项\hyphenchar
(TeXbook,第 95 页,最后一个危险段落); 的默认值为\hyphenchar
45,在 ASCII 中恰好是连字符。
说\nobreak
after-
没有任何作用,因为在第 95 页的顶部有一个可以换行的地方的列表,并且包含了可自由支配的项目;因此,在隐含的可自由支配的换行处换行是可能的,并且发出的惩罚\nobreak
将被丢弃。
如果您不想在短划线后随意停顿,则可以使用\textendash
直接按数字调用字符,这样就不涉及连字符。
答案2
您可以将连字符隐藏在框中。(如果能提供示例就更好了)
\documentclass{article}
\setlength\textwidth{2cm}
\begin{document}
aa--bb aa--bb aa--bb aa--bb aa--bb aa--bb aa--bb
aa\mbox{--}bb aa\mbox{--}bb aa\mbox{--}bb aa\mbox{--}bb aa\mbox{--}bb aa\mbox{--}bb aa\mbox{--}bb
\end{document}
答案3
Egreg 已经解释了为什么你会遇到这种情况。此外, \textendash
你也可以使用 \nobreakdash
(来自 amsmath)来避免这种情况:
\documentclass{article}
\usepackage{amsmath}
\setlength\textwidth{2cm}
\begin{document}
aa --, aa --, aa --, aa --, aa --, aa --, aa --,
\bigskip
aa --, aa \textendash, aa --, aa --, aa --, aa --, aa --,
\bigskip
aa --, aa \nobreakdash--, aa --, aa --, aa --, aa --, aa --,
\end{document}