![为什么在这种情况下 \nolinebreak 不起作用?](https://linux22.com/image/321846/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%20%5Cnolinebreak%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
当我有类似的事情时:
(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}