~ 和 {\mbox{$~$}} 有什么区别

~ 和 {\mbox{$~$}} 有什么区别

我正在查看一本书的源代码,发现:

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}

在此处输入图片描述

为了从宏观上看待这个问题,我在这里为\sloppyLaTeX 提供了它需要的所有绳索:

\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{ }第三行并没有给出好的结果。

在此处输入图片描述

相关内容