我希望所有定义、引理、定理、命题和推论都按顺序编号。代码如下。我的问题是:当我引用时,\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
计数器,留下\@currentlabel
,definition
这导致了“错误”的标签格式。
我正在\DeclareCoupledCounters
从xassoccnt
包中申请耦合计数器,这类似于共享计数器的概念,但允许为每个计数器设置单独的标签,从而有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
,它不仅可以处理标签分配工作,还可以接受多个参数。(为了简化确定哪个标签应该与哪个定理类环境一起使用的工作,我进一步建议您加载或包ntheorem
。amsthm
)
\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}