如何使用詞彙表包自動處理首字母縮寫前面的“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}

相關內容