如何禁用超链接中的嵌套?

如何禁用超链接中的嵌套?

有没有办法禁用超链接中的嵌套?以下是示例:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}

\begin{document}

\tableofcontents
\newpage

\section{One}
\label{sec:one}
\newpage

\section{\nameref{sec:one} Two}

\end{document}

目录中第二部分的超引用将由两个超引用组成,一个用于指向第一部分的“一”,另一个用于指向第二部分的“一二”,其中“一”位于“一二”的链接之上。

但我希望只有一个链接,如果单击第二部分目录条目中的“One Two”的任意位置,该链接将指向第二部分。因此,我希望超链接不会嵌套在其他超链接中。

答案1

hyperref-bundle 和 nameref-package 的较新版本提供了所谓的“带星号”的引用命令变体,这些变体会生成文本短语,但不会生成超链接。

在您的\section-command 中,您可以使用 的带星号的变体\nameref

但也存在一些缺陷:

请注意,使用页面样式“标题”时,分段宏的参数也会进入页眉,而页眉内的所有内容在扩展后都会“大写”,其中包括分段宏参数中出现的标签名称 - 这种情况反过来可能会导致未定义的引用错误。

这个例子确实展示了这个问题:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}
\pagestyle{headings}

\begin{document}

\tableofcontents
\newpage

\section{One}
\label{sec:one}
\newpage

\section{\nameref*{sec:one} Two}

\end{document}

在本例中,您将永远无法摆脱有关未定义引用的消息。原因是,由于大写,在页眉中,它试图引用标签“SEC:ONE”,而它应该是“sec:one”。

您可能会想到使用名称仅由大写字母组成的引用标签。如果这样做,引用将起作用,但与页眉内的其他内容不同,引用的结果不会在页眉内以大写字母显示:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}
\pagestyle{headings}

\begin{document}

\tableofcontents
\newpage

\section{One}
\label{SEC:ONE}
\newpage

\section{\nameref*{SEC:ONE} Two}

\end{document}

因此我建议在sectioning-commands的参数中使用refcount-package的可扩展引用命令。

解决方案 1:

如果您根本不喜欢超链接:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}
\usepackage{refcount}

\makeatletter
\newcommand\questionmarks{\texorpdfstring{\nfss@text{\reset@font\bfseries??}}{??}}
\makeatother

\pagestyle{headings}

\begin{document}

\tableofcontents
\newpage

\section{One}
\label{sec:one}
\newpage

\section[\getrefbykeydefault{sec:one}{name}{\questionmarks} Two]%<- This goes to toc and pdf-bookmarks (and page-headers).
        {\nameref*{sec:one} Two} %<- This goes to main text.

\end{document}

解决方案 2:

如果您希望在正文中使用超链接:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}
\usepackage{refcount}

\makeatletter
\newcommand\questionmarks{\texorpdfstring{\nfss@text{\reset@font\bfseries??}}{??}}
\makeatother

\pagestyle{headings}

\begin{document}

\tableofcontents
\newpage

\section{One}
\label{sec:one}
\newpage

\section[\getrefbykeydefault{sec:one}{name}{\questionmarks} Two]%<- This goes to toc and pdf-bookmarks (and page-headers).
        {\texorpdfstring{\nameref}{\nameref*}{sec:one} Two} %<- This goes to main text.

\end{document}

答案2

使用带星号的 \nameref:

\documentclass{article}
\usepackage{hyperref}
\usepackage{nameref}

\begin{document}

\tableofcontents
\newpage

\section{One}
\label{sec:one}
\newpage

\section{\nameref*{sec:one} Two}

\end{document}

相关内容