在首字母缩略词包中,带星号的命令 \ac* 和 \acp* 使用选项“printonlyused”从首字母缩略词列表中省略首字母缩略词。我的问题是,像这样插入的首字母缩略词在使用 pdflatex 创建的 PDF 中仍然是超链接。如果首字母缩略词与带星号的命令一起插入,因此不在首字母缩略词表中,我希望有无链接的首字母缩略词。我该怎么做?
在下面的示例中,pdflatex 创建了三个页面,一个虚拟页面 1、页面 2 上的首字母缩略词表和页面 3 上使用的两个首字母缩略词。第一个首字母缩略词正确链接到首字母缩略词表。但是,带星号的命令也是一个超链接。在我的试验中,所有带星号的命令都生成指向页面 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}