在 LaTeX 中使用微分算子的正确姿势

此篇讨论很小的「一点」——关于如何正确排版微分算子。

所谓微分算子,其英文名字叫做 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


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。


撰写评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。因此,如果你希望撰写评论,请发邮件至我的邮箱并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。