要引用整个方程组及其中的各个方程,请加载 amsmath,将带编号的公式放入 subequations 环境,并在该环境内紧接着放置组标签。为每个带编号的行分别添加标签,然后使用 \eqref 引用任一层级。amsmath 用户指南,第 3.11 节。

本指南适用于在 Mac 上编辑 LaTeX 文档、需要诸如“系统 (1)”和“方程 (1b)”这类引用的用户。示例使用抽象代数表达式,并区分用于为多个独立方程编号的环境与仅用于排列多行内容的环境。

创建组引用和各方程的单独引用

首先准备好可用的 LaTeX 安装环境。LaTeX Project 将 MacTeX 列为一种 Mac 发行版,其中包含 LaTeX、完整的 TeX 系统和文档编辑器。下面的编号方法来自 amsmath 宏包。获取 LaTeX;CTAN:amsmath。

在 LaTeX 编辑器中将以下完整文档保存为 equation-group.tex。关键在于将 \label{eq:system} 放在 \begin{subequations} 后面紧接的位置,也就是内部的 align 开始之前。宏包指南明确说明了这个捕获父编号的位置。amsmath 用户指南,第 3.11.3 节。

\documentclass{article}
\usepackage{amsmath}

\begin{document}

Consider the system~\eqref{eq:system}:
\begin{subequations}\label{eq:system}
\begin{align}
  a+b &= c \label{eq:sum} \\
  a-b &= d \label{eq:difference} \\
  2a  &= c+d \label{eq:combined}
\end{align}
\end{subequations}

The whole group is system~\eqref{eq:system}.
The second relation is equation~\eqref{eq:difference}.
Together, equations~\eqref{eq:sum} and~\eqref{eq:difference}
give equation~\eqref{eq:combined}.

\begin{equation}\label{eq:next}
  2b=c-d
\end{equation}

The next equation is~\eqref{eq:next}.

\end{document}

将主文件编译两次,以便 LaTeX 写入并读取引用信息。如果 pdflatex 可用,且当前工作目录中包含已保存的文件,请在终端中运行以下命令。LaTeX 使用辅助文件的机制解释了为什么第一次运行时引用可能显示为 ??。LearnLaTeX:交叉引用。

pdflatex -halt-on-error equation-group.tex
pdflatex -halt-on-error equation-group.tex

对于这个独立文档,预期的引用结果如下。这些结果是根据已记录的编号行为推断的,并非本地编译报告;研究环境中没有可用的 LaTeX 编译器。

引用命令 预期结果 对应内容
\eqref{eq:system} (1) 整个方程组
\eqref{eq:sum} (1a) 第一个方程
\eqref{eq:difference} (1b) 第二个方程
\eqref{eq:combined} (1c) 第三个方程
\eqref{eq:next} (2) 方程组之后的方程

实现机制解释了编号顺序:进入 subequations 时,父方程编号会递增并保存,随后开始一个从属计数器。退出该环境后,主计数器恢复为父编号。因此,父编号为 (1) 的方程组包含三个子方程,后面的普通方程编号为 (2)。amsmath 宏包,第 15 节。

选择与引用目标相匹配的环境

选择布局前,先决定读者需要引用什么:整个集合、每个方程,还是仅仅一个换行显示的表达式。本选择指南依据该宏包文档中的区别编写。amsmath 用户指南,第 3.2–3.7 节。

读者的需求 支持的结构 编号目标
引用一个组及其中对齐的各个方程 用 subequations 包围 align 父编号及带编号的各行
引用一组分别居中的方程 用 subequations 包围 gather 父编号及带编号的各个方程
引用被正文分隔的相关公式 用一个 subequations 包围多个带编号的公式 父编号及每个公式编号
引用一个多行表达式 equation 中包含 split 或 aligned 一个方程编号
显示对齐的各行但不自动编号 align* 不自动为各行编号

为什么 aligned 不会创建单独的子方程

aligned 是封闭数学环境中的一个构建块。在 aligned 中使用 equation,会为封闭环境中的方程编号;它不会为每一行建立单独的带编号引用目标。若要单独引用各行,请在 subequations 中使用 align。指南区分了这些公式环境及其从属构建块。amsmath 用户指南,第 3.7 节。

一个实用的规划方法是先写出引用它的句子。如果需要“系统 (1) 中的第二个方程”,第一个示例提供了这两个引用目标。如果只需要“方程 (1) 中的推导”,一个带编号的多行公式可能就足够了。添加标签前先选择结构,这样可以明确预期的引用目标。

让一个方程组跨越多个公式环境

方程之间可以在该环境中插入正文。该宏包随附的子方程示例展示了这一点,也展示了使用不同数学环境的成组公式。最后一个相关公式之后再关闭外层环境。子编号方程示例。

下面是第二个完整文档。第一个子方程排版为两行,但只有一个引用目标;第二个子方程则是在一句正文之后单独显示的公式。

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{subequations}\label{eq:identities}
\begin{equation}\label{eq:expansion}
\begin{split}
  (a+b)^2 &= a^2+2ab+b^2 \\
          &= (a-b)^2+4ab
\end{split}
\end{equation}

A related identity is
\begin{equation}\label{eq:product}
  (a+b)(a-b)=a^2-b^2.
\end{equation}
\end{subequations}

The group is~\eqref{eq:identities}.
Its members are~\eqref{eq:expansion} and~\eqref{eq:product}.

\end{document}

在这个独立示例中,预期组引用为 (1),成员引用为 (1a) 和 (1b)。split 内部的中间行没有独立编号。如果要将此示例的编号与第一个文档进行比较,请将它另存为一个单独的文件。随附示例同样展示了一个多行表达式获得一个从属编号的情况。子编号方程示例。

排查错误或未解析的引用

在更改计数器或在正文中手动输入编号之前,先检查问题症状。以下步骤可区分引用查找问题与所选环境和预期引用目标不匹配的问题。

  1. 如果 PDF 中显示 ??,请再次编译。 引用从之前运行生成的辅助信息中读取。如果问题仍然存在,请检查引用键的拼写是否与标签一致。LearnLaTeX:交叉引用。
  2. 如果组引用中包含字母,请检查标签的位置。 将父标签放在紧接 \begin{subequations} 之后的位置。将每个子标签放在对应带编号的行上,且位于 \\ 之前;对于最后一行,则放在 \end{align} 之前。amsmath 用户指南,第 3.11.3 节。
  3. 如果各行没有单独编号,请检查环境。 在 equation 中使用 aligned 块,只会提供一个封闭的引用目标。如果每一行都需要引用,请使用第一个示例中的结构。amsmath 用户指南,第 3.7 节。
  4. 如果互不相关的方程都带有字母后缀,请检查外层环境的结束位置。 在该环境中编号的所有内容都会纳入其从属编号序列。将 \end{subequations} 移到预期方程组的实际末尾。子编号方程示例。

改用这些示例时,请使用 eq:system 和 eq:difference 这样的描述性键。前缀 eq: 是作者采用的命名约定;LaTeX 不会用它来判断标签标识的是哪种对象。上下文由标签的位置决定。LearnLaTeX:交叉引用。

验证编辑后引用仍然正确

初始文档编译成功后,进行一次可控编辑:在方程组之前插入一个普通的带编号方程。重新编译,直到引用更改警告消失,然后检查组引用、一个子引用和后续方程。在第一个示例中,它们现在应分别显示为 (2)、(2b) 和 (3)。这是根据该宏包的计数器行为推导出的示例性检查。amsmath 宏包,第 15 节。

这次编辑验证了使用标签的原因:即使编号发生变化,引用它们的句子仍应指向预期的方程。将父标签放在外层环境的开头,为每个需要引用的子方程设置独立的带编号目标,并在改写较长的手稿时使用完整示例作为对照文档。

来源