首先,如果这是重复的,请原谅:我确实搜索过这个问题,但没能找到它!
我对定理、引理、命题等使用相同的计数器。我想\autoref
以以下方式使用(或其他包):调用时\autoref{result1}
,我得到返回Theorem 1
,但调用时\autoref{result2}
我得到Lemma 2
。这可能不是特别清楚,所以我放入了一个 MWE,使用autoref
和cleveref
。在这两种情况下,我总是在想要“引理”的地方得到单词“定理”。
\documentclass[]{article}
\usepackage[UKenglish]{babel}
\usepackage{hyperref, cleveref}
\newtheorem{thm} {Theorem}
\newtheorem{lem}[thm]{Lemma}
\def\thmautorefname{Theorem}
\def\lemautorefname{Lemma}
\begin{document}
\begin{thm} \label{T1} Theorem 1... \end{thm}
\begin{lem} \label{L2} Lemma 2... \end{lem}
\autoref{T1} \autoref{L2}
\Cref{T1} \Cref{L2}
\end{document}
我希望输出是“定理 1 引理 2”,但目前它是“定理 1 定理 2”。
答案1
详细说明我的评论,因为如果您使用该包,则cleveref
中的名称是正确的:\cref
amsthm
\documentclass{article}
\usepackage[UKenglish]{babel}
\usepackage{amsthm,hyperref,cleveref}
\newtheorem{thm} {Theorem}
\newtheorem{lem}[thm]{Lemma}
\begin{document}
\begin{thm} \label{T1} Theorem 1\dots \end{thm}
\begin{lem} \label{L2} Lemma 2\dots \end{lem}
\Cref{T1} \Cref{L2}
\end{document}
如果你使用thmtools
或ntheorem
包而不是 ,你也会得到正确的名称amsthm
。更棒的是,该thmtools
包还会纠正hyperref
s\autoref
命令:
\documentclass{article}
\usepackage[UKenglish]{babel}
\usepackage{thmtools,hyperref,cleveref}
\newtheorem{thm} {Theorem}
\newtheorem{lem}[thm]{Lemma}
\begin{document}
\begin{thm} \label{T1} Theorem 1\dots \end{thm}
\begin{lem} \label{L2} Lemma 2\dots \end{lem}
\autoref{T1} \autoref{L2}
\Cref{T1} \Cref{L2}
\end{document}
在进行实验时,记得编译两次以查看包更改的效果,因为第一次运行会将latex
有关这些标签的信息放入文件中.aux
,然后在第二次运行时读取这些信息以用于引用命令。
答案2
对引理等使用共享计数器可能会比较棘手——无论是谁\cref
都不\autoref
知道哪个计数器在内部被重新步进,所以thm
这里都假设。
利用该包aliascnt
可以定义现有计数器的名称别名,例如\newaliascnt{lem}{thm}
。
必须配合\newtheorem
\aliascntresetthe{lem}
使用。
\documentclass[]{article}
\usepackage[UKenglish]{babel}
\usepackage{aliascnt}
\usepackage{hyperref, cleveref}
\newtheorem{thm}{Theorem}
\newaliascnt{lem}{thm}
\newtheorem{lem}[lem]{Lemma}
\aliascntresetthe{lem}
\def\thmautorefname{Theorem}
\def\lemautorefname{Lemma}
\begin{document}
\begin{thm} \label{T1} Theorem 1... \end{thm}
\begin{lem} \label{L2} Lemma 2... \end{lem}
\autoref{T1} \autoref{L2}
\Cref{T1} \Cref{L2}
\end{document}