我用 \label{lem1} 标记了我的引理,并在之后使用 \autoref{lem1} 引用它。但是,打印出来的却是“定理 2.1”,而实际上应该是“引理 2.1”。我该如何解决这个问题?
\documentclass[a4paper, 12pt, twoside]{thesis}
\usepackage{verbatim}
\usepackage{amssymb,amsmath}
\usepackage{amsthm,amsfonts,amscd,amsrefs}
\newtheoremstyle{component}{}{}{}{}{\itshape}{.}{.5em}{\thmnote{#3}#1}
\theoremstyle{component}
\newtheorem*{component}{}
\begin{document}
\begin{lemma} \label{lem1}
This is a lemma.
\end{lemma}
By \autoref{lem1}, we have..
\end{document}
答案1
该问题与 .cls 文件无关,并且有据可查,例如带有共享计数器的 amsthm 弄乱了 autoref 引用
你可以使用那篇文章中提出的两种解决方案中的任何一种,我建议使用cleveref
第二种解决方案。为此,只需包括
\usepackage{cleveref}
在 .cls 文件中,紧接着
\usepackage{...,amsthm,...}
然后在文档中使用\Cref{lem1}
(而不是)。代码如下:autoref
\documentclass{article}
\usepackage{hyperref}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{theorem}{Theorem}
\newtheorem{lemm}[theorem]{Lemma}
\begin{document}
\begin{lemm}\label{lem1}
This is a lemma.
\end{lemm}
By \Cref{lem1}, we have.
\end{document}
如果你不想修改 .cls 文件,一个更简单但不太可靠的解决方案是定义一个\lref
用于引理的新命令(然后定义另一个命令 \dref 用于定义等)。
\newcommand\lref[1]{Lemma~\ref{#1}}
我说这不太稳健,因为你总是会犯错误并用来\lref
引用,比如说一个定义。
\documentclass{article}
\usepackage{hyperref}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\newtheorem{lemm}[theorem]{Lemma}
\newcommand\lref[1]{Lemma~\ref{#1}}
\begin{document}
\begin{lemm}\label{lem1}
This is a lemma.
\end{lemm}
By \lref{lem1}, we have.
\end{document}