glossaries
我经常在章节标题中使用包和定义的标题。
一般来说,我将标题中每个单词的首字母大写,但如果首字母缩略词第一次出现,则会以全长打印,但我只能通过命令将首字母大写。
\documentclass{scrartcl}
\usepackage[acronym]{glossaries}
\newacronym{test}{TTSbCiH}{this text should be capitalized in headings}
\makeglossaries
\begin{document}
\section{\Gls{test}}
\Glsfirst{test}
\glsfirst{test}
\end{document}
看起来像
但是,它应该是“1 这段文字在标题中应该大写”(更好的是“1 这段文字在标题中应该大写”)
我怎样才能实现这个目标?
答案1
我会通过添加一个宏来修补此设置\Glsheading
,该宏可检索长首字母缩略词描述的大写版本。因此,您可以这样写
\section{\Glsheading{test}}
在glossaries
包中,这些事情是通过令牌寄存器完成的。对于您的目的,将相关信息存储到宏中就足够了。因此,的定义\Glsheading
可能看起来像
\newcommand{\Glsheading}[1]{\@nameuse{gls@cap@head@#1}}
现在,您需要包含一个小模块来\newacronym
存储控制序列gls@cap@head@#1
,或者在您的示例中\gls@cap@head@test
(=>“此文本应在标题中大写(TTSbCiH)”):
\LetLtxMacro{\gls@newacronym}{\newacronym}
\renewcommand{\newacronym}[4][]{%
\gls@newacronym[#1]{#2}{#3}{#4}
\@namedef{gls@cap@head@#2}{\capitalize{#4} (#3)}}
\newcommand{\Glsheading}[1]{\@nameuse{gls@cap@head@#1}}
注意:此定义使用letltxmacro
包和辅助宏\capitalize
(在完整代码中给出)
\documentclass{scrartcl}
\usepackage[acronym]{glossaries}
%<begin_patch>
\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro{\gls@newacronym}{\newacronym}
\renewcommand{\newacronym}[4][]{%
\gls@newacronym[#1]{#2}{#3}{#4}
\@namedef{gls@cap@head@#2}{\capitalize{#4} (#3)}}
\newcommand{\Glsheading}[1]{\@nameuse{gls@cap@head@#1}}
\makeatother
\newcommand{\capitalize}[1]{%
\ignorespaces
\expandafter\expandafter\expandafter
\xcapitalize\expandafter\space #1 \relax}
\def\xcapitalize#1 #2{%
#1%
\ifx\relax#2\else
\space\MakeUppercase{#2}%
\expandafter\xcapitalize
\fi}
%<end_patch>
\newacronym{test}{TTSbCiH}{this text should be capitalized in headings}
\makeglossaries
\begin{document}
\section{\Glsheading{test}}
\Glsfirst{test}\\
\glsfirst{test}
\printglossaries
\end{document}