我想对同一(部分)计数器上的所有定理和推论进行编号。但是当我这样做时,Cleveref将它们都命名为“定理”。这是一个最小的例子:
\documentclass{amsart}
\usepackage{amsthm, cleveref}
%\crefname{theorem}{theorem}{theorems}
%\crefname{corollary}{corollary}{corollaries}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{corollary}[theorem]{Corollary}
\begin{document}
\section{Section title}
\begin{theorem}\label{thm:test}
Here is the theorem.
\end{theorem}
\begin{corollary}\label{cor:test}
Here is the corollary.
\end{corollary}
The theorem reference is given by \cref{thm:test} and the corollary reference is given by \cref{cor:test}.
\end{document}
这里,推论参考是'定理1.2'。即使明确说明了crefname,这个问题仍然存在。
有什么建议吗?
答案 0 :(得分:3)
如果您希望cleveref区分使用相同计数器的不同定理类环境,则需要加载n定理或amsthm包。这些包存储了关于cleveref使用的类似定理环境的其他信息。请注意,必须在 cleveref。
之前加载使用ntheorem(现在通过hyperref选项已经长时间与hyperref兼容)或amsthm(也是hyperref兼容)与cleveref一起使用是比使用\ label的可选参数更好的解决方案。而且也没有必要回到\ thref。如果你正在使用n定理,那么\ cref将完成\ thref所做的一切,以及更多(多引用,自定义格式化等)。事实上,当ntheorem加载了thref选项时,cleveref将\ thref重新定义为\ cref的别名。
(有一个技巧 - 也在cleveref手册中描述 - 使用aliascnt包来区分没有n定理或amsthm的类似定理的环境。但它需要更多的工作,坦率地说为什么在一个简单的\ usepackage {ntheorem}时会烦恼或\ usepackage {amsthm}会完美地完成这项工作吗?)
答案 1 :(得分:2)
好的,这是一种解决方法。
指定要在可选标签参数中显示的名称,即:
\begin{corollary}\label[corollary]{cor:test}
Here is the corollary.
\end{corollary}
这会提供所需的输出,同时将环境名称保持在同一位置(尽管写了两次)。
答案 2 :(得分:1)
我没有看到任何错误。我用
运行你的脚本%\crefname{theorem}{theorem}{theorems}
%\crefname{corollary}{corollary}{corollaries}
评论和取消评论,我得到了预期的
'The theorem reference is given by theorem 1.1 and the corollary reference is
given by corollary 1.2.'
很可能你有一个过时的包裹。
如果您使用文章类,还要确保加载cleveref AFTER amsthm(和hyperref),因为这会导致您看到的错误
答案 3 :(得分:0)
既然你已经宣布这两种定理使用同一个计数器,那么cleveref无法区分它们。请考虑使用ntheorem包。