我正在尝试这个:
\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}