Можно ли скрыть гиперссылки, указывающие на ту же страницу, что и гиперссылка?
В настоящее время я использую пакеты hyperref и cleveref для гиперссылок, но не нахожу возможности отключить гиперссылки, указывающие на текущую страницу (без использования опции \ref*). Возможно ли это с этими или любыми другими пакетами, или у кого-нибудь есть другое решение?
решение1
Вот одно из решений с использованиемetoolbox
иrefcount
пакеты:
\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}
Команда \myref
использует \ifnumequal
from etoolbox
для проверки того, совпадают ли номер текущей страницы и номер страницы, на которую указывает ссылка (используя refcount
для получения номеров страниц в виде чисел, а не строк).
Если они одинаковы, то используется несвязанная форма \ref*
; в противном случае используется \ref
. Это означает, что ссылка на первой странице не кликабельна, а на второй странице — да.
Вам нужно будет настроить соответствующие макросы для любых других справочных команд, которые вы используете, и я бы предложил использовать другие имена. ( \mypageref
, \myhref
, и т. д.). Попытка перезаписать имена макросов из hyperref
делает его несчастным пакетом.
Я уверен, что вы могли бы аналогичным образом адаптировать это решение для работы с cleverref
.