避免显示在文档中仅出现过几次的首字母缩略词

避免显示在文档中仅出现过几次的首字母缩略词

我正在使用缩写包。我想知道是否有办法强制包跳过显示整个文档中出现次数少于 3,000 的项目的缩写。

例如:

\documentclass{article}
\usepackage{acronym}
\acrodef{SYS}{system}
\acrodef{NET}{network}

\begin{document}
A \ac{NET} is a set of \acp{SYS}. A super-\ac{NET} is a \ac{NET} of \acp{NET}. 
\end{document}

这将产生:

网络 (NET) 是一组系统 (SYS)。超级 NET 是 NET 的 NET。

然而,我想要:

网络(NET)是一组系统。超级 NET 是 NET 的 NET。

因此,如果缩写词出现的次数少于 3 次,则显示全文(不包含缩写)。

答案1

这里有一个技巧,可以直接让该acronym软件包按照您描述的方式工作。我还没有用该软件包的其他功能测试过它,因此可能需要一些额外的定义才能让它与软件包中的其他命令顺利配合使用。

\documentclass{article}

\usepackage{acronym}
%% Hack here:
\makeatletter
\let\oldacronymused\acronymused
\AtBeginDocument{\let\acronymused\oldacronymused}
\renewcommand*{\acronymused}[1]{%
    \expandafter\ifx\csname acused@#1\endcsname\AC@used
        \expandafter\xdef\csname acusedcount@#1\endcsname{\the\numexpr1+\csname acusedcount@#1\endcsname}
    \else
        \global\expandafter\let\csname acused@#1\endcsname\AC@used
        \global\let\AC@populated\AC@used
        \expandafter\gdef\csname acusedcount@#1\endcsname{1}
    \fi
}

\def\AC@iffewuses#1{%
    \expandafter\ifx\csname acusedcount@#1\endcsname\relax
        \expandafter\@firstoftwo
    \else
        \ifnum\csname acusedcount@#1\endcsname<\appearancecount\relax
            \expandafter\@firstoftwo\romannumeral-`0%
        \else
            \expandafter\@secondoftwo\romannumeral-`0%
        \fi
    \fi
}

\let\@@ac\@ac
\def\@ac#1{\AC@iffewuses{#1}{\ifAC@starred\acl*{#1}\else\acl{#1}\fi}{\@@ac{#1}}}

\let\@@acp\@acp
\def\@acp#1{\AC@iffewuses{#1}{\ifAC@starred\aclp*{#1}\else\aclp{#1}\fi}{\@@acp{#1}}}
\makeatother
%% end hack


\def\appearancecount{3}% Display acronym if used at least 3 times.
\acrodef{SYS}{system}
\acrodef{NET}{network}

\begin{document}

A \ac{NET} is a set of \acp{SYS}. A super-\ac{NET} is a \ac{NET} of \acp{NET}.

\ac{SYS}
\end{document} 

相关内容