\nameref 仅将引用显示为红色矩形,其中没有名称

\nameref 仅将引用显示为红色矩形,其中没有名称

我正在尝试使用\usepackage{hyperref}在文本中按名称引用某个部分。要引用的部分是

\section{whatever}\label{sec:marker}

然而,当我在文本中

\nameref{sec:marker}

我只看到一个狭窄的红色矩形,其中没有文本(我期望那里出现“whatever”文本)。我还能做些什么来解决这个问题吗?

以下是我所遇到的问题的 MWE:

\documentclass[onecolumn,twoside]{revtex4}
%\usepackage{float}
%\usepackage{graphicx}
%\usepackage{sansmath}
%\usepackage{amsmath}
%\usepackage{tikz}
%\pdfpagewidth 8.32in
%\pdfpageheight 11in
%\setlength{\topmargin}{-20mm}
%\setlength{\columnsep}{10mm}
%\setlength{\oddsidemargin}{-2mm}
%\setlength{\evensidemargin}{-2mm}
%\setlength{\textwidth}{170mm}
%\usepackage{anttor}
%\bibpunct{(}{)}{;}{s}{,}{,}
%\usepackage{fancyhdr}
%\usepackage{longtable}
%\usepackage{pgothic}
%\usepackage[T1]{fontenc}
%\usepackage{eufrak}
%\usepackage{oldgerm}
%\usepackage[normalem]{ulem}
%\usepackage{cancel}
%\usepackage{wasysym}
\usepackage{hyperref}

\begin{document}

\section*{FirstSection}

In \nameref{sec:marker} it is stated that ...

\section*{SecondSection} \label{sec:marker}

\end{document}

答案1

是的,revtex4耍花招hyperref也就是重新定义正在利用的、导致“丢失”的revtex4部分宏。hyperref\nameref

要解决此问题,您需要xpatch包裹并修补正确的分段宏:\@ssect@ltx\@sect@ltx,每个宏的调用取决于您是否使用分段命令的星号变体(或不使用)。

这是一个最小的工作示例:

在此处输入图片描述

\documentclass{revtex4}% http://ctan.org/pkg/revtex4
\usepackage{xpatch}% http://ctan.org/pkg/xpatch
\makeatletter
\xpatchcmd{\@ssect@ltx}{\@xsect}{\protected@edef\@currentlabelname{#8}\@xsect}{}{}% Patch \<section>*
\xpatchcmd{\@sect@ltx}{\@xsect}{\protected@edef\@currentlabelname{#8}\@xsect}{}{}% Patch \<section>
\makeatother
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\begin{document}
\section{FirstSection} \label{sec:marker1}
In \nameref{sec:marker2} it is stated that \ldots

\section*{SecondSection} \label{sec:marker2}
You can also see in \nameref{sec:marker1} that \ldots
\end{document}

\nameref依赖于包含部分单元中使用的标题的宏\@currentlabelname。此标题存储在#8对 或 的调用的参数\@ssect@ltx\@sect@ltx。因此,补丁会在宏中的适当位置恢复此定义。

相关内容