我想重复使用具有相同内容和数量的方程式。我知道该thmtools
包有一个restatable
环境可以为环境执行此操作(例如这个答案),但我还想使用仅属于某个环境一部分的单个方程来做到这一点。
我看了以下问题,它们仅旨在重复方程式编号,但输入整个方程式两次(前三次)或重复方程式的内容而不输入数字(最后一次):
根据那里提供的答案以及这个答案的最后一部分我尝试创建一个\restatableeq
用于像这样的可重整方程的宏:
\documentclass{article}
\usepackage{amsmath}
\newcommand{\restatableeq}[3]{\label{#3}#2\xdef#1{\unexpanded#2\unexpanded\tag{\unexpanded\ref{#3}}}}
\begin{document}
\begin{eqnarray}
\restatableeq{\eqone}{This & is & eqation 1}{eq1}\\
Another & simple & equation
\end{eqnarray}
\begin{eqnarray}
One & more & equation\\
\restatableeq{\eqtwo}{This & is & eqation 2}{eq2}
\end{eqnarray}
Here, we use (\ref{eq1}) and (\ref{eq2}) again:
\begin{eqnarray*}
\eqone\\
\eqtwo
\end{eqnarray*}
\end{document}
不幸的是,它不起作用并且产生:
! Missing { inserted.
<to be read again>
T
l.10 ...ableeq{\eqone}{This & is & eqation 1}{eq1}
\\
?
我猜测这些&
符号没有按照预期进行处理,但我也可能错了。
我如何定义这样的命令\restatableeq
,以便让我能够在像本例这样的设置中重复使用具有相同内容和数量的方程式(并给它一个标签,以便我仍然可以\ref
像往常一样使用)?
答案1
你的文档中有几个缺陷。
- 您使用
\xdef{\unexpanded...}
。这本质上就是\gdef
,这里完全足够了。 - 您的使用
\unexpanded
是错误的。\unexpanded
需要一个由显式 , 分隔的平衡标记列表{
。}
如果您想保护单个标记免受扩展\edef
,请使用\noexpand
。 Enrico 写了一篇很好的答案关于那个。 - 你用
eqnarray
。 切勿使用eqnarray
。 \tag
不工作eqnarray
。
这是一个修复版本。
\documentclass{article}
\usepackage{amsmath}
\newcommand{\restatableeq}[3]{\label{#3}#2\gdef#1{#2\tag{\ref{#3}}}}
\begin{document}
\begin{align}
\restatableeq{\eqone}{This & is & eqation 1}{eq1}\\
Another & simple & equation
\end{align}
\begin{align}
One & more & equation\\
\restatableeq{\eqtwo}{This & is & eqation 2}{eq2}
\end{align}
Here, we use (\ref{eq1}) and (\ref{eq2}) again:
\begin{align*}
\eqone\\
\eqtwo
\end{align*}
\end{document}