若要使用 (2.1) 这样的按节编号,请加载 amsmath,并在导言区加入 \numberwithin{equation}{section}。本指南帮助 Mac 用户选择编号方案、配置重置,并检查长文档中的引用。LaTeX 公式编号文档

更改计数器前先选择编号方案

先确定文档类以及你希望读者引用的编号。标准 article 类使用连续的公式编号。标准 report 和 book 类默认会在每章重置公式编号,并在编号前加上章号。修改现有文档时,这些默认设置很重要。LaTeX 标准文档类

预期结果 配置
标准 article 中的连续编号 保留类的默认设置
(2.1) 这样的节编号 添加 \numberwithin{equation}{section}
标准 report 或 book 中的章编号 保留类的默认设置
标准 report 或 book 中的连续编号 用 \counterwithout{equation}{chapter} 移除公式与章节之间的关联
(2.3a)、(2.3b) 这样的相关编号组 将其中的公式放入 subequations 中

这些选项结合了文档类的默认设置、已记录的计数器命令以及 amsmath 分组环境。对于自定义类,请先查看其文档,再判断标准默认设置是否适用。标准类定义、计数器关联命令、子公式示例

将编号视为三个独立的决定:计数器中存储的值、打印出来的形式,以及触发重置的事件。例如,仅添加节前缀并不会建立按节重置。\numberwithin 命令会同时配置层级关系和打印形式;当前版本的 amsmath 通过内核的 \counterwithin 命令实现该功能。LaTeX 公式编号实现

在 Mac 上构建完整的按节编号示例

以下完整文档假设你已安装可用的 LaTeX,并且编辑器已配置为使用 pdfLaTeX。将其保存为 numbering-demo.tex。在 TeXShop 中,选择 pdfLaTeX 引擎并按 Command-T 进行排版;开发者的发行说明记录了这个快捷键。TeXShop 更新

\documentclass{article}
\usepackage{amsmath}
\numberwithin{equation}{section}

\begin{document}

\section{Algebraic identities}
\begin{equation}
  (a+b)^2=a^2+2ab+b^2
  \label{eq:square}
\end{equation}

\begin{subequations}\label{eq:pair}
\begin{align}
  (a+b)(a-b)&=a^2-b^2 \label{eq:difference}\\
  a(b+c)&=ab+ac \label{eq:distribute}
\end{align}
\end{subequations}

\begin{equation}
  (a+b)+c=a+(b+c)
  \label{eq:associate}
\end{equation}

The group is \eqref{eq:pair}; its first identity is
\eqref{eq:difference}.

\section{Polynomial identities}
\begin{equation}
  (x+y)^3=x^3+3x^2y+3xy^2+y^3
  \label{eq:cube}
\end{equation}

Compare \eqref{eq:square} and \eqref{eq:cube}.

\appendix
\section{Additional identity}
\begin{equation}
  x^2+2xy+y^2=(x+y)^2
  \label{eq:appendix-square}
\end{equation}

\end{document}

初次排版时运行两遍;如果仍有引用变更警告,则继续运行。LaTeX 通过辅助文件在多次运行之间传递标签信息,因此生成的第一个 PDF 可能包含未解析的引用。将标签放在它所标识的带编号公式内。LaTeX 交叉引用实现

以下是根据上述配置推导出的预期编号轨迹。在将设置用于你的手稿之前,可用它做一个简单的验收检查;这些是示意性的预期结果,并非实际编译结果。

检查点 预期编号
第一个等式 (1.1)
公式组的父级引用 (1.2)
公式组中的两个等式 (1.2a)、(1.2b)
公式组之后的等式 (1.3)
第 2 节中的第一个等式 (2.1)
附录中的第一个等式 (A.1)

subequations 包装环境会占用一个父级编号,并在结束时恢复主编号序列。官方示例展示了如何返回普通编号。附录中的结果源于标准的 article 将 \thesection 改为字母,同时公式格式继续使用该节编号形式。子公式示例、标准附录定义

研究环境中没有 LaTeX 编译器,因此本文档是根据检索到的文档资料进行检查,而非实际编译的。

选择支持所需编号的环境

计数器配置不会决定一个公式显示会获得多少个编号;这取决于它使用的环境。将长推导拆成可单独引用的步骤时,理解这一区别尤其有用。amsmath 宏包用户指南:公式显示

已加载 amsmath 时使用的环境 编号行为
equation 一个编号
equation* 或 \[ ... \] 不自动编号
align、gather、alignat、flalign 每行自动编号
它们的带星号形式 不自动编号
multline 多行表达式共用一个编号
equation 中的 split 整组共用一个公式编号
equation 中的 aligned 整组共用一个公式编号

如果需要分别引用各行,请使用 align。如果推导只需要一个引用,请使用包含 split 的 equation。不要将 align 放入 equation 中,因为它本身已经是一种公式显示结构。以下是适用于加载了 amsmath 的文档的正文片段。支持的公式显示结构

\begin{equation}
\begin{split}
  (a+b)^2
    &= (a+b)(a+b)\\
    &= a^2+2ab+b^2
\end{split}
\label{eq:expanded-square}
\end{equation}

若要取消单个 align 行的编号,请在该行结束符前加入 \notag。若要使用特殊的自定义标识符,\tag{P} 会打印 (P);\tag*{P} 会打印 P,且不添加括号。请将这类标签放在支持该标签的公式显示环境中,而不要放在 split 内。取消编号与自定义标签

更改重置关联,避免留下隐式依赖

现代 LaTeX 直接提供 \counterwithin 和 \counterwithout。它们在 2018 年 4 月的版本中加入内核;较旧的安装版本需要使用 chngcntr 宏包才能使用这些命令。该宏包手册介绍了它们的带星号形式及格式行为。LaTeX 新闻,第 28 期、chngcntr 宏包

若要在标准 report 或 book 中使用连续公式编号,请在加载宏包后,将以下内容加入导言区片段。不带星号的命令会移除公式与章节之间的重置关联,并将打印出的公式编号改为阿拉伯数字。它不会更改当前计数器的值。chngcntr 宏包

\counterwithout{equation}{chapter}

将按节编号改为按章编号时,请先明确移除旧的节编号关联。只添加章节关联会保留先前的依赖。以下导言区片段假设文档使用 report 或 book、amsmath,并且此前已配置为按节编号:

\counterwithout*{equation}{section}
\numberwithin{equation}{chapter}

移除关联时使用带星号的命令可以保留现有打印格式;随后使用的命令则会设定预期格式。反过来,\counterwithin* 只会添加重置关联,不会重写打印形式。若要分别管理格式,请使用带星号的命令。计数器关联的语义

只有文档确实需要时才从指定编号重新开始

一次性重新开始会更改计数器中存储的值。在下一个带编号的公式显示之前立即使用 \setcounter{equation}{0},会使该显示在当前格式下编号为 1。若要让下一个编号为 7,请将计数器设为 6。LaTeX 的计数器文档区分了直接赋值和递增 1。LaTeX 计数器实现

以下正文片段适用于按节编号示例,它会让下一个公式显示以 .7 结尾:

\setcounter{equation}{6}
\begin{equation}
  a(b+c)=ab+ac
  \label{eq:restart-seven}
\end{equation}

如果你要更改主编号序列,请在 subequations 包装环境之外执行此操作。在该环境内,公式计数器用于子编号,退出时父级值会恢复。子公式实现

手动重新开始前,先记下该节中已经使用的最后一个编号。在同一个前缀下从 1 重新开始,可能会产生重复的可见标识符,即使标签名称各不相同也一样。如果符合文档结构,优先在下一个节或章节处进行结构性重置。

诊断长篇手稿中的编号错误

按以下顺序查找意外编号对应的设置。这样可以区分配置问题、显示环境选择和引用更新问题。

  1. 确认控制文档的类。 在修改导言区之前,先将其文档说明与标准类的默认设置进行比较。
  2. 在源文件中搜索编号命令。 检查 \numberwithin、\counterwithin、\counterwithout、\theequation 和 \setcounter 的出现位置。记录打印格式和每一处重置关联。
  3. 检查公式显示环境。 带星号的公式显示不会自动编号;多行公式显示也可能合理地只获得一个编号。
  4. 检查标签位置。 将每个公式标签放在对应的公式显示环境内,并将每行标签放在预期编号行内。将公式组标签紧跟在 \begin{subequations} 后面。
  5. 重新编译,直到引用稳定。 如果引用仍然失效,请将引用键与相应标签进行比较,并检查日志中是否有未定义或重复定义的标签。

环境和组标签检查遵循 amsmath 指南;引用检查则依据 LaTeX 的辅助文件机制。公式编号与标签、LaTeX 交叉引用实现

最后检查每个结构边界之后的第一个公式:节、章节、子公式组和附录。将这些编号与所选方案进行比较,然后检查每个位置的一个引用。这样可以在继续处理整篇文档之前,集中验证配置是否正确。

来源