有时,我们会遇到具有特定数学字符类的空数学字符。例如,在 的定义中amsmath
使用:\mathpunct{}
\colon
\renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
让我们通过一些测试来探讨这个问题:
以下是用于生成该代码的代码:
\documentclass{article}
\usepackage[margin=1.5in]{geometry}
\usepackage{mathtools} % for \mathclap
\usepackage[T1]{fontenc} % to disable a warning generated by \textbackslash
\newcommand{\specialcell}[1]{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}}
% for multi-row cells
% macro adapted from egreg's answer here: http://tex.stackexchange.com/a/19678
\begin{document}
\begin{tabular}{lll}
\(abc\) & \verb|\(abc\)| & \\[\bigskipamount]
\(a\mathpunct{b}c\) & \verb|\(a\mathpunct{b}c\)| &
\specialcell{\texttt{\textbackslash mathpunct} will close up to \\
a \texttt{\textbackslash mathord} on the left and \\
create a \texttt{\textbackslash thinmuskip} (\texttt{\textbackslash 3mu}) \\
before a \texttt{\textbackslash mathord} on the right \\[\bigskipamount]} \\
% \verb doesn't work inside of macro arguments, therefore we need \texttt.
% There ought to be a better way of getting the tablerow spacing I want, one that
% doesn't require explicit \\[\bigskipamount] (sometimes placed within the
% \specialcell by necessity).
\(ab\mathpunct{}c\) & \verb|\(ab\mathpunct{}c\)| &
empty \texttt{\textbackslash mathpunct} \\[\bigskipamount]
\(ab\mathrel{}c\) & \verb|\(ab\mathrel{}c\)| &
\specialcell{empty \texttt{\textbackslash mathrel}: \texttt{\textbackslash thickmuskip} \\
(\texttt{5mu} (\texttt{plus 5mu})) by default \\[\bigskipamount]} \\
\(ab\mathrel{}\mathrel{}c\) & \verb|\(ab\mathrel{}\mathrel{}c\)| &
\specialcell{two empty \texttt{\textbackslash mathrel}s are like \\
one empty \texttt{\textbackslash mathrel} \\[\bigskipamount]} \\
\(ab\mathrel{\mathclap{\vert}}c\) & \verb|\(ab\mathrel{\mathclap{\vert}}c\)| &
\\%[\bigskipamount]
\end{tabular}
\end{document}
(最后一行表明它就像\mathrel{}
一个无限薄的线,两边都有( )的间距。)\mathrel
\thickmuskip
\;
两个连续的空\mathrel
s 就像一个,只是因为之间没有间距任何两个连续的\mathrel
s。因此这里没有什么特别的。
何时可以使用特定数学字符类的“空字符”?有什么重要信息需要了解吗?
答案1
好吧,你在问题中基本上说了它们的作用,它们制造了一个宽度为零的数学原子,但这可能会或可能不会导致添加数学间距,具体取决于相邻原子的类别。
它时不时地会出现,例如这里
有些人\mathop{}
在定义差异“d”字母时使用了:
- 排版微分算子的正确方法是什么? (页面某处)
- 我应该在积分中对 d 进行 \mathrm 吗? (页面某处)
答案2
关于\colon
,看一下amsmath.pdf
代码行 272 之前的注释:
\colon 表示数学中的冒号,类似于文本冒号:左侧间距较小,右侧间距较大。 : 字符本身被视为 \mathrel,即两侧间距较大且相等。
这里\mathpunct
有效地“禁用”了通常\mathrel
分配给字符的功能,:
以允许应用不同的间距。
\mathpunct
也被引用,尽管它没有出现在代码中,但关于 的定义,以避免在末尾出现标点符号且公式编号在右侧设置时出现multline
额外内容。(参见第 2311 行之后的注释。)thinmuskip