LaTeX 实现一种新的公式环境内的从属编号方案
\(\qquad\!\!\)这是在一次主讲组会前,因为 PPT 中涉及到了大量长公式,所以用 \(\mathrm{\LaTeX}\) 做了留存记录并为了更好地展示在 PPT 中时遇到的一个实现上的问题:如何实现在 align 环境生成的多行公式中,每行公式后的编号为 (该 align 环境的公式编号.在该 align 环境中的子公式编号)?
\(\qquad\!\!\)amsmath
宏包提供了一个名为 subequations
的包装环境,以便在特定的对齐环境或类似环境中使用从属编号方案对公式进行编号。该环境使用计数器组
parentequation 和 equation
分别代表父编号与从属编号。但是该环境默认的从属编号为直接加入中间无连字符的小写字母,所以如果想实现一种新的方案,最简单的办法就是使用说明文档中的例子,通过重定义
\theequation 计数器来实现。
1 | \renewcommand{\theequation}{\theparentequation.\arabic{equation}} |
\(\qquad\!\!\)我们将局部应用在一个特定的
subequations 环境中时,能够得到如下的效果:

\(\qquad\!\!\)但是如果我们将这一重定义应用在导言区做全局修改时,会导致该重定义强制覆盖了
subequations
环境的计数器管理逻辑,subequations
环境内部的父计数器隐式递增机制未能被触发,进而导致主编号的数值普遍少了
\(1\) 产生错误。
\(\qquad\!\!\)但是每次都在局部重定义代码繁杂且低效,全局重定义又会导致错误,那么我们怎么办呢?那就不得不完全重定义一个新的
subequations
环境吧,直接显式地给出全部计数器的管理逻辑,以实现这种新的公式环境内的从属编号方案。
1 | \renewenvironment{subequations} |
\(\qquad\!\!\)我们再使用这个新定义的
subequations
环境时,就能够在全局完美地实现相应地效果啦:

Reference
- User’s Guide For the amsmath Package
- 部分学习自 AI 工具。