修改 \autoref 使其行为(某种程度上)类似于 \vref

修改 \autoref 使其行为(某种程度上)类似于 \vref

我想\autoref按以下方式修改命令:如果命令\autoref和标签在同一页面上,则其行为类似\autoref*(即无超链接)。否则,其行为正常。

谢谢,毗湿奴

答案1

这是一个快速而粗略的解决方案,虽然有效,但如果标签未定义,则会抛出奇怪的错误消息。如果您注释掉\pagebreak,则链接会消失。

\documentclass{article}

\usepackage{hyperref}

\makeatletter
\newcommand*{\aref}[1]{%
    \edef\cur@page{\thepage}%
    \edef\ref@page{\csname r@#1\endcsname}%
    \edef\ref@page{\expandafter\@secondoffive\ref@page}%
    \ifx\cur@page\ref@page
      \autoref*{#1}%
    \else
      \autoref{#1}%
    \fi }
\makeatother

\begin{document}

We have
\begin{equation}\label{myeq}
a=b.
\end{equation}

\pagebreak

In~\aref{myeq} \dots

\end{document}

答案2

与 Hendrik Vogt 的答案类似,但使用可扩展的\getpagerefnumber(无论如何refcount,它是hyperref捆绑包的一部分!)(但是,我使用了他的例子!)

我已经重新定义\autoref以提供该功能,而不是为此使用新的宏名。

\documentclass{article}

\usepackage{xparse}%
\usepackage{blindtext}
\usepackage{letltxmacro}
\usepackage{hyperref}

\makeatletter
\LetLtxMacro\hyperref@@autoref\autoref%

\AtBeginDocument{%
\RenewDocumentCommand{\autoref}{sm}{%
  \IfBooleanTF{#1}{%
    \hyperref@@autoref*{#2}%
  }{%
    \edef\@currentpage{\thepage}%
    \edef\pageoflabel{\getpagerefnumber{#2}}%
    \ifx\@currentpage\pageoflabel
    \hyperref@@autoref*{#2}%
    \else
    \hyperref@@autoref{#2}%
    \fi
  }%
}
}

\makeatother

\makeatother

\begin{document}

\section{First section}
We have in \autoref{myeq} some important stuff, but see \autoref{secondsection} too!
\begin{equation}\label{myeq}
a=b.
\end{equation} 



\clearpage

In~\autoref{myeq} \dots

\blindtext[5]


\section{Another section}\label{secondsection}

Some reference: \autoref{secondsection}

\blindtext[5]

\end{document}

在此处输入图片描述

相关内容