使用 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
再次知道该做什么。(附言:如果hyperref
和cleveref
都已加载,众所周知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}