如何使用词汇表包自动处理首字母缩略词前面的“a”和“an”?

如何使用词汇表包自动处理首字母缩略词前面的“a”和“an”?

我正在使用该glossaries包来处理首字母缩略词,并遇到了自动决定在它们前面使用“a”还是“an”的任务。

\documentclass{scrbook}
\usepackage{hyperref}
\usepackage[toc,acronym,nopostdot,nomain,style=alttree,shortcuts]{glossaries}
  \setacronymstyle{long-sc-short}
  \makeglossaries
  \newacronym{sma}{sma}{SubMiniature version A}
\begin{document}
  a \ac{sma}\\ % gives "a SubMiniature version A (SMA)"
  a \ac{sma}   % gives "a SMA"
\end{document}

我怎样才能实现第二个产生“SMA”?我不介意为每个首字母缩略词指示一次是否需要“n”当使用缩写形式时。

我确实知道glossaries-prefix允许为所有不同情况(首次使用、复数、单数等)定义前缀的软件包。但是,使用此软件包时,我必须手动使用它的不同命令(\pgls等),而不是简短的首字母缩略词命令(\ac等)。

有没有办法自动完成这个操作?

答案1

我已经开始使用acronym包用于此目的。文档表明它定义了\iac(和\Iac)命令,这些命令可以根据需要自动以正确的形式插入不定冠词。

答案2

也许这可以帮助您入门:

我猜测理想的解决方案应该是一个极其复杂的包(比如各种语言的连字符模式识别)来识别 a 与 an 等等。由于这超出了我的能力范围,所以这里有一个建议。

如果您对冠词的使用确实是第一个 = 冠词 A,而缩写 = 冠词 B,那么我建议在词汇表中添加一些键,并检测是否使用了首字母缩略词,以识别要使用哪个冠词。

注意:我没有在命令中添加错误捕获来识别用户何时尝试使用文章替换但未定义它,但我确实定义了命令,以便用户可以根据需要传递文章作为可选参数。

\documentclass{scrbook}
\usepackage{hyperref}
\usepackage{xparse}
\usepackage[toc,acronym,nopostdot,nomain,style=alttree,shortcuts]{glossaries}

  \setacronymstyle{long-sc-short}


  \glsaddkey
  {article-abrv}        % new key
  {\relax}          % default value if "article-abrv" isn't used in \newglossaryentry
  {\glsentryArtA}   % analogous to \glsentrytext
  {\GlsentryArtA}   % analogous to \Glsentrytext
  {\glsArtA}        % analogous to \glstext
  {\GlsArtA}        % analogous to \Glstext
  {\GLSArtA}        % analogous to \GLStext

  \glsaddkey
  {article-long}    % new key
  {\relax}          % default value if "article-long" isn't used in \newglossaryentry
  {\glsentryArtL}   % analogous to \glsentrytext
  {\GlsentryArtL}   % analogous to \Glsentrytext
  {\glsArtL}        % analogous to \glstext
  {\GlsArtL}        % analogous to \Glstext
  {\GLSArtL}        % analogous to \GLStext


    \DeclareDocumentCommand{\aac}{o m}{%
        \IfValueTF{#1}{%
            \ifglsused{\glsentryshort{#2}}%
            {\glsdisp{#2}{#1~\ac{#2}}}%TRUE
            {\glsdisp{#2}{#1~\ac{#2}}}%FALSE
        }{%
            \ifglsused{\glsentryshort{#2}}%
            {\glsdisp{#2}{\glsArtA{#2}~\ac{#2}}}%TRUE
            {\glsdisp{#2}{\glsArtL{#2}~\ac{#2}}}%FALSE
        }%
    }

    \DeclareDocumentCommand{\Aac}{o m}{%
        \IfValueTF{#1}{%
            \ifglsused{\glsentryshort{#2}}%
            {\glsdisp{#2}{#1~\ac{#2}}}%TRUE
            {\glsdisp{#2}{#1~\ac{#2}}}%FALSE
        }{%
        \ifglsused{\glsentryshort{#2}}%
        {\glsdisp{#2}{\GlsArtA{#2}~\ac{#2}}}%TRUE
        {\glsdisp{#2}{\GlsArtL{#2}~\ac{#2}}}%FALSE
    }%
  }

  \makeglossaries

  \newacronym[article-abrv={an},article-long={a}]{sma}{sma}{SubMiniature version A}  
  \newacronym{uv}{UV}{Ultraviolet}

\begin{document}

\Aac{sma}

\Aac{sma}

Lowercase example:  \aac{sma}

Override example:  \aac[the]{sma}

%\Aac{uv}% code has no error trapping to let you use \aac as a replacement to \ac

\end{document}

相关内容