使用cleveref
、varioref
和hyperref
,我生成如下文本
请参阅下页的图 9。
此示例仅提供了一个小的超链接目标:仅“9”。但我已经向我的发布者承诺,文本“下一页”也将进行超链接。(细节并不重要;仅超链接“下一页”或“下一页”也可以。)
我深入研究了文档,看起来\autoref
(来自hyperref
)提供了更大的目标链接。我需要做什么才能从中获得类似的功能varioref
?我目前正在考虑重新定义,\vref
以便我可以获取标签并重新定义\reftextafter
和朋友作为超链接。这听起来可行吗?有没有更好的策略?
在以下 MWE 中,只有“图 1”中的“1”是链接目标。我希望“下一页”也能突出显示。
\documentclass{article}
\usepackage{varioref}
\usepackage{hyperref}
\usepackage{cleveref}
% what hacks to insert here?
\begin{document}
Please see \vref{example}.
\clearpage
\begin{figure}
This is it.
\caption{Example}
\label{example}
\end{figure}
\end{document}
答案1
如果没有 cleveref,它也可以工作,因为 hyperref 可以处理这个问题。但是 cleveref 又破坏了代码。你可以试试这个:
\documentclass{article}
\usepackage{varioref}
\usepackage{hyperref}
\usepackage{cleveref}
\makeatletter
\def\cref@vref#1#2{%
\leavevmode%
\begingroup%
\@crefstarredtrue
\let\T@pageref\@pagerefstar
\def\reftextcurrent{}%
\hyperref[#2]{%
\@cref{#1}{#2}\@setcref@space%
\cref@@vpageref{\reftextcurrent}[]{#2}}%
\endgroup}%
\makeatother
\begin{document}
Please see \vref{example}.
\clearpage
\begin{figure}
This is it.
\caption{Example}
\label{example}
\end{figure}
\end{document}
答案2
至少对于这个 MWE 来说,一个好的选择是删除cleveref
:
\documentclass{article}
% what hacks to insert here?
\usepackage[nospace]{varioref}
\usepackage[colorlinks]{hyperref}
%%%%% \usepackage{cleveref}
\labelformat{figure}{fig.~#1}
\begin{document}
Please see \vref{example}.
\clearpage
\begin{figure}
This is it.
\caption{Example}
\label{example}
\end{figure}
\end{document}
答案3
好吧,下面的代码并没有引起我的注意:
\makeatletter % add targets to \vref
\let\nr@orig@vref=\vref
\def\vref#1{%
\begingroup
\let\nr@fa\reftextfaceafter
\let\nr@a\reftextafter
\let\nr@b\reftextbefore
\let\nr@fb\reftextfacebefore
\def\reftextfaceafter{\hyperref[#1]{\nr@fa}}%
\def\reftextafter{\hyperref[#1]{\nr@a}}%
\def\reftextbefore{\hyperref[#1]{\nr@b}}%
\def\reftextfacebefore{\hyperref[#1]{\nr@fb}}%
\nr@orig@vref{#1}%
\endgroup
}
\makeatother