使用 \GlsXtrSetAltModifier 排版词汇表链接文本?

使用 \GlsXtrSetAltModifier 排版词汇表链接文本?

我想强调词汇表中某些术语的使用,同时我也想强调索引中的页码。

从较早前问题,我发现可以使用format选项自定义页码的字体。结合包\GlsXtrSetAltModifier中的命令glossaries-extra,我成功实现了以下功能:

\documentclass{article}

\usepackage{glossaries}
\usepackage{glossaries-extra}
\makeglossaries

\newcommand{\emphPageNumber}[1]{{\itshape\glshypernumber{#1}}}
\GlsXtrSetAltModifier{!}{format=emphPageNumber}

\newglossaryentry{term}{name={term}, description=\nopostdesc}

\begin{document}
Emphasized use of \gls!{term}, normal use of \gls{term}.

\printglossary{}

\end{document}

在此处输入图片描述

但是,我仍然需要手动修改条目本身的样式(例如\emph{\gls!{term}}。有什么简单的方法可以实现这一点,只需使用\gls!就可以自动为我完成吗?

答案1

您可以利用\glslinkpostsetkeys钩子,它在设置键(在 的第一个可选参数中提供\gls\glslink等等)后调用。format键将 的定义设置\@glsnumberformat为提供的格式,因此可以重新定义以检查该命令。由于它是一个内部命令,因此如果将代码添加到文件(而不是类或包)中\glslinkpostsetkeys,则需要\makeatletter/ 。\makeatother.tex

命令可用于检查是否为。输入文本根据格式化,默认情况etoolbox下只执行其参数,但可以在此处进行更改以使用适当的格式化命令:\ifdefstring\@glsnumberformatemphPageNumber\glstextformat

\documentclass{article}

\usepackage{glossaries}
\usepackage{glossaries-extra}
\makeglossaries

\newcommand{\emphPageNumber}[1]{{\itshape\glshypernumber{#1}}}
\GlsXtrSetAltModifier{!}{format=emphPageNumber}

\makeatletter
\renewcommand*{\glslinkpostsetkeys}{%
 \ifdefstring\@glsnumberformat{emphPageNumber}%
 {\let\glstextformat\textit}%
 {\let\glstextformat\@firstofone}%
}
\makeatother

\newglossaryentry{term}{name={term}, description=\nopostdesc}

\begin{document}
Emphasized use of \gls!{term}, normal use of \gls{term}.

\printglossary

\end{document}

顺便说一句,\hyperit该包所提供的glossaries功能与您的自定义功能几乎相同\emphPageNumber

在构建过程中使用makeglossariesPerl 脚本,上述 MWE 生成:

文档图片。位置列表仅包含强调的 1

直接调用makeindex或者使用makeglossaries-liteLua 脚本或automake包选项会产生:

文档图片。位置列表包含强调 1 和直立 1

makeglossariesPerl 脚本检测到makeindex“同一键下同一页面的多个封装”警告并尝试纠正该问题。)

如果hyperref未使用,则如果您始终希望文本格式反映位置格式,则有一种更简单的方法:

\documentclass{article}

\usepackage{glossaries}
\usepackage{glossaries-extra}
\makeglossaries

\newcommand{\emphPageNumber}[1]{{\itshape\glshypernumber{#1}}}
\GlsXtrSetAltModifier{!}{format=emphPageNumber}

\makeatletter
\renewcommand{\glstextformat}{\csname \@glsnumberformat\endcsname}
\makeatother

\newglossaryentry{term}{name={term}, description=\nopostdesc}

\begin{document}
Emphasized use of \gls!{term}, normal use of \gls{term}.
Bold use \gls[format=hyperbf]{term}

\printglossary

\end{document}

这不能与一起使用,hyperref因为它将尝试用从文本形成超链接\glshypernumber,而该文本需要一个位置作为参数。

相关内容