Ignorando acrônimos de glossários ao usar entradas de glossário

Ignorando acrônimos de glossários ao usar entradas de glossário

Tenho tentado ignorar siglas que são usadas apenas uma vez, conforme descrito emessa questão. Infelizmente, tenho dois problemas:

  1. A abreviatura usada uma vez ainda é exibida como a primeira entrada (texto longo com a abreviatura entre colchetes em vez de apenas texto longo). A mensagem Patching failed (2)apareceu, então talvez \patchcmdprecise ser atualizada para refletir o código dos glossários mais recentes?
  2. O etoolbox emite um 'Boolean '\ifglo@test@usedonlyonce' undefinederro para cada arquivo \newglossaryentry.

Como posso usar siglas e entradas de glossário com siglas usadas uma vez sendo ignoradas? Uma vez usadoglossárioas entradas ainda precisam ser exibidas na lista, massiglasnão deveria.

Exemplo mínimo que emite os erros:

\documentclass{article}

\usepackage{etoolbox}
\usepackage{glossaries}

\makeatletter

\appto\newacronymhook{%
  \newbool{glo@\the\glslabeltok @usedonlyonce}% define an additional switch per acronym
}

\patchcmd{\@gls@}{%
    \glsunset{#2}%
  }{% write appropriate information to the main auxiliary file
    \ifglsused{#2}{%
      \write\@auxout{\global\setbool{glo@#2@usedonlyonce}{false}}%
    }{%
      \write\@auxout{\global\setbool{glo@#2@usedonlyonce}{true}}%
    }%
    \glsunset{#2}%
  }{}{\message{^^JPatching failed (1)^^J}}

\patchcmd{\@gls@}{%
    \glsentryfirst{#2}%
  }{% print the long form of the acronym if the acronym is used only once
    \ifbool{glo@#2@usedonlyonce}{\glsentrylong{#2}}{\glsentryfirst{#2}}%
  }{}{\message{^^JPatching failed (2)^^J}}

\let\old@do@wrglossary\@do@wrglossary
\renewcommand{\@do@wrglossary}[1]{\ifbool{glo@#1@usedonlyonce}{}{\old@do@wrglossary{#1}}}


\makeatother

\newacronym{ANO}{ANO}{Acronym Number One}
\newacronym{ANT}{ANT}{Acronym Number Two}
\newglossaryentry{test} {
    name={test},
    description={A test is used for testing}
}

\makeglossaries

\begin{document}

\printglossaries

\noindent
\gls{ANO}, \gls{ANO}\\
\gls{ANT}\\
\gls{test}

\end{document}

Eu tenho a configuração do MikTeX e do TeXnicCenter conforme descritoaqui. O resultado que obtenho quando o \newglossaryentrye correspondente \glsé comentado: resultado da compilação tex

Responder1

Com os glossários 4.14, lançados pouco depois da postagem da pergunta, é possível ignorar siglas e itens do glossário que são usados ​​apenas uma vez, com os resultados exatamente como solicitados acima.

O exemplo acima é convertido para o seguinte:

\documentclass{article}

\usepackage{glossaries}

\makeglossaries

\glsenableentrycount

\newacronym{ANO}{ANO}{Acronym Number One}
\newacronym{ANT}{ANT}{Acronym Number Two}
\newglossaryentry{test} {
    name={test},
    description={A test is used for testing}
}

\begin{document}

\printglossaries

\noindent
\cgls{ANO}, \cgls{ANO}\\
\cgls{ANT}\\
\gls{test}

\end{document}

Observe a posição diferente de \makeglossaries, a adição \glsenableentrycounte o uso \cglsde em vez de \gls.

Referido por Nicola na respostaaqui, onde também podem ser encontradas mais informações sobre como isso funciona.

informação relacionada