![\nameref 仅将引用显示为红色矩形,其中没有名称](https://linux22.com/image/246004/%5Cnameref%20%E4%BB%85%E5%B0%86%E5%BC%95%E7%94%A8%E6%98%BE%E7%A4%BA%E4%B8%BA%E7%BA%A2%E8%89%B2%E7%9F%A9%E5%BD%A2%EF%BC%8C%E5%85%B6%E4%B8%AD%E6%B2%A1%E6%9C%89%E5%90%8D%E7%A7%B0.png)
我正在尝试使用\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
。因此,补丁会在宏中的适当位置恢复此定义。