我正在查看一本书的源代码,发现:
D.{\mbox{$~$}}Knuth
这是什么目的?
答案1
在 中\mbox
,空间不会因为线宽考虑而被压缩(也不会扩大)。
正如 Manuel 指出和 egreg 强调的那样,该构造\mbox{$~$}
“确实无用”,因为它在功能上与 难以区分,而且效率较低\mbox{ }
。尽管如此,我在下面的 MWE 中使用它来最直接地回答 OP 的原始问题。如果读者要模仿该技术,请使用\mbox{ }
。
\documentclass[10pt]{book}
\begin{document}
\noindent\hrulefill
\def\dx{4.2in}
\hspace{\dx}D.{\mbox{$~$}}Knuth
\hspace{\dx}D.~Knuth
\def\dx{0in}
\hspace{\dx}D.{\mbox{$~$}}Knuth
\hspace{\dx}D.~Knuth
\end{document}
为了从宏观上看待这个问题,我在这里为\sloppy
LaTeX 提供了它需要的所有绳索:
\documentclass[10pt]{book}
\sloppy
\begin{document}
\noindent\hrulefill
\def\dx{3.64in}
\hspace{\dx} D.{\mbox{$~$}}Knuth rocks!
\hspace{\dx} D.~Knuth rocks!
\end{document}
答案2
您可以定义一个新命令,使用正常的单词间空间,如果行需要缩小,则可以缩小它,但不能拉伸它。必须添加\@
才能正确设置空间因子(该\
命令会隐式执行此操作)。
在示例中,我使用低级\hbox spread
命令来显示效果;它将文本排版在按规定量拉伸(或收缩)的框中。
\documentclass{article}
\DeclareRobustCommand{\nostretchspace}{%
\nolinebreak\@\hspace{\fontdimen2\font minus \fontdimen4\font}%
}
\begin{document}
\hbox spread 2cm{D.~Knuth wrote \TeX}
\hbox spread 2cm{D.\nostretchspace Knuth wrote \TeX}
\hbox spread -3pt{D.\mbox{ }Knuth wrote \TeX}
\hbox spread -3pt{D.\nostretchspace Knuth wrote \TeX}
\end{document}
请注意,\mbox{ }
第三行并没有给出好的结果。