为什么在这种情况下 \nolinebreak 不起作用?

为什么在这种情况下 \nolinebreak 不起作用?

当我有类似的事情时:

(Some-)Thing

在行末,LaTeX 总是在 '-' 后中断,即使我使用:

(Some-\nolinebreak)Thing

我确实知道使用这样的解决方案\mbox{},但我要求给出解释,而不是解决问题的方法,但如果有“更好”的方法来做到这一点,我将不胜感激任何建议!

我也尝试过,\nolinebreak[4]虽然应该是一样的。

答案1

如果您使用babel德语,您可以使用"~它来产生您想要的结果:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\begin{document}

\parbox{0pt}{\hspace{0pt}(Some"~)Thing}

\end{document}

\parbox{0pt}是为了让 TeX 尽可能地中断,但是如果您尝试的话,您会发现根本没有中断。

在此处输入图片描述

"~基本上,所做的就是发出\mbox{-}

如果你不使用ngerman,但仍使用babel,你可以导入德语简写(见Babel:两种语言,主动速记)或者更简单地定义一个宏:

\newcommand{\ppref}[1]{(#1\mbox{-})} % Parenthesized PREFix

并输入文本为

\ppref{Some}Thing

之所以\nolinebreak无效,是因为-在普通文本中,在其后会插入一个自由分隔符,因此输入

(Some-\nolinebreak)Thing

相当于输入

(Some-\discretionary{}{}{}\nolinebreak)Thing

并且 TeX 可以随意换行。后面的惩罚不能改变这一点。没有\undiscretionary类似于\unskip或 的\unpenalty

\nobreakdash的宏只是amsmath包含在\mbox后面的-,-----中,因此输入

(Some\nobreakdash-)Thing

和输入完全相同

(Some\mbox{-})Thing

答案2

如果你使用该amsmath包,你可以输入

(Some\nobreakdash-)Thing

完整的 MWE (最小工作示例):

\documentclass{article}
\usepackage{amsmath}  % for '\nobreakdash' macro
\usepackage[textwidth=1mm]{geometry} % set a very narrow measure
\begin{document}
\hspace{0pt}(Some-)Thing  % this will produce a line break

\hspace{0pt}(Some\nobreakdash-)Thing % no linebreak here...
\end{document}

相关内容