revtex4-2 类和 nameref 包冲突

revtex4-2 类和 nameref 包冲突
\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\labellabel

相关内容