我希望能够在最终输出缩写列表之前知道文档中使用的缩写数量。(原因是猜测列表是否适合一页,可能有更好的方法可以做到这一点,但为了论证的目的,我们忽略这一点)。
下面的代码几乎可以工作,但可能远非可行的解决方案...我将在下面解释它。
\documentclass{article}
\usepackage[nomain,acronym]{glossaries}
\makeglossaries
\newacronym{abc}{ABC}{a contrived acronym}\glsunset{abc}
\newacronym{foo}{FOO}{a contrived acronym}
\newacronym{bar}{BAR}{a contrived acronym}
\newacronym{baz}{BAZ}{a contrived acronym}
\usepackage{totcount}
\newtotcounter{acronum}
\renewcommand*{\glslinkpostsetkeys}{%
\ifglsused{\glslabel}{%
}{%
\typeout{acronum: counting \glslabel (\glstype)}%
\stepcounter{acronum}%
}%
}
\begin{document}
\gls{abc}
\gls{foo}
\gls{bar}
\gls{foo}
\gls{foo}
\vspace{1cm}
\textbf{acronum: is \theacronum}
\printacronyms
\end{document}
如果不是这样,\glsunset{abc}
这段代码就没问题了。但是,我有一些缩写,我想把它们列在列表中,但又不想在文本中完整地写出来——因此我\glsunset
像上面一样使用它们。有了它,这个例子的输出就是2
而不是3
。
我曾尝试以某种方式或隐藏变量或钩子来查看词汇表的来源,但它打败了我;)如何计算列表中缩写的真实数量?
答案1
我只需定义一个词汇表样式,实际计算词汇表中的条目数量:
\documentclass{article}
\usepackage[nomain,acronym]{glossaries}
\makeglossaries
\makeatletter
\newcounter{acronyms}
\newglossarystyle{countentries}{%
\setcounter{acronyms}{0}
\renewenvironment{theglossary}{}{}%
\let\glossaryheader\@empty
\let\glsgroupheading\@gobble
\let\glsgrouptitle\@gobble
\let\glsnavhypertarget\@gobbletwo
\let\glsnavigation\@empty
\let\glsgroupskip\@empty
\let\glsentryitem\@gobble
\let\glsentrycounterlabel\@empty
\let\glstarget\@gobbletwo
\let\glossaryentrynumbers\@gobble
\let\subglossentry\@gobblethree
\let\glssubentryitem\@gobble
\let\glssubentrycounterlabel\@empty
\let\currentglossary\@empty
\renewcommand\glossarysection[2][]{}%
\let\glossarypreamble\@empty
\let\glossarypostamble\@empty
\let\glsresetentrylist\@empty
\renewcommand\glossentry[2]{\stepcounter{acronyms}}%
}
\AtBeginDocument{\printacronyms[style=countentries]}
\makeatother
\newacronym{abc}{ABC}{a contrived acronym}\glsunset{abc}
\newacronym{foo}{FOO}{a contrived acronym}
\newacronym{bar}{BAR}{a contrived acronym}
\newacronym{baz}{BAZ}{a contrived acronym}
\begin{document}
\gls{abc}
\gls{foo}
\gls{bar}
\gls{foo}
\gls{foo}
\vspace{1cm}
\textbf{I counted \arabic{acronyms} acronyms.}
\printacronyms
\end{document}
词汇表样式中的大多数定义只是确保使用时不会打印任何内容(我不确定是否所有定义都是必要的,但谨慎一点总比后悔好)。实际计数只发生在 中\glossentry
。
这种方法的一个优点是您可以计算文档中任何位置的首字母缩略词的数量(我这样做了\AtBeginDocument
)。