Ist es möglich, Hyperlinks zu unterdrücken, die auf dieselbe Seite wie der Hyperlink verweisen?
Ich verwende derzeit die Pakete hyperref und cleveref für die Hyperlinks, finde aber keine Option zum Deaktivieren von Hyperlinks, die auf die aktuelle Seite verweisen (ohne die Option \ref* zu verwenden). Ist dies mit diesen oder anderen Paketen möglich, oder hat jemand eine andere Lösung?
Antwort1
Hier ist eine Lösung mit demetoolbox
Undrefcount
Pakete:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{refcount}
\newcommand*{\myref}[1]{
\ifnumequal{\thepage}{\getpagerefnumber{#1}}
{\ref*{#1}}{\ref{#1}}
}
\begin{document}
\begin{figure}
\caption{An empty figure}
\label{fig:empty}
\end{figure}
This is a reference on the same page.~[\myref{fig:empty}]
\pagebreak
This is a reference on a different page.~[\myref{fig:empty}]
\end{document}
Der Befehl \myref
überprüft \ifnumequal
mithilfe von „from“ etoolbox
, ob die aktuelle Seitenzahl und die referenzierte Seitenzahl identisch sind (mithilfe von „from“, refcount
um diese Seitenzahlen als Zahlen und nicht als Zeichenfolgen abzurufen).
Wenn beide gleich sind, wird die unverlinkte Form verwendet \ref*
, andernfalls \ref
. Das bedeutet, dass der Verweis auf der ersten Seite nicht anklickbar ist, der auf der zweiten Seite jedoch schon.
Sie müssen entsprechende Makros für alle anderen Referenzbefehle einrichten, die Sie verwenden, und ich würde vorschlagen, andere Namen zu verwenden. ( \mypageref
, \myhref
usw.). Der Versuch, Makronamen zu überschreiben, hyperref
macht das Paket unglücklich.
Ich bin sicher, dass Sie diese Lösung entsprechend anpassen können, damit sie mit funktioniert cleverref
.