使用 \DeclareMathOperator 时空间太小

使用 \DeclareMathOperator 时空间太小

目前我正在写数学脚本(环理论,PDF)。当我需要一个新的数学运算符时,我会使用\DeclareMathOperatoramsopn 包中的运算符。但是,我注意到在使用 操作时会出现一些奇怪的行为\circ。例如:

\listfiles
\documentclass[draft]{minimal}
\usepackage{amsopn}
\DeclareMathOperator*{\id}{id}
\begin{document}
$\id\circ g$

$h\circ g$
\end{document}

在第一个版本中,g在 处非常接近,\circ而第二个版本似乎正常。这个间距问题仅在我使用 时发生\DeclareMathOperator。您知道这个问题吗?我该怎么做才能防止它?

文件列表:

minimal.cls    2001/05/25 Standard LaTeX minimal class
 amsopn.sty    1999/12/14 v2.01 operator names
 amsgen.sty    1999/11/30 v2.0

答案1

如果\id表示恒等映射,那么它不应该是一个运算符,而是一个普通的符号:

\newcommand{\id}{\mathrm{id}}

还要注意,\DeclareMathOperator*用于定义取其上下限的运算符(例如\min\max)。

这种行为很容易解释:当我们写的时候,\log -2我们希望-不被视为二进制操作符号。对于 TeX,你的\id\circ g也是一样的:如果垃圾桶原子跟随操作原子,它被转换成一个奥德\DeclareMathOperator原子。如果只用直立字母来定义某物,那么这是错误的。

答案2

问题的原因在于 TeX 的间距算法存在缺陷。Knuth 只为运算符和大运算符创建了一个类,而实际上需要两个(你希望$\sum -a_i$减号的行为像一元运算符,但 (和 之$\ln + C$\ln)并非如此C)。所有二元运算符跟在运算符后面时都会出现问题,例如在 、 等公式$\exp \circ g$$\det \otimes \rho$

由于您希望\id(在类似 的公式中$\lambda \id + u$)在左侧表现为运算符,而在右侧不表现为运算符(因为通常情况下,当\id有参数时,参数将始终位于括号中,因此右侧不需要任何额外的空格),您可以将其定义为\mathop{}左侧为类,\mathord右侧为类。这应该可以解决您遇到的所有间距问题:

\newcommand{\id}{\mathop{}\mathopen{}\mathrm{id}}

一些测试:

\id 命令的使用示例

供参考,nath 包解决了这个问题(参见文档的第 11 条,第 7 页),但还做了很多您可能不想要的其他事情。

相关内容