cleveref 无法在 sv 类中与 envcountsame 选项协同工作

cleveref 无法在 sv 类中与 envcountsame 选项协同工作

我之前发过一次关于这个问题的帖子,这里,但想开一个包含更多信息和 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}多种环境(例如,带有备注和定义)。

至于questions,我不知道如何引用它们,因为它们没有为 svmono v5.10 编号(在我的测试中)。

相关内容