![关于 mathrm 和 operatorname 的更多问题:\colon 后的空格](https://linux22.com/image/386455/%E5%85%B3%E4%BA%8E%20mathrm%20%E5%92%8C%20operatorname%20%E7%9A%84%E6%9B%B4%E5%A4%9A%E9%97%AE%E9%A2%98%EF%BC%9A%5Ccolon%20%E5%90%8E%E7%9A%84%E7%A9%BA%E6%A0%BC.png)
编辑:正如下面的答案所澄清的那样,这似乎是和的一个错误amsmath
,因此与和colon
没有任何关系。mathrm
operatorname
这\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}
也可以查看函子例如,在向量空间类别上,你会想要\operatorname
:
我的问题是:处理既用作集合又用作运算符的数量时,最佳做法是什么?是否真的应该在\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
许多现有文档都依赖于它,而且这样的更改会影响输出和换行符。也许可以添加一个使用固定定义的选项。