如果与 amsthm 一起使用,cleveref 不会使用正确的大写名称?

如果与 amsthm 一起使用,cleveref 不会使用正确的大写名称?

如果和都已定义cleveref,则在引用 newtheorem 时,该包似乎无法正确大写。还是只有我一个人这样?这是我的 MWE:\crefname\Crefname

 \documentclass[a4paper,10pt]{article}
 \usepackage{amsthm}
 \newtheorem{theorem}{Theorem}
 \usepackage[capitalise]{cleveref}
 \crefname{theorem}{theoLowercase}{theoLowercaseS}
 \Crefname{theorem}{TheoUpperCase}{TheoUppercasesS}
 \begin{document}
 \begin{theorem}\label{theo:test}
    Test theorem
 \end{theorem}
 This is a reference to \cref{theo:test}.

 \begin{figure} Test Figure
    \caption{Test figure caption}
    \label{fig:test}
 \end{figure}
 This is a reference to \cref{fig:test}.
 \end{document}

\crefname在我的计算机上,如果和都\Crefname定义了,则对该定理的引用使用小写版本,即:

这是对 theoLowercase 1 的引用。

如果我注释掉\crefname第 5 行的定义,我会得到预期的结果:

这是对 TheoUpperCase 1 的引用。

不过,在这两种情况下,对图形的引用都正确地大写。

我疯了吗?

答案1

似乎是“设计使然”。引用cleveref手册第 6.1 节:

[使用该capitalise选项,] [a] 所有默认的交叉引用格式都将 [...] 将首字母大写,自动生成的\cref变体也将如此 [...](但是,如果您明确定义\cref变体不大写,cleveref 仍将尊重您的定义。换句话说,您有责任在自己的格式定义中正确定义大写。)

如果您希望自定义定义响应该capitalise选项,请使用内部\if@cref@capitalise条件:

\documentclass[a4paper,10pt]{article}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\usepackage[capitalise]{cleveref}
\makeatletter
\if@cref@capitalise
\crefname{theorem}{TheoUpperCase}{TheoUppercasesS}
\else
\crefname{theorem}{theoLowercase}{theoLowercaseS}
\fi
\makeatother
\Crefname{theorem}{TheoUpperCase}{TheoUppercasesS}
\begin{document}
\begin{theorem}\label{theo:test}
   Test theorem
\end{theorem}
This is a reference to \cref{theo:test}.

\begin{figure} Test Figure
   \caption{Test figure caption}
   \label{fig:test}
\end{figure}
This is a reference to \cref{fig:test}.
\end{document}

答案2

capitalise如果您希望\cref在常见情况下将引用大写,则可以使用该选项。

如果您定义自己的命令(在您的情况下\crefname{theorem}{theoLowercase}{theoLowercaseS}),当您使用\cref引用时theorem,包cleveref会“尊重”您的定义(不大写)。

您会注意到,如果删除您的两个定义,它就会起作用:

\documentclass[a4paper,10pt]{article}
 \usepackage{amsthm}
 \newtheorem{theorem}{Theorem}
 \usepackage[capitalise]{cleveref}
 \begin{document}
 \begin{theorem}\label{theo:test}
    Test theorem
 \end{theorem}
 This is a reference to \cref{theo:test} and \Cref{theo:test}.

 \begin{figure} Test Figure
    \caption{Test figure caption}
    \label{fig:test}
 \end{figure}
 This is a reference to \cref{fig:test} and \Cref{fig:test}.
 \end{document} 

在此处输入图片描述

相关内容