根据 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}