cleveref因共享同一个计数器的定理环境而失败

时间:2011-06-27 22:07:34

标签: latex reference counter theorem

我想对同一(部分)计数器上的所有定理和推论进行编号。但是当我这样做时,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,这个问题仍然存在。

有什么建议吗?

4 个答案:

答案 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包。