\label-\ref 使用 varioref 的连续编号定理

\label-\ref 使用 varioref 的连续编号定理

我希望所有定义、引理、定理、命题和推论都按顺序编号。代码如下。我的问题是:当我引用时,\ref{<lemma 4>}得到“定义 4”。

\documentclass[a4paper]{article}
\usepackage{varioref}

\newtheorem{definition}                {definition}
\newtheorem{theorem}       [definition]{theorem}
\newtheorem{lemma}         [definition]{lemma}
\newtheorem{corollary}     [definition]{corollary}

\labelformat{definition}   {definition~#1}
\labelformat{theorem}      {theorem~#1}
\labelformat{lemma}        {lemma~#1}
\labelformat{corollary}    {corollary~#1}

\begin{document}

\begin{definition}\label{d1}
$i^2=-1$.
\end{definition}

\begin{theorem}\label{t2}
$e^{i\theta}=\cos\theta+i\sin\theta$.
\end{theorem}

\begin{lemma}\label{l3}
$a+b=b+a$.
\end{lemma}

\begin{theorem}\label{t4}
$a(b+c)=ab+ac$.
\end{theorem}

\begin{corollary}\label{c5}
$e^{i\pi}+1=0$.
\end{corollary}

We use \ref{d1} and \ref{l3} get \ref{t2}, \ref{t4}, \ref{c5}.
\end{document}

我可能做错了什么?

答案1

据我所知,varioref不知道在行动中有一个不同的定理——所有人都使用名为的共享计数器definition\refstepcounter增加definition计数器,留下\@currentlabeldefinition这导致了“错误”的标签格式。

我正在\DeclareCoupledCountersxassoccnt包中申请耦合计数器,这类似于共享计数器的概念,但允许为每个计数器设置单独的标签,从而有varioref机会获取正确的标签格式。请注意:现在有四个计数器...

cleveref可以使用替代解决方案,通过定义crefname单个实体,使用\cref{...}而不是\ref并用覆盖标签类型\label[lemma]{l1},但这对于许多定义/定理等来说可能变得繁琐。

\documentclass[a4paper]{article}

\usepackage{xassoccnt}

\newtheorem{definition}{definition}
\newtheorem{theorem}{theorem}
\newtheorem{lemma}{lemma}
\newtheorem{corollary}{corollary}

\DeclareCoupledCounters{definition,lemma,theorem,corollary}  

\usepackage{varioref}

\labelformat{definition}{definition~#1}
\labelformat{theorem}{theorem~#1}
\labelformat{lemma}{lemma~#1}
\labelformat{corollary}{corollary~#1}

\begin{document}

\begin{definition}\label{d1}
$i^2=-1$.
\end{definition}

\begin{theorem}\label{t2}
$e^{i\theta}=\cos\theta+i\sin\theta$.
\end{theorem}

\begin{lemma}\label{l3}
$a+b=b+a$.
\end{lemma}

\begin{theorem}\label{t4}
$a(b+c)=ab+ac$.
\end{theorem}

\begin{corollary}\label{c5}
$e^{i\pi}+1=0$.
\end{corollary}

We use \ref{d1} and \ref{l3} get \ref{t2}, \ref{t4}, \ref{c5}.
\end{document}

替代版本cleveref

\documentclass[a4paper]{article}


\newtheorem{definition}{definition}
\newtheorem{theorem}[definition]{theorem}
\newtheorem{lemma}[definition]{lemma}
\newtheorem{corollary}[definition]{corollary}

\usepackage{cleveref}

% Not really necessary, since cleveref defines them already, but for demonstration only 
%\crefname{definition}{definition}{definitions}
%\Crefname{definition}{Definition}{Definitions}  % for upper case 
%\crefname{lemma}{lemma}{lemmata}
%\Crefname{lemma}{Lemma}{Lemmata}
%\crefname{theorem}{theorem}{theorems}
%Crefname{theorem}{Theorem}{Theorems}
%\crefname{corollary}{corollary}{corollaries}
%\Crefname{corollary}{Corollary}{Corollaries}


\begin{document}

\begin{definition}\label{d1}
$i^2=-1$.
\end{definition}

\begin{theorem}\label[theorem]{t2}
$e^{i\theta}=\cos\theta+i\sin\theta$.
\end{theorem}

\begin{lemma}\label[lemma]{l3}
$a+b=b+a$.
\end{lemma}

\begin{theorem}\label[theorem]{t4}
$a(b+c)=ab+ac$.
\end{theorem}

\begin{corollary}\label[corollary]{c5}
$e^{i\pi}+1=0$.
\end{corollary}

We use \cref{d1} and \cref{l3} get \cref{t2}, \cref{t4}, \cref{c5}.
\end{document}

在此处输入图片描述

答案2

我建议您使用cleveref包的强大功能。此包提供了一个名为的宏\cref,它不仅可以处理标签分配工作,还可以接受多个参数。(为了简化确定哪个标签应该与哪个定理类环境一起使用的工作,我进一步建议您加载或包ntheoremamsthm

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{ntheorem,varioref,cleveref}

\newtheorem{definition}{definition}
\newtheorem{theorem}[definition]{theorem}
\newtheorem{lemma}[definition]{lemma}
\newtheorem{corollary}[definition]{corollary}

\begin{document}

\begin{definition}\label{d1} $i^2=-1$. \end{definition}    
\begin{theorem}\label{t2} $e^{i\theta}=\cos\theta+i\sin\theta$. \end{theorem}
\begin{lemma}\label{l3} $a+b=b+a$. \end{lemma}
\begin{theorem}\label{t4} $a(b+c)=ab+ac$. \end{theorem}
\begin{corollary}\label{c5} $e^{i\pi}+1=0$. \end{corollary}

\noindent
We use \cref{d1,l3} and get \cref{t2,t4,c5}.
\end{document}

相关内容