让 varioref 输出 \nameref 而不是 \ref

让 varioref 输出 \nameref 而不是 \ref

根据 varioref 包文档:

下面的实现仅在引用和位于同一页时\vref生成。如果标签和引用相差一页,它还会生成字符串“在对页上”、“在前一页上”或“在下一页上”之一,如果差异较大,它将同时生成和。当标签和引用都位于双页时,使用单词“对页”。但是,如果使用特殊的页码方案而不是通常的阿拉伯数字(例如),那么将不会区分一页或多页。\ref\label\ref\pageref\pagenumbering{roman}

我想使用\vref,但让它输出 a\nameref而不是 a \ref。我认为 varioref 没有提供此选项;是否可以用简单的方法实现这一点?

答案1

\xref我通过定义如下新命令实现了我需要的功能:

\newcommand{\xref}[1]{\nameref{#1} \vpageref[\unskip]{#1}}

如果引用和不在同一页面上,则会输出一个\nameref,另外还会输出一个类似于“在第 XX 页上”的字符串。\label

答案2

您可以修补内部\vr@f(我相信这应该是相当安全的):

\documentclass{article}
\usepackage{varioref,nameref,etoolbox}

\makeatletter
% replace \ref with \nameref,
% \patchcmd is provided by the etoolbox package:
\patchcmd\vr@f{\ref}{\nameref}{}{}
\makeatother

\begin{document}

\section{Foo bar baz}\label{sec:foo}

\newpage

See section \vref{sec:foo}

\end{document}

相关内容