软件包 amsmath 错误:多个 \label:标签‘eq:natural_frequency’将丢失

软件包 amsmath 错误:多个 \label:标签‘eq:natural_frequency’将丢失

我标记了出现错误的行 程序包 amsmath 错误:多个 \label:标签“eq:natural_frequency”将丢失。我只有一个名为 的标签\label{eq:natural_frequency}。添加了 MWE

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\section{Problem 7.19}
\begin{align}\label{eq:natural_frequency}
\omega_{n} &= \frac{\pi}{t_{r}\sqrt{1-\zeta^{2}}} \nonumber \\
\omega_{n} &= \frac{\pi}{0.2\sqrt{1-0.707^{2}}} \nonumber \\
\omega_{n} &= 22.21 \nonumber
\end{align}\\

\subsection{Part (a)}\label{subsec:730a}
Using the given equations:
\begin{align}\label{eq:given}
\frac{dx_{1}(t)}{dt} &= -x_{1} + 5x_{2} \nonumber \\
\frac{dx_{2}(t)}{dt} &= -6x_{1}(t) - k_{1}x_{1}(t) + r(t) \nonumber
\end{align} %ERROR ON THIS LINE

We can now find the characteristic equation:

\begin{align}\label{eq:ch_eq_1}
\begin{vmatrix}
s + 1 & -5 \\
6 + k_{1} & s + k_{2}
\end{vmatrix}
\end{align} %ERROR ON THIS LINE

\end{document}

正如 Willie Wong 的回答一样。

建议删除\nonumber以获得参考点。

但是,我想知道为什么 latex 没有在标记为 的对齐中显示错误natural frequency。 它还包含\nonumber每一行。

在此处输入图片描述

答案1

当你告诉 LaTeX 两者时,你期望会发生什么

  • 标记一个方程式,并
  • 不是数方程吗?

如果你要去,\label则上的\begin{align}\label也不应该有\nonumber。删除那些\nonumber咒语可修复错误。


话虽如此,你似乎使用标签来指代整个方程组,而不是特定的方程组?那么也许最好使用

\begin{equation}\label{eq:???}
   \begin{aligned}
       aligned material here
   \end{aligned}
\end{equation}

或者

\begin{subequations}\label{eq:grp:???}
   \begin{align}
       aligned material
   \end{align}
\end{subequations}

第一个选项将生成类似以下内容的内容 在此处输入图片描述

我认为第二种选择看起来更好。 在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\section{Problem 7.19}
\begin{subequations}\label{eq:natural_frequency}
        \begin{align}
\omega_{n} &= \frac{\pi}{t_{r}\sqrt{1-\zeta^{2}}} \\
\omega_{n} &= \frac{\pi}{0.2\sqrt{1-0.707^{2}}}  \\
\omega_{n} &= 22.21 
\end{align}
\end{subequations}

Just to see what references look like: \eqref{eq:natural_frequency}.

\end{document}

原帖作者还询问为什么错误会出现在错误的行上。这是因为 AMS 数学排版显示数学的方式很复杂,需要经过两次过程,首先测量,然后实际打印。(以下内容并非 100% 准确,但对于非技术性解释来说足够接近事实。)

作为此过程的一部分,代码首先读取所有\labels,然后将它们放在一边以供稍后处理(因为它们在决定方程的间距方面没有任何作用,因为它们不会生成印刷品)。然后在打印相应的方程编号时处理它们。

然而,当你也\nonumber,方程编号永远不会被打印出来,因此 s\label不会被处理。代码的工作方式意味着它们留在队列中等待处理

下一次出现另一个显示数学环境时,您将\label,当排队等待处理的标签时,amsmath 发现仍然有一个未处理的标签,因此它错误地假设这是由于您不小心\label在同一行中输入了两个 s(而不是\label之前留下的)。然后它决定友善地警告您。这就是为什么警告似乎出现得有点晚。

顺便,campa 的补丁在这里副作用是,当您关闭环境时,会清除“尚未处理的标签”队列align。因此,如果您包含该补丁,您会发现您的原始代码可以正常编译(没有任何警告),但两个相关的\labels 会被默默忽略。这是否是更好的结果尚有争议。

相关内容