通过结合使用varioref
、和包hyperref
,我们可以获得复杂的交叉引用(技术上为“标签”的“引用”),并带有超链接。cleverref
nameref
例如,从如下的最小工作示例(MWE)...
\documentclass{article}
\usepackage{varioref}
\usepackage{hyperref}
\usepackage[nameinlink]{cleveref}
\usepackage{nameref}
\newcommand{\smartref}[1]{\nameref{#1} \vref{#1}}
\begin{document}
\pagebreak
\section{The Start}\label{theStartLabel}
\pagebreak
\section{Section Two}\label{sectionTwoLabel}
\pagebreak
\section{Varioref with hyperref and
cleverref}\label{variorefWithCleverfAndHyperrefLabel}
Varioref with hyperref and
cleverref:
See \vref{theStartLabel}\\
See \vref{sectionTwoLabel}\\
See \vref{variorefWithCleverfAndHyperrefLabel}\\
See \vref{theEndLabel}\\
Custom command using varioref, hyperref, cleverref and nameref:
See \smartref{theEndLabel}
\pagebreak
\section{The end}\label{theEndLabel}
\end{document}
...我们得到...
我们如何改变 MWE 以获取命令varioref
和\vref
自定义命令\smartref
来将超链接扩展到整个参考。
例如所以我们得到...
...
看下一页第 4 节
...
看下一页第 4 节结束
...
?
答案1
一个解决方案是使用包\hyperref[label]{text}
中的用户宏hyperref
。
正在解决的 MWE ...
\documentclass{article}
\usepackage{varioref}
\usepackage{hyperref}
\usepackage[nameinlink]{cleveref}
\usepackage{nameref}
% Store \vref in a variable to enable redefining itself.
% Redefine \vref so the hyperlink is extended to the entire
% reference.
\let\vrefpointer\vref
\renewcommand{\vref}[1]{%
\hyperref[#1]{\vrefpointer{#1}}%
}
% A custom command \smartref with the hyperlink extended to
% the entire reference.
% Plus some grammatic sugar (quote marks and comma)
\newcommand{\smartref}[1]{%
\hyperref[#1]{\cref{#1}, ``\nameref{#1}", \vpageref{#1}}%
}
\begin{document}
\pagebreak
\section{The Start}\label{theStartLabel}
\pagebreak
\section{Section Two}\label{sectionTwoLabel}
\pagebreak
\section{Varioref with hyperref and
cleverref}\label{variorefWithCleverfAndHyperrefLabel}
Varioref with hyperref and
cleverref:
See \vref{theStartLabel}\\
See \vref{sectionTwoLabel}\\
See \vref{variorefWithCleverfAndHyperrefLabel}\\
See (\smartref{theEndLabel})\\
Custom command using varioref, hyperref, cleverref and
nameref:
See \smartref{theEndLabel}\\
\pagebreak
\section{The end}\label{theEndLabel}
\end{document}
我从中找到了此解决方案https://en.wikibooks.org/wiki/LaTeX/Hyperlinks#.5Chyperref而不是软件包文档。可能存在更优雅的解决方案(例如,公开更多可能的自定义),但这个可行。
Update01:编辑我的自定义 \smartref 命令以包含尾随注释字符(%),以防止恶意空格括住命令输出。
更新 02:编辑了解决方案 MWE,使其具有括号输出,See (\smartref{theEndLabel})\\
以便清楚地表明我的自定义 \smartref 命令的端点处没有恶意空格。更改了输出图像以反映。
Update03:将行尾注释字符%
改为 \vref renewcommand。