我想\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}