我之前发过一次关于这个问题的帖子,这里,但想开一个包含更多信息和 MWE 的新帖子。希望没问题。(在旧帖子中,我没有充分解释情况,忘记了 MWE,对此我深表歉意。但这意味着有些评论是基于不准确的信息,这使得这个帖子不太有用。)
问题在于,在 svmono 等 sv 类中,添加 envcountsame 选项会导致 cleveref 无法正确识别环境的名称引用。无论环境如何,所有内容都显示为“Theorem”。
我发现了一个解决方法这里,就是定义一个自定义的 \label 命令。这样就行了大多,但并非完全如此。某些环境,无论出于何种原因,仍然无法正确显示。
有效环境的示例:命题、引理、推论、注释
不起作用的环境示例:练习、问题
我在 svmono 类本身中找不到任何可以解释这一点的东西。据我所知,它们都是相同定义的。
为这些环境指定 \Crefname 似乎没有帮助。事实上,这似乎不是一个 cleveref 问题,至少不完全是。例如,对于不起作用的环境,\namecref 和 \labelcref 仍然有效,并正确获取信息。
是否有人对可能发生的事情有任何见解,甚至更好的是,是否有任何关于如何解决此行为的想法?
我在下面附加了 MWE。
编辑:拼写、修复 MWE
\documentclass[envcountsame]{svmono}
\usepackage[capitalise]{cleveref}
\usepackage{thmtools}
\makeatletter
\newcommand{\labelx}[1]{
\relax
\ifmmode
\label{#1}
\else
\ifnum\pdfstrcmp{\@currenvir}{document}=0
\label{#1}
\else
\label[\@currenvir]{#1}
\fi
\fi
}
\makeatother
\begin{document}
\crefname{exercise}{Exercise}{Exercise}
\Crefname{exercise}{Exercise}{Exercise}
\crefname{question}{Question}{Question}
\Crefname{question}{Question}{Question}
\begin{proposition}\label{prop_with_label}
Proposition with label.
\end{proposition}
\begin{proposition}\labelx{prop_with_labelx}
Proposition with labelX.
\end{proposition}
\begin{corollary}\label{cor_with_label}
Corollary with label.
\end{corollary}
\begin{corollary}\labelx{cor_with_labelx}
Corollary with labelX.
\end{corollary}
\begin{exercise}\label{exer_with_label}
Exercise with label.
\end{exercise}
\begin{exercise}\labelx{exer_with_labelx}
Exercise with labelX.
\end{exercise}
\begin{question}\label{quest_with_label}
Test
\end{question}
\begin{question}\labelx{quest_with_labelx}
Test
\end{question}
Let's cite these, now.
With label, nothing works right: \Cref{prop_with_label}, \Cref{cor_with_label}, \Cref{exer_with_label}, \Cref{quest_with_label}.
With labelX, some things work: \Cref{prop_with_labelx}, \Cref{cor_with_labelx}.
But some things still don't: \Cref{exer_with_labelx}, \Cref{quest_with_labelx}.
\end{document}
答案1
Svmono 死了,一片狼藉。一片死寂。或者一具狼藉的尸体;随便你怎么称呼。我也不知道该如何引用问题。
经过这个简短但令人愉快的投诉(由于我与以下问题进行了斗争,svmono+enumitem:如何阻止注释头和后续列表之间的分页符和使用 svmono,如何在定理头部和定理内容之间引入更多水平空间,而不会偶尔引入垂直空间?),让我告诉你,我仍然知道如何参考练习,以下是我所做的:
\documentclass[envcountsame]{svmono}% using v5.10
\pagestyle{empty}
\usepackage{graphicx}
\usepackage[capitalise]{cleveref}
\crefname{exercise}{Exercise}{Exercise}
\Crefname{exercise}{Exercise}{Exercise}
\Crefformat{exercise}{Exercise #2#1#3}
\crefformat{exercise}{Exercise #2#1#3}
\begin{document}
\begin{exercise}\label[exercise]{exer_with_option}
Exercise body.
\end{exercise}
\begin{question}{Question head.}
Question body.
\end{question}
\Cref{exer_with_option}, \cref{exer_with_option}.
\end{document}
Pdflatex
这使得
您可以尝试\label[environmentName]{labelName}
多种环境(例如,带有备注和定义)。
至于question
s,我不知道如何引用它们,因为它们没有为 svmono v5.10 编号(在我的测试中)。