默认情况下,该glossaries
包会为每次出现的条目创建一个指向词汇表的链接(例如,每次我使用\gls{entry}
)。链接以可视化形式呈现(例如,使用hyperref
颜色链接)。如果多次使用一个条目,这会变得非常混乱。
我希望只对条目的第一个出现位置进行超链接。这可能吗?
答案1
\glsentrytext{entry}
虽然您可以使用、或\glsentryname{entry}
、或\gls*{entry}
代替来手动放弃超链接\gls{entry}
,但这很麻烦,因为人们必须自己追踪首次使用的位置。
一种自动的方法是修补\@gls@
:
\documentclass[a4paper,10pt]{article}
\usepackage[colorlinks]{hyperref}
\usepackage{glossaries}
\usepackage{etoolbox}
\makeatletter
%% patch first occurence of "\@gls@link[#1]{#2}{\@glo@text}", as this is the one for \glsused{#2}
\patchcmd{\@gls@}
{\@gls@link[#1]{#2}{\@glo@text}}
{\@gls@link[#1,hyper=false]{#2}{\@glo@text}}
{}{}
\makeatother
\makeglossaries
\newglossaryentry{pear}{
name=pear,
description={an oddly shaped fruit}
}
\begin{document}
\gls{pear}, \gls{pear}, \gls{pear}, \gls{pear}.
\printglossaries
\end{document}
如果您还使用大写变体\Gls
和\GLS
,则相应的内部宏\@Gls@
也\@GLS@
需要类似的修补:
\patchcmd{\@Gls@}
{\@gls@link[#1]{#2}}
{\@gls@link[#1,hyper=false]{#2}}
{}{}
\patchcmd{\@GLS@}
{\@gls@link[#1]{#2}{\MakeUppercase{\@glo@text}}}
{\@gls@link[#1,hyper=false]{#2}{\MakeUppercase{\@glo@text}}}
{}{}
答案2
有一个钩子\glslinkcheckfirsthyperhook
被像这样的命令使用\gls
。它的最初目的是协助相反的事情(第一次使用时不要超链接),但它也可以在这种情况下使用:
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage{glossaries}
\makeglossaries
\renewcommand*{\glslinkcheckfirsthyperhook}{%
\ifglsused{\glslabel}%
{%
\setkeys{glslink}{hyper=false}%
}%
{}%
}
\newglossaryentry{sample}{name={sample},description={an example}}
\newglossaryentry{sample2}{name={another sample},description={another example}}
\begin{document}
First use: \gls{sample}, \gls{sample2}.
Next use: \gls{sample}, \gls{sample2}.
\printglossaries
\end{document}
得出的结果为:
编辑:这适用于所有\gls
类似命令查询第一个使用标志(例如\Gls
和\glsdisp
)。它不适用于\glstext
类似命令不查询首次使用标志(例如\glstext
和\glslink
)。