Cleveref,大写和复数

Cleveref,大写和复数

最近以为我的问题已经解决了,但它更复杂。请考虑以下示例:

\documentclass{article}

\usepackage{ntheorem}
\usepackage[capitalize]{cleveref}

\newtheorem{conjecture}{Conjecture}
\newtheorem{solution}{Solution}

\crefname{conjecture}{conjecture}{conjectures}
\crefname{solution}{solution}{solutions}

\begin{document}

\begin{conjecture} \label{c1} Something happened.
\end{conjecture}

\begin{conjecture} \label{c2} Something else also happened.
\end{conjecture}

\begin{solution} \label{s} A lot of things happened.
\end{solution}

\Cref{c1,c2,s} are both \namecref{s} and \namecref{c1}.

\end{document}

输出如下:

猜想1和2以及解决方案1既是解决方案又是猜想。

我希望输出是:

猜想1和2以及解决方案1既是解决方案又是猜想。

我该如何实现这个目标?换句话说,我想要一切在具有多个引用的语句中大写\Cref。事实上,如果我可以用语句来实现这一点\cref,我甚至会很高兴,因为我想要一切当它有数字时要大写,但如示例中所示,我不希望\namecref输出大写。


思考

我之前的问题的解决方案是capitalise选项,但这在这里不起作用,因为它依赖于 cleveref 从 ntheorem 定义中自动定义名称,如果我们这样做,复数形式就conjecture不会被定义。 cleveref 手册指出:

因此,如果需要复数形式,cleveref 将产生“\reference type undefined”警告,并将需要复数形式的交叉引用类型设置为:

??\ref{标签} ...

在这种情况下,您必须自己提供明确的 \crefname 或 \Crefname 定义,以定义复数形式和单数形式。

如果我这样做,它将capitalise不再起作用,因为:

[...] 如果您明确定义 \cref 变体不大写,cleveref 仍将遵守您的定义。换句话说,您有责任在自己的格式定义中正确定义大写。

capitalise也许我想要的是不可能的,但对我来说,这个选项如此无用似乎很奇怪。

答案1

您可以使用\lcnamecref

\documentclass{article}

\usepackage{ntheorem}
\usepackage[capitalize]{cleveref}

\newtheorem{conjecture}{Conjecture}
\newtheorem{solution}{Solution}

\Crefname{conjecture}{Conjecture}{Conjectures}
\Crefname{solution}{Solution}{Solutions}

\begin{document}

\begin{conjecture} \label{c1} Something happened.
\end{conjecture}

\begin{conjecture} \label{c2} Something else also happened.
\end{conjecture}

\begin{solution} \label{s} A lot of things happened.
\end{solution}

\cref{c1,c2,s} are both \lcnamecref{s} and \lcnamecref{c1}.

\end{document}

在此处输入图片描述

相关内容