章节标题中大写的长缩写形式

章节标题中大写的长缩写形式

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}

相关内容