有没有办法禁用超链接中的嵌套?以下是示例:
\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}