为什么 \cref{} 不打印多个标签的名称?

为什么 \cref{} 不打印多个标签的名称?

我正在尝试这个:

\documentclass{article}
\usepackage{cleveref}
\begin{document}
\newcounter{rule}
\newcommand\printrule[1]{R#1}
\newcommand\orule[1]{\refstepcounter{rule}\label{#1}\printrule{\therule}: }
\crefname{rule}{Rule}{Rules}
\crefformat{rule}{#2\protect \printrule{#1}#3}
\orule{foo} Foo \\
\orule{bar} Bar \\
See \cref{foo}. \\
See \cref{foo,bar}.
\end{document}

我越来越:

R1: Foo 
R2: Bar
See R1.
See ?? 1?? 2.

哪里错了?ChatGPT 建议\crefformat{rule}将 替换为\crefformat{Rule},但这没有帮助 :)

答案1

我的主要建议是将前五行代码移到\begin{document}序言中。

此外,如果您希望规则的交叉引用自动以字母“R”开头,我建议您\therule相应地修改宏。有了这个更改,您在加载cleveref包后所需要做的就是提供合适的\crefname\Crefname指令。

在此处输入图片描述

\documentclass{article}

\newcounter{rule}
\renewcommand\therule{R\arabic{rule}}
\newcommand\orule[1]{\refstepcounter{rule}\label{#1}\therule:}

\usepackage{cleveref}
\crefname{rule}{rule}{rules}
\Crefname{rule}{Rule}{Rules}

\begin{document}
\orule{foo} Foo.

\orule{bar} Bar.

See \labelcref{foo}. \Cref{bar} expresses\dots\ See \cref{foo,bar}.
\end{document}

相关内容