词汇表包:如果缩写词之前已经定义,则忽略 \newacronym

词汇表包:如果缩写词之前已经定义,则忽略 \newacronym

我有一份由多个 tex 文件组成的文档,每个章节一个,我使用该glossaries包来创建首字母缩略词列表。理想情况下,我希望将首字母缩略词定义在尽可能靠近它们使用的地方,即在章节 tex 文件中,以使章节自成体系。然而,这会导致一些双重定义(在多个章节中定义的首字母缩略词),这是包glossaries不喜欢的(它会抛出“词汇表条目‘xx’已定义”错误)。

因此,我想知道是否可以\newacronym以某种方式改变命令,使其忽略定义已知缩写词的尝试。

基本上,它可以归结为一个 if-then-else 结构,该结构首先检查首字母缩略词标签是否已经已知,如果是则不执行任何操作,如果否则执行原始\newacronym代码。

答案1

您可以使用glossaries'\ifglsentryexists宏来定义一个\provideacronym宏,如果尚未定义,它将仅定义一个首字母缩略词。此外(就像在我的 MWE 中一样),您可以将其重新定义\newacronym\provideacronym

\documentclass{article}

\usepackage{glossaries}

\let\oldnewacronym\newacronym

\newcommand*{\provideacronym}[3]{%
  \ifglsentryexists{#1}{%
  }{%
    \oldnewacronym{#1}{#2}{#3}%
  }%
}

\renewcommand*{\newacronym}{\provideacronym}

\newacronym{cd}{CD}{compact disk}

\newacronym{cd}{CD 2}{compact disk 2}

\begin{document}

Some text about \gls{cd}.

\end{document}

在此处输入图片描述

相关内容