![在二元运算之前放置数学宏时出现奇怪的间距](https://linux22.com/image/258052/%E5%9C%A8%E4%BA%8C%E5%85%83%E8%BF%90%E7%AE%97%E4%B9%8B%E5%89%8D%E6%94%BE%E7%BD%AE%E6%95%B0%E5%AD%A6%E5%AE%8F%E6%97%B6%E5%87%BA%E7%8E%B0%E5%A5%87%E6%80%AA%E7%9A%84%E9%97%B4%E8%B7%9D.png)
我发现在二进制运算之前使用数学宏时会出现非常奇怪的间距。这是一个最简单的例子:
\documentclass[11pt]{article}
\usepackage{amsmath}
\DeclareMathOperator{\id}{id}
\begin{document}
$x\otimes \id$
$\id \otimes x$
\end{document}
生产
我知道有时宏会“吃掉”它后面的空格,需要我们把它放在括号里,或者在\
它后面放一个,但我没想到这个空格后操作会受到影响。有人能解释一下发生了什么吗?我该如何进行不同的设置,才能让间距正确?
答案1
这些是 TeX 的规则。你定义\id
为操作原子(数学运算符),\otimes
而垃圾桶(二元运算)并且x
是奥德(普通符号)。因此$\id\otimes x$
可以解释为
宾·奥德
但这是规则所不允许的,所以垃圾桶原子变成奥德(想想$\sin -x$
,这不是通常打印的内容,但如果它是“正弦减 x”肯定是错误的)。
因此,数学原子的最终序列是
操作命令
插入的空格是
操作(稀薄空间)奥德(没有空间)奥德
如果您的\id
宏用于表示身份映射,它不应该是一个数学运算符,而是一个普通符号:
\newcommand{\id}{\mathrm{id}}
这样$\id\otimes x$
就可以
奥德(中等空间)垃圾桶(中等空间)奥德
答案2
为了在二元运算符周围正确留出空间\otimes
,我会确保运算符\id
类似于序数符号,方法是将其包装在一个组内{}
:
\documentclass[11pt]{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\DeclareMathOperator{\id}{id}
\begin{document}
$x \otimes {\id}$
${\id} \otimes x$
\end{document}