只是一个知识问题。我想知道是否有一个包,通过给方程贴上标签,然后用 \eqref 或任何命令引用它,方程就会完全出现而不是标签。也许重点是复制与方程相同的标签,但我问是否有更简单的方法。
答案1
我不知道有哪个包可以做到这一点,但下面的代码定义了一个新的环境requation
,用于“记住方程”,它采用强制标签,然后可以使用\Eqref{<label>}
该标签重复方程。默认情况下,会重复原始方程编号,并且有*
-version 用于省略方程编号。
编辑在评论中,OP 询问是否可以将此宏用作1+\Eqref{...}+1
。在最初的实现中这是不可能的,但我做了一个小的改动,我添加了一个!
-version,它可以重现方程而不将其放在环境中equation
。因此,-version!
允许1+\Eqref!{one}+1
并且它也允许\Eqref
内联使用。!
和*
修饰符不能一起使用。(事后看来,也许\Eqref{}
应该只重现方程,而 -variant*
应该将其放在equation
具有原始数字的环境中,从而允许!
删除 -variant。)我还在环境\label{...}
中添加了一个“自动” requation
。
編輯 II根据 Bruno 在评论中的出色建议,我删除了 -variant !
,并\EqRef{...}
在数学模式中使用时重新打印方程式。这简化了语法,并且不会改变输出。
结果是你可以写:
使用代码:
\documentclass{amsart}
\usepackage{environ}
\usepackage{etoolbox}
\usepackage{xparse}
\makeatletter
\NewEnviron{requation}[1]{%
\csxdef{reqno@#1}{\theequation}% remember equation number
\protected@csxdef{req@#1}{\BODY}% remember equation
\equation\BODY\label{#1}\endequation% print equation
}
\newcounter{rememberedequation}
\NewDocumentCommand\Eqref{ s m }{%
\relax\ifmmode\csuse{req@#2}%
\else%
\IfBooleanTF{#1}{\begin{equation*}\csuse{req@#2}\end{equation*}}% no equation number
{% if no * then we need to fudge the equation number
\setcounter{rememberedequation}{\value{equation}}% store equation number
\setcounter{equation}{\csuse{reqno@#2}}% reset equation number
\begin{equation}\csuse{req@#2}\end{equation}% equation
\setcounter{equation}{\value{rememberedequation}}% restore equation number
}%
\fi%
}
\makeatother
\begin{document}
\begin{requation}{one}
1+1=2
\end{requation}
First we remember the equation without the equation number:
\Eqref*{one}
To see what happens let's put a new unremembered equation in the middle
\begin{equation}
2+2=4
\end{equation}
Now we remember equation~\eqref{one} with the equation number:
\Eqref{one}%
To check that equations are being indexed correctly, here is another unremembered equation
\begin{equation}
3+2=5
\end{equation}
Finally, we can reuse the remembered equation in-line as $\Eqref{one}$ and we can even
add something to it with
\[
1 + \Eqref{one} +1
\]
\end{document}
我还没有用“复杂”的方程式测试过这一点,但我认为它应该可行。