此篇讨论很小的「一点」——关于如何正确排版微分算子。
所谓微分算子,其英文名字叫做 differential operator,也就是 $\mathrm{d} x$
中的 $\mathrm{d}$。由于微分算子,形式上就是拉丁字母 d
;并且中国人读起来也就是简单粗暴的「滴埃克斯」。所以,在书写 LaTeX 手稿时,很多人简单粗暴地将微分算子写作 dx
,例如不定积分 \int f(x)dx
。
我们说,数学算式是精美而珍贵的。在排版数学算式时,你不能马虎,应该小心谨慎。这也是为什么 Knuth 在设计 TeX 时,将数学式子都包含在美元符号 $
之间的原因。对待微分算子,我们也应该有这样的心态。
粗话说:「如果没有标准,那所有的争执都是瞎扯淡」。正如单位制有所谓的 ISO 国际单位制一样,数学符号也有对应的 ISO 标准。数学符号的标准,首先是定义在 ISO 31-11 当中;而后这个标准被 ISO 80000-2:2009 取代。因此,此篇讨论的内容,都是基于 ISO 80000-2:2009 的。
在 ISO 80000-2:2009 中,微分算子被描述为
- 直立的拉丁字母 d;
- 一个右边没有间距的操作符。
对于直立的拉丁字母 d,我们可以使用 \mathrm{d}
达成效果。而若要微分算子的左边有间距,而右边没有,这个问题就值得思考了。
最简单的办法,是将微分算子做如下实现
1 | \newcommand*{\dif}{\,\mathrm{d}} |
看起来,这样是没有问题的。但是,在某些情况下,就会出现尴尬的问题。比如
1 | 关于 $x$ 的微分 $\dif x$ 是值得思考的问题。 |
因为在 \dif
的定义中,\mathrm{d}
之前有不可省略的铅空 \,
。于是,这份代码中 \dif x
与前后正文之间的距离就不一致了。为了解决这个问题,更有经验的人可能会选择这样定义
1 | \newcommand*{\dif}{\mathop{\mathrm{d}}\!} |
这份代码,试图利用 \mathop
,只在必要的时候于左边插入空白,修复了上面的问题。不过,这样一来也带来了一些副作用——在 \mathop
的作用下,\mathrm{d}
的基线发生了改变,不再与正常的数学变量保持在同一个基线上。这也是不好的。
最终解决问题,应该对微分算子有这样的定义
1 | \newcommand*{\dif}{\mathop{}\!\mathrm{d}} |
在这个定义中,拉丁字母 d 本身的特点得到了保留(比如基线是正常的)。此外,在 \mathrm{d}
的左边,插入了一个空白的 \mathop{}
;其左边的空白保留,而右边与 \mathrm{d}
之间的距离,则由 \!
抑制。这样就达成了我们的目标。
参考:http://www.tug.org/TUGboat/Articles/tb18-1/tb54becc.pdf#page=8