空数学字符类符号(“\mathpunct{}”)有什么作用?何时使用?

空数学字符类符号(“\mathpunct{}”)有什么作用?何时使用?

有时,我们会遇到具有特定数学字符类的空数学字符。例如,在 的定义中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\;

两个连续的空\mathrels 就像一个,只是因为之间没有间距任何两个连续的\mathrels。因此这里没有什么特别的。

何时可以使用特定数学字符类的“空字符”?有什么重要信息需要了解吗?

答案1

好吧,你在问题中基本上说了它们的作用,它们制造了一个宽度为零的数学原子,但这可能会或可能不会导致添加数学间距,具体取决于相邻原子的类别。

它时不时地会出现,例如这里

使用 \DeclareMathOperator 时空间太小

有些人\mathop{}在定义差异“d”字母时使用了:

答案2

关于\colon,看一下amsmath.pdf代码行 272 之前的注释:

\colon 表示数学中的冒号,类似于文本冒号:左侧间距较小,右侧间距较大。 : 字符本身被视为 \mathrel,即两侧间距较大且相等。

这里\mathpunct有效地“禁用”了通常\mathrel分配给字符的功能,:以允许应用不同的间距。

\mathpunct也被引用,尽管它没有出现在代码中,但关于 的定义,以避免在末尾出现标点符号且公式编号在右侧设置时出现multline额外内容。(参见第 2311 行之后的注释。)thinmuskip

相关内容