Подавить гиперссылки на текущую страницу

Подавить гиперссылки на текущую страницу

Можно ли скрыть гиперссылки, указывающие на ту же страницу, что и гиперссылка?

В настоящее время я использую пакеты 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использует \ifnumequalfrom etoolboxдля проверки того, совпадают ли номер текущей страницы и номер страницы, на которую указывает ссылка (используя refcountдля получения номеров страниц в виде чисел, а не строк).

Если они одинаковы, то используется несвязанная форма \ref*; в противном случае используется \ref. Это означает, что ссылка на первой странице не кликабельна, а на второй странице — да.

Вам нужно будет настроить соответствующие макросы для любых других справочных команд, которые вы используете, и я бы предложил использовать другие имена. ( \mypageref, \myhref, и т. д.). Попытка перезаписать имена макросов из hyperrefделает его несчастным пакетом.

Я уверен, что вы могли бы аналогичным образом адаптировать это решение для работы с cleverref.

Связанный контент