我标记了出现错误的行 程序包 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% 准确,但对于非技术性解释来说足够接近事实。)
作为此过程的一部分,代码首先读取所有\label
s,然后将它们放在一边以供稍后处理(因为它们在决定方程的间距方面没有任何作用,因为它们不会生成印刷品)。然后在打印相应的方程编号时处理它们。
然而,当你也\nonumber
,方程编号永远不会被打印出来,因此 s\label
不会被处理。代码的工作方式意味着它们留在队列中等待处理。
下一次出现另一个显示数学环境时,您将\label
,当排队等待处理的标签时,amsmath 发现仍然有一个未处理的标签,因此它错误地假设这是由于您不小心\label
在同一行中输入了两个 s(而不是\label
之前留下的)。然后它决定友善地警告您。这就是为什么警告似乎出现得有点晚。
顺便,campa 的补丁在这里副作用是,当您关闭环境时,会清除“尚未处理的标签”队列align
。因此,如果您包含该补丁,您会发现您的原始代码可以正常编译(没有任何警告),但两个相关的\label
s 会被默默忽略。这是否是更好的结果尚有争议。