为何对薄空间有多种定义\,?

为何对薄空间有多种定义\,?

Knuth 的定义\,\mskip\thinmuskip

LaTeX 将此定义更改为

\DeclareRobustCommand{\,}{%
   \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi
}
\def\thinspace{\kern .16667em }

amsmath.sty说是

\DeclareRobustCommand{\tmspace}[3]{%
  \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}

我可能理解 LaTeX 让命令在文本模式下也能使用的目的。但是 amsmath 重新定义的目的是什么?

答案1

你应该看一下完整的图片:

 152   │ \ifx\leavevmode@ifvmode\@undefined
 153   │ \DeclareRobustCommand{\tmspace}[3]{%
 154   │   \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
 155   │ \else
 156   │ \DeclareRobustCommand{\tmspace}[3]{%
 157   │   \ifmmode\mskip#1#2\else\leavevmode@ifvmode\kern#1#3\fi\relax}
 158   │ \fi
 159   │ \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
 160   │ \let\thinspace\,
 161   │ \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
 162   │ \let\negthinspace\!
 163   │ \renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
 164   │ \let\medspace\:
 165   │ \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
 166   │ \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
 167   │ \let\thickspace\;
 168   │ \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}

的两个定义\tmspace是由于最近决定让此类命令无论如何都启动段落模式。对于最近的 LaTeX 内核,将使用第二个。

将其与 LaTeX 内核中的代码进行对比:

1619   │ \DeclareRobustCommand{\,}{%
1620   │    \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi
1621   │ }

1630   │ \def\thinspace{\leavevmode@ifvmode\kern .16667em }
1631   │ \def\negthinspace{\leavevmode@ifvmode\kern-.16667em }

4543   │ \def\>{\mskip\medmuskip}
4544   │ \def\;{\mskip\thickmuskip}
4545   │ \def\!{\mskip-\thinmuskip}

4547   │ \let\:=\>

的方法amsmath更加合理和简洁。它们还提供了所有宏的文本模式等效项,而如果没有加载则\!无法在文本模式下使用,其他宏也是如此。最终结果基本相同。但是,命令在辅助文件中写入时将被翻译成,而不是。其实没什么大不了的。amsmath\,\tmspace+\thinmuskip{.1667em}\,

相关内容