Как автоматически обрабатывать «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"? Я не против указать один раз для каждой аббревиатурынужна ли ему буква "н" или нетпри использовании краткой формы.

Я знаю о glossaries-prefixпакете, который позволяет определять префиксы для всех различных случаев (первое использование, множественное число, единственное число и т. д.). Однако, используя этот пакет, мне пришлось бы вручную использовать его различные команды ( \pglsи т. д.) вместо коротких команд аббревиатуры ( \acи т. д.).

Есть ли способ сделать это автоматически?

решение1

Я начал использоватьacronymПакет для этой цели.документацияпоказывает, что он определяет команды \iac\Iac), которые автоматически вставляют неопределенный артикль в правильной форме, если это необходимо.

решение2

Возможно, это поможет вам начать:

Я предполагаю, что идеальным решением был бы чрезвычайно сложный пакет (вроде распознавания шаблонов переносов для различных языков) для распознавания a и an и т. д. Поскольку это не в моих силах, вот предложение.

Если вы действительно используете артикли первыми = Статья А, а аббревиатуры = Статья Б, то я бы предложил добавить несколько ключей к глоссариям и определять, использовалась ли аббревиатура или нет, чтобы распознавать, какие из артиклей использовать.

Примечание: я не добавил в команду перехват ошибок, чтобы распознавать случаи, когда пользователь пытается использовать подстановку артикля, но не определил ее, но я определил команду так, чтобы пользователь мог передавать артикль по мере необходимости в качестве необязательного аргумента.

\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}

Связанный контент