
acronym パッケージでは、星印の付いたコマンド \ac* と \acp* は、オプション "printonlyused" で頭字語のリストから頭字語を省略します。問題は、このように挿入された頭字語が、pdflatex で作成された PDF では依然としてハイパー参照リンクであることです。星印の付いたコマンドで挿入され、頭字語テーブルに含まれていない場合は、リンクフリーの頭字語にしたいのですが、どうすればよいですか?
以下の例では、pdflatex は 3 つのページを作成します。ダミー ページ 1、ページ 2 の頭字語テーブル、およびページ 3 で使用される 2 つの頭字語です。最初の頭字語は、頭字語テーブルに正しくリンクしています。ただし、星印の付いたコマンドもハイパー参照です。私の試行では、星印の付いたコマンドはすべてページ 1 へのハイパー参照リンクを生成しましたが、これは頭字語とはまったく関係ありません。
\documentclass{article}
\PassOptionsToPackage{printonlyused}{acronym}
\usepackage{acronym}
\usepackage{hyperref}
\begin{document}
the initial page
\newpage
the acronym page
\begin{acronym}
\acro{AAA}{Aaa Abb Acc}
\acro{TMN}{This Means Nothing}
\end{acronym}
\newpage
\ac{AAA}
\ac*{TMN}
\end{document}
答え1
そのコマンドの星印付きバージョンではacronym
を呼び出します\AC@starredtrue
。これを使用して を再定義し\AC@hyperlink
、星印なしバージョンが使用される場合にのみハイパーリンクを生成することができます。 がない場合、 はhyperref
\AC@hyperlink
と基本的に同じであり\@secondoftwo
、 がある場合hyperref
、 はドキュメントの開始時に\let
なります\hyperlink
。つまり、再定義は フックを使用して行う必要があります\AtBeginDocument
。
次の定義により、星付きバージョンと星なしバージョンの両方で\AC@hyperlink
使用できるようになります。\@secondoftwo
\hyperlink
\documentclass{article}
\usepackage[printonlyused]{acronym}
\usepackage{hyperref}
\makeatletter
\AtBeginDocument{%
\renewcommand*\AC@hyperlink{%
\ifAC@starred
\expandafter\@secondoftwo
\else
\expandafter\hyperlink
\fi
}%
}
\makeatother
\begin{document}
the initial page
\newpage
the acronym page
\begin{acronym}
\acro{AAA}{Aaa Abb Acc}
\acro{TMN}{This Means Nothing}
\end{acronym}
\newpage
\ac{AAA}
\ac*{TMN}
\end{document}