当对定理、引理等使用相同计数器时 Hyperref 的 Autoref

当对定理、引理等使用相同计数器时 Hyperref 的 Autoref

首先,如果这是重复的,请原谅:我确实搜索过这个问题,但没能找到它!

我对定理、引理、命题等使用相同的计数器。我想\autoref以以下方式使用(或其他包):调用时\autoref{result1},我得到返回Theorem 1,但调用时\autoref{result2}我得到Lemma 2。这可能不是特别清楚,所以我放入了一个 MWE,使用autorefcleveref。在这两种情况下,我总是在想要“引理”的地方得到单词“定理”。

\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中的名称是正确的:\crefamsthm

示例输出

\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}

如果你使用thmtoolsntheorem包而不是 ,你也会得到正确的名称amsthm。更棒的是,该thmtools包还会纠正hyperrefs\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}

在此处输入图片描述

相关内容