按第一次引用对引理进行编号

按第一次引用对引理进行编号

我的文档很长,证明分为几个引理,其中许多都在附录中。但是,当我使用引理 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}

相关内容