我正在写一篇包含多个章节的文章。此外,我使用了大约 50 个首字母缩略词。现在我想在每个章节中展开首字母缩略词,但只在它第一次出现时展开。为此,我正在考虑一个宏,例如
\newcommand{\acronym}[2]{%
% if first occurence in chapter
\emph{#1} (#2}
% else
#2
}
宏描述了我计划在文本中使用的命令,例如“这是一个 \acronym{非常简单}{VS} 示例”。所有首字母缩略词都不包含空格或特殊字符。相反,首字母缩略词仅由字母组成。
所以我认为使用计数器是可行的,但我不知道如何开始。每个首字母缩略词都有一个计数器?或者检查分段计数器?
编辑:由于我的软件包列表已经很长了,我更希望使用没有附加软件包的解决方案。如果这不可能,那也没关系,但通常情况下,有一种不使用软件包的方法,例如,使用简单的表格并手动计算列宽。
答案1
\documentclass{book}
\usepackage{etoolbox}
\usepackage{blindtext}
\newrobustcmd{\ProvideAcronymCounter}[1]{%
\ifltxcounter{#1}{%
}{%
\newcounter{#1}[chapter]
}}
\newcommand{\MyAcronym}[2]{%
\ProvideAcronymCounter{#2Counter}
\ifnumequal{\number\value{#2Counter}}{0}{
% if first occurence in chapter
\emph{#2} {#1}
\refstepcounter{#2Counter}
}{ % else
#1}
}
\begin{document}
\chapter{First one}
\blindtext[10]
\MyAcronym{Shakespeare}{An author}
\MyAcronym{Shakespeare}{An author}
\MyAcronym{Shakespeare}{An author}
\chapter{Second chapter}
\blindtext[5]
\MyAcronym{Shakespeare}{An author}
\end{document}