頭字語の星印付きコマンドのハイパーリファレンスを削除する

頭字語の星印付きコマンドのハイパーリファレンスを削除する

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}

ここに画像の説明を入力してください

関連情報