首先,我不确定这些环境是否应该嵌套,但事实是对齐结果完全符合我的要求,并且没有出现任何错误。
\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
官方支持使用align
inside 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
两次放在同一行是无用的,可能看起来无害,但它会产生上述错误。