我最近以为我的问题已经解决了,但它更复杂。请考虑以下示例:
\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}