ハイパーリンクと同じページを指すハイパーリンクを抑制することは可能ですか?
現在、ハイパーリンクには hyperref および cleveref パッケージを使用していますが、現在のページを指すハイパーリンクを無効にするオプションが見つかりません (\ref* オプションを使用せずに)。これらのパッケージ、または他のパッケージでこれが可能ですか、それとも他の解決策をお持ちの方はいますか?
答え1
\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}
このコマンドはfrom を\myref
使用して、現在のページ番号と参照先のページ番号が同じかどうかを確認します ( を使用して、これらのページ番号を文字列ではなく数値として取得します)。\ifnumequal
etoolbox
refcount
2 つが同じ場合は、リンクされていない形式 が使用され\ref*
、そうでない場合は が使用されます\ref
。つまり、最初のページの参照はクリックできませんが、2 番目のページはクリックできます。
使用する他の参照コマンドに対応するマクロを設定する必要があります。異なる名前を使用することをお勧めします。( \mypageref
、、\myhref
など)。 からマクロ名を上書きしようとすると、hyperref
パッケージが不適切になります。
このソリューションを同様に適応させて で動作させることができると確信していますcleverref
。