8

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

4 回答 4

4

如果您希望cleveref 区分使用相同计数器的不同类似定理的环境,则需要加载ntheorem 或amsthm 包。这些包存储了有关cleveref 使用的类似定理的环境的附加信息。请注意,它们必须在cleveref之前加载。

使用 ntheorem(长期以来通过 hyperref 选项与 hyperref 兼容)或 amsthm(也与 hyperref 兼容)与cleveref 一起使用比使用 \label 的可选参数更好的解决方案。也没有必要回退到 \thref 。如果您仍然使用 ntheorem,那么 \cref 将做 \thref 所做的一切,以及更多(多引用、自定义格式等)。事实上,当 ntheorem 使用 thref 选项加载时,cleveref 将 \thref 重新定义为 \cref 的别名。

(有一个技巧 - 在cleveref 手册中也有描述 - 使用 aliascnt 包来区分没有 ntheorem 或 amsthm 的类似定理的环境。但这需要更多的工作,坦率地说,为什么要在简单的 \usepackage{ntheorem} 或 \usepackage {amsthm} 会完美地完成这项工作吗?)

于 2012-01-04T11:32:16.003 回答
3

好的,这是一个解决方法。

指定要在可选标签参数中显示的名称,即:

\begin{corollary}\label[corollary]{cor:test}
Here is the corollary.
\end{corollary}

这提供了所需的输出,同时将环境名称保持在同一位置(尽管写了两次)。

于 2011-08-05T20:39:30.397 回答
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.'

可能你有一个过时的包。

如果您使用文章类,还要确保在 amsthm(和 hyperref)之后加载cleveref,因为这会导致您看到的错误

于 2011-07-20T12:35:12.067 回答
0

由于您已声明这两种定理使用相同的计数器,因此cleveref 无法区分它们。考虑改用 ntheorem 包。

于 2011-06-30T03:51:46.357 回答