在使用 $\LaTeX$ 写作数学文稿时,为方程式添加标签是很常见的需求,在本篇博客中,我们将围绕方程标签这个主题,讲讲关于它的故事。

$\TeX$ 时代

在 plain $\TeX$ 格式中,为方程式添加标签的方式为

$$<formula>\eqno<formula>$$

其中第一个 formula 为行间公式,第二个 formula 为标签。例如

$$\lim_{n\to\infty}\biggl(1+{1\over n}\biggr)^n = {\rm e}.\eqno(8)$$

的效果为 如果想要将标签置于方程式的左侧,则需要用另外一个宏 \leqno

需要注意的是第二个 formula 也是在数学模式中的,这与后面要说的 \tag{} 有所不同。

第二个 formula 不仅可以是一般的阿拉伯数字标签,也可以是其它特殊标签。例如

$$\lim_{n\to\infty}\biggl(1+{1\over n}\biggr)^n = {\rm e}.\eqno(*)$$
$$\lim_{n\to\infty}\biggl(1+{1\over n}\biggr)^n = {\rm e}.\eqno(**)$$
$$\lim_{n\to\infty}\biggl(1+{1\over n}\biggr)^n = {\rm e}.\eqno(***)$$

用 plain $\TeX$ 运行一下,你会看到结果是这样的:

可以看到,前面两个标签合乎心意,可第三个标签却有点奇怪:「为什么星号之间的间距这么大呢?」

其实,这是因为在数学模式中,$\TeX$ 将 * 视作二元运算符1。在 (*)(**) 这两个情形中,由于没有可供运算的对象,所以这时的二元运算符被转化为普通符号(Type Ord)。但是在 (***) 中,中间的星号仍然保持为二元运算符,$\TeX$ 会在其两侧添加适当的间距。

那么怎么解决这个问题呢?很简单,将 (***) 改为 (*{*}*) 就可以了。

$\LaTeX$ 时代

美国数学会的 amsmath 宏包2定义了三个宏:\tag\tag* 以及 \notag

  • \tag 将其参数作为标签,并且会自动在参数两侧添加圆括号。
  • \tag* 将其参数作为标签,但不会自动在参数两侧添加圆括号。
  • \notag 的作用为阻止方程式编号。

需要注意的是 \tag\tag* 的参数处于文本模式,如果要在参数当中使用数学符号,需要用 $ 将其包裹,例如 \tag{$\star$}

在默认情况下,标签都是由圆括号包裹,想要改用其它形式的话,可以使用 mathtools 宏包提供的一套命令,但是鉴于这一需求并不常见,在这里并不作展开介绍。

参考

  1. Donald E. Knuth. The $\TeX$book 

  2. User’s Guide for the amsmath Package texdoc amsmath