关于 mathrm 和 operatorname 的更多问题:\colon 后的空格

关于 mathrm 和 operatorname 的更多问题:\colon 后的空格

编辑:正如下面的答案所澄清的那样,这似乎是和的一个错误amsmath,因此与和colon没有任何关系。mathrmoperatorname

\mathrm这个问题包含了使用和之间的启发性讨论\operatorname。tl;dr 版本是:每当你有一个操作员, 使用\operatorname

但是\operatorname如果你定义的是,因为一般来说,\operatorname会在前面添加一点空格。这意味着像以下表达式:

f \colon \operatorname{End}(V) \to \mathbb{R}

渲染效果很差,因为冒号和 之间有太多空白operatorname{End}。使用\mathrm(RHS)更具视觉吸引力: 运算符名称与数学运算

因此,如果一个人\operatorname{End}(V)认为,那么写 就更有意义了\mathrm{End}(V)

现在你\operatorname{End}也可以查看函子例如,在向量空间类别上,你会想要\operatornameEnd 作为函子

我的问题是:处理既用作集合又用作运算符的数量时,最佳做法是什么?是否真的应该在\mathrm和之间进行\operatorname适当切换?或者有更好的选择。

答案1

这是一个非常有趣的观察。

\colon的定义amsmath

\renewcommand{\colon}{
  \nobreak
  \mskip 2mu
  \mathpunct{}
  \nonscript
  \mkern-\thinmuskip
  {:}
  \mskip 6mu plus 1mu\relax
}

(经过编辑以显示各个部分)。您看到的空间是由于\colon以一个普通原子结尾,即 而产生的{:}

更好的做法是使用\mathopen,如以下测试所示。我首先获取 的别名,\colon然后对其进行修补以将其更改{:}\mathopen:

\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}

\let\pcolon\colon
\patchcmd{\pcolon}{{:}}{\mathopen:}{}{}

\begin{document}

$f \colon \operatorname{End}(V) \to R$

$f \pcolon \operatorname{End}(V) \to R$

\bigskip

\begin{tabular}{@{}*{8}{l}@{}}
&0&1&2&3&4&5&6 \\
\verb|\colon| &
  $\colon A$ &
  $\colon \max$ &
  $\colon +$ &
  $\colon \sim$ &
  $\colon ($ &
  $\colon )$ &
  $\colon ,$
\\
\verb|\pcolon| &
  $\pcolon A$ &
  $\pcolon \max$ &
  $\pcolon +$ &
  $\pcolon \sim$ &
  $\pcolon ($ &
  $\pcolon )$ &
  $\pcolon ,$
\end{tabular}

\end{document}

在测试中,\colon每个类别后面都有一个符号。

在此处输入图片描述

唯一明显的区别是在后面\colon跟着第 1 类(运算符)和第 3 类(关系)原子的情况下,这两种情况下的表现可能都更好。

如果你想遵循这个建议,你的文档可以加载etoolbox并执行

\patchcmd{\colon}{{:}}{\mathopen:}{}{}

我认为不可能修复,因为amsmath许多现有文档都依赖于它,而且这样的更改会影响输出和换行符。也许可以添加一个使用固定定义的选项。

相关内容