帮助交叉引用方程式

帮助交叉引用方程式

我正在尝试学习如何使用命令,\eqref而不是仅仅执行tag{1.1},这样我就不必返回并重新编号。我遇到了麻烦:在问题 3b 中,我说

Now \eq{y(t, \epsilon)= y_0(t) + \epsilon y_1(t) + O(\epsilon^2), \label{eq:aa}}

(\eq 是我定义的缩写,它是\newcommand{\eq}[1]{\begin{align*}#1\end{align*}})。后来我回去写了So we can fill in \eqref{eq:aa},问题是

  1. 它没有标记方程式
  2. 当它再次引用它时,它称它为(1.2),尽管它是第一个标记方程。

这是我的代码的链接,如果它可以帮助您进行诊断。https://www.writelatex.com/read/zjhhjpndjpkz

我感谢您的帮助!

答案1

好的。你的定义存在一些问题。

任何带星号的数学显示环境旨在抑制编号。您可以\tag{...}在带星号的环境中放置一个,但数字不会自动增加。但是,\label在这样的标签上将要受到\ref或的尊重\eqref。(\eqref实际上所做的就是将 a 的参数格式化\ref为直立并用括号括起来。)

接下来。align旨在用于多行表达式,每行都有左部分和右部分。虽然很多人用它来\align显示单行,但这不是一个好主意,因为多行显示周围的垂直间距与单行显示周围的垂直间距有意不同。如果一行没有两个部分(以 分隔&),则结构不会水平居中。

最后,将环境变成命令会使您的输入更难被别人阅读和解读,并导致不良的输入习惯 - 例如将显示材料排成长行。相信我,这会导致期刊编辑严重脱发。

如果你真的想要使用像这样的简写来显示一行、编号,那么可以这样做,也许像这样:

\newcommand{\eq}[1]{\begin{equation} #1\end{equation}}

但最好在这样做之前再三考虑。有人建议说服你的输入环境/编辑器使用“完成”。这使得很多从长远来看,文件更加易于理解,调试和维护也更加高效。

答案2

我查看了链接中提供的代码。主要问题似乎是您align*在宏定义中使用了环境\eqalign*环境在设计上确实不是增加或打印方程编号。因此,\label与此方程(或方程组)相关的任何指令都不会指向由 生成的内容\eq

因此,后续的\ref\eqref指令不会指向该结构。相反,要么(??)打印出来,要么交叉引用将指向在丢失指令之前最近增加其关联计数器的对象。该对象可能是部分、定理、以“正常”方式(即不是通过)\label生成的其他方程式等。\eq

\eq通过如下定义宏您应该能够获得更好的结果:

\newcommand{\eq}[1]{\begin{equation}\begin{split} #1 \end{split}\end{equation}}

并附\label上说明,例如

\eq{y(t, \epsilon)= y_0(t) + \epsilon y_1(t) + O(\epsilon^2),} \label{eq:aa}

请注意,使用此设置,您应该用 重命名语句\tag内的所有指令。\eq\label

相关内容