revtex4-2:标签类型“”的 cref 参考格式未定义

revtex4-2:标签类型“”的 cref 参考格式未定义

使用 revtex4-2 时,我无法让 cleveref 识别引用。编译时,所有引用都会发出警告“LaTeX 警告:输入行中标签类型 `' 的 cref 引用格式未定义……”,并且无法正确排版。我见过标签类型“未定义”的 cref 参考格式,以及本网站上关于 cleveref 和 appendix 部分的一些问题,但我的问题似乎无关,因为切换到 revtex4-1 可以解决我的问题。这是一个 MWE

\documentclass[aip]{revtex4-1}

\usepackage{cleveref}

\begin{document}

\section{First section}
\label{sec:first}

Hello

\section{Second section}

Hello \cref{sec:first}

\end{document}

正如预期的那样,我必须运行 pdflatex 两次才能正确获取引用,但一旦我这样做,一切都会正确呈现。但是,如果我将 documentclass 替换为revtex4-2,则“第二部分”的内容将显示“Hello ??”。我在 Mac OS 上运行,并且我已使用 Tex Live Utility 更新了所有软件包,因此我认为这不是版本问题,而是一些如何revtex4-2重新定义一些内部 TeX 宏的问题。不幸的是,我了解的还不够多,无法深入了解那里的细节。

编辑 对于此问题的未来查看者来说,还有一条额外信息可能会有用:将该hyperref选项添加到 documentclass 选项列表中才不是解决这个问题。但是,避免使用此选项,而是明确写入\usepackage{hyperref}(before \usepackage{cleveref}) 可以解决问题。

答案1

虽然不是完整的解决方案,但希望是一个令人满意的解决方法:hyperref在 之前加载cleveref。(如果您不想要彩色超链接,请hyperref使用选项colorlinks和加载allcolors=black。)

我浏览了 的内容revtex4-2.cls。似乎有人试图更改 LaTeX\label宏的默认属性,可能是为了让 更轻松hyperref,它会自行对 进行进一步的修改\label。通过加载,可以完成进一步的修改,从而为自行对 进行额外的修改hyperref铺平道路。cleveref\label

总之,似乎正在发生的事情是,revtex4-2文档类已经改变了的属性,\label以至于cleveref无法再成功应用自己的进一步补丁;因此输出??。通过加载hyperref,的属性\label也会进一步改变,但令人高兴的是,它cleveref再次知道该做什么。(附言:如果hyperrefcleveref都已加载,众所周知cleveref必须加载 hyperref。正是这一点知识促使我调查加载是否hyperref可以为手头的问题提供解决方法......)

在此处输入图片描述

\documentclass[aip]{revtex4-2}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref} 

\begin{document}
\section{First section}\label{sec:first}
Hello.

\section{Second section} \label{sec:second}
Hello \cref{sec:first}.

Hello \crefrange{sec:first}{sec:second}.
\end{document}

相关内容