我正在使用svmono
带有选项的类。不幸的是,由于类定义其环境的方式,envcountsame
这存在问题。cleveref
例如,如果我有\begin{proposition}\label{xyz}
并调用\Cref{xyz}
,则输出将始终为定理 xyz而不是命题 xyz*,对于任何其他环境也同样如此。
一种解决方法是将环境的名称添加到标签命令中:因此,而不是\begin{proposition}\label{xyz}
我使用\begin{proposition}\label[proposition]{xyz}
,这似乎有效。
但是,我现在发现 cleveref 以这种方式识别的环境是有限的。例如,这似乎不适用于question
或exercise
等,而 cleveref 实际上会显示??? XYZ,没有环境名称。
我该如何添加这些环境才能cleveref
正确显示环境名称?FWIW,我做过cleveref
在所有其他包之后加载。
答案1
[备注:在我发布下面的答案后不久,OP 更新了帖子,提到该类svmono
已加载选项envcountsame
。这是一条至关重要的信息。以下答案确实不是envcountsame
若有效则适用。
并非所有可以想到的环境名称都是已知的先验到cleveref
。幸运的是,该cleveref
软件包提供了宏\crefname
,让用户可以清楚地说明应该如何标记迄今为止未知名称的环境。例如,
\crefname{exercise}{exercise}{exercises}
\crefname{question}{question}{questions}
顺便问一下,你声称“如果[使用svmono
文档类时]我有\begin{proposition}\label{xyz}
并调用\Cref{xyz}
,则输出将始终是定理 xyz而不是命题 xyz“?根据以下 MWE(最小工作示例),我认为这个说法似乎不正确。
\documentclass{svmono}
\usepackage[colorlinks,allcolors=blue]{hyperref}
\usepackage[nameinlink,noabbrev]{cleveref}
\crefname{exercise}{exercise}{exercises}
\crefname{question}{question}{questions}
\begin{document}
\begin{theorem} aaa \label{aaa}\end{theorem}
\begin{proposition} bbb \label{bbb}\end{proposition}
\begin{exercise} ccc \label{ccc}\end{exercise}
\begin{question} ddd \label{ddd}\end{question}
\obeylines
\cref{aaa}, \Cref{aaa}
\cref{bbb}, \Cref{bbb}
\cref{ccc}, \Cref{ccc}
\cref{ddd}, \Cref{ddd}
\end{document}