![revtex4-2 类和 nameref 包冲突](https://linux22.com/image/471242/revtex4-2%20%E7%B1%BB%E5%92%8C%20nameref%20%E5%8C%85%E5%86%B2%E7%AA%81.png)
\documentclass{revtex4-2}
\usepackage{hyperref}
\begin{document}
Hello World
\end{document}
产生以下警告:
Package nameref Warning: The definition of \label has changed! Check your packages! Replacing it with the kernel definition on input line 145.
有人能向我解释一下问题是什么吗,以及如何让 revtex 与 hyperref 一起工作而不出现此警告?也许它已经众所周知,那么只要给我指出一个解决方案就可以了,但我找不到。
答案1
revtex 重新定义了该\label
命令。在当前的 LaTeX 内核中,\label
定义如下:
\def\label#1{\@bsphack
\begingroup
\UseHookWithArguments{label}{1}{#1}%
\protected@write\@auxout{}%
{\string\newlabel{#1}{{\@currentlabel}{\thepage}%
{\@currentlabelname}{\@currentHref}{\@kernel@reserved@label@data}}}%
\endgroup
\@esphack}
经过 revtex 之后的定义是:
\def\label#1{%
\@bsphack
\protected@write\@auxout{}{%
\string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}%
}%
\@esphack
}%
这意味着缺少钩子,标签不存储\@currentlabelname
。(和 hyperref 也是)需要新的增强,因此检查定义,如果检测到错误,则发出警告并恢复内核版本。要消除警告,您应该尝试\@currentHref
说服revtex 维护者删除他们的重新定义(这在当前的 LaTeX 中是完全不需要的)。nameref
\label
label