在 amsmath 嵌套环境中使用 \label

在 amsmath 嵌套环境中使用 \label

首先,我不确定这些环境是否应该嵌套,但事实是对齐结果完全符合我的要求,并且没有出现任何错误。

\documentclass[a5paper]{article}
\usepackage{amsmath}

\begin{document}

\begin{gather}
\begin{align}
a &= b + c \notag \\
%\label{important}
b - a &= -c \\
c - a &= -b
\end{align} \\
a - (b-a) - (c-a) = 2a
\end{gather}

\end{document}

在此处输入图片描述

当我取消注释时出现问题\label,然后编译被中断:

! Package amsmath Error: Multiple \label's: label 'important' will be lost.

结果还可以,如果每次编译时不必按回车键的话我也不会太介意...

我可以amsmath绕过\label如下所示这里,但还有其他可能的解决方法吗?还是我做的事情根本就是错的?

答案1

显然这是一个错误,我们将进行调查。

但这里还有另一个可怕的黑客,它只是发出令人讨厌的警告

LaTeX Warning: Label `important' multiply defined.

至少你不必每次都按回车键……

\documentclass[a5paper]{article}
\usepackage{amsmath}
\begin{document}
\begin{gather}
\begin{align}
a &= b + c \tag*{} \\
b - a &= -c
\label{important} \\
c - a &= -b
\end{align}\\
a - (b-a) - (c-a) = 2a
\end{gather}
some text with an xref: \eqref{important}
\end{document}

答案2

官方支持使用aligninside gather(参见 的第 23 页amsldoc.pdf,第 10.2 节末尾)。但是,\label在 inner 中使用align存在错误:如果\notag使用,则会引发错误,如果\notag没有使用,则第二行中的标签会重复。

一个可怕的黑客方法是禁用错误生成:

\makeatletter
\def\label@in@display{\gdef\df@label}
\makeatother

当然,当错误合法出现时,这也会抑制错误,因此请小心使用。

答案3

问题出在您的\notag命令上,它指示amsmath不要在等式旁边放置tag(在本例中为数字) - 因此,标记它没有任何意义,这就是您收到错误的原因。

如果您想要\label第一个等式,则需要\notag从第一行中删除。如果您不想\label这样做,那么也\notag可以。

答案4

虽然这似乎不是您的问题,但此错误也可能因为\notag同一行中有两个命令而发生。将\notag两次放在同一行是无用的,可能看起来无害,但它会产生上述错误。

相关内容