我的文档很长,证明分为几个引理,其中许多都在附录中。但是,当我使用引理 25(理想情况下应该是引理 1)来证明引理 2 时,似乎很奇怪。
它并没有立即表明我在证明中没有犯循环错误。理想情况下,在任何证明中,我都希望只引用数字低于它们的引理,这样当我的证明变得越来越复杂时,我就不会犯这个错误。
这意味着我希望我的引理在第一次被引用时(或陈述时,先发生的两次之一)进行编号。有什么方法可以实现这一点?
答案1
我不使用引理,但如果它们使用像方程式一样的编号方案,那么你应该能够适应这一点。我在这里展示了如何推迟方程式的呈现,同时保留它们“构思”时的编号。
我创建了一个\defereqn
命令来“构思”一个方程(给它一个数字并记住它),而不打印它。我还有一个命令\recalleqn
,它将按照构思的顺序逐个调用延迟方程。如果有人想不按顺序调用它们,那应该是可行的,但随后\recalleqn
需要一个参数,并且必须知道如何处理它。
\documentclass[12pt]{article}
\newcounter{deferred}\setcounter{deferred}{0}
\newcounter{shown}\setcounter{shown}{0}
\newcounter{saveequation}
\newcommand\defereqn[1]{%
\addtocounter{deferred}{1}%
\expandafter\edef\csname defeqnum\roman{deferred}\endcsname{%
\arabic{equation}}%
\addtocounter{equation}{1}%
\expandafter\gdef\csname defeq\roman{deferred}\endcsname{#1}%
}
\newcommand\recalleqn{%
\addtocounter{shown}{1}%
\setcounter{saveequation}{\value{equation}}%
\setcounter{equation}{\csname defeqnum\roman{shown}\endcsname}%
\csname defeq\roman{shown}\endcsname%
\setcounter{equation}{\value{saveequation}}%
}
\begin{document}
In equation~\ref{eq:first}, we prove what we need.
\defereqn{%
\begin{equation}
\label{eq:first}
y = x
\end{equation}
}%
Then we use it in equation~\ref{eq:second}
\begin{equation}
\label{eq:second}
y = x^2
\end{equation}
We will also use equation~\ref{eq:third}
\defereqn{%
\begin{equation}
\label{eq:third}
y = x^3
\end{equation}
}%
to prove
\begin{equation}
\label{eq:fourth}
y = x^4
\end{equation}
\clearpage
Our first deferred equation was
\recalleqn
Our next deferred equation was
\recalleqn
\end{document}
答案2
这是我根据 Steven B. Segletes 的回答生成的一个例子,所有功劳都归于他。
您可以在发出 \deferlemma 时将引理的标签作为参数传递,然后使用 \recalllemma 使用相同的标签进行回忆
\documentclass[12pt]{article}
\usepackage{amsmath}
\newcounter{lema}\setcounter{lema}{0}
\newtheorem{lemma}[lema]{Lemma}
\newcounter{savelema}
\newcommand\deferlemma[2]{
\expandafter\edef\csname deflemnum#1\endcsname{\arabic{lema}}
\addtocounter{lema}{1}
\expandafter\gdef\csname deflem#1\endcsname{#2}
}
\newcommand\recalllemma[1]{
\setcounter{savelema}{\value{lema}}
\setcounter{lema}{\csname deflemnum#1\endcsname}
\csname deflem#1\endcsname
\setcounter{lema}{\value{savelema}}
}
\begin{document}
We will use Lemma~\ref{lem:first} to show the following result:
\deferlemma{first}{
\begin{lemma}
\label{lem:first}
$y = x$
\end{lemma}
}
\begin{lemma}
\label{lem:second}
$y = x^2$
\end{lemma}
We will also use lemma~\ref{lem:third} to prove
\deferlemma{third}{
\begin{lemma}
\label{lem:third}
$y = x^3$
\end{lemma}
}
\begin{lemma}
\label{lem:fourth}
$y = x^4$
\end{lemma}
\clearpage
Our first deferred lemma was
\recalllemma{first}
Our next deferred lemma was
\recalllemma{third}
\end{document}