我想强调词汇表中某些术语的使用,同时我也想强调索引中的页码。
从较早前问题,我发现可以使用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
\@glsnumberformat
emphPageNumber
\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
。
在构建过程中使用makeglossaries
Perl 脚本,上述 MWE 生成:
直接调用makeindex
或者使用makeglossaries-lite
Lua 脚本或automake
包选项会产生:
(makeglossaries
Perl 脚本检测到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
,而该文本需要一个位置作为参数。