Ignorieren von Glossar-Akronymen bei der Verwendung von Glossareinträgen

Ignorieren von Glossar-Akronymen bei der Verwendung von Glossareinträgen

Ich habe versucht, Akronyme zu ignorieren, die nur einmal verwendet werden, wie indiese Frage. Leider habe ich zwei Probleme:

  1. Die einmal verwendete Abkürzung wird immer noch als erster Eintrag angezeigt (langer Text mit der Abkürzung in Klammern statt nur Langtext). Die Meldung Patching failed (2)wurde angezeigt, also \patchcmdmuss sie vielleicht aktualisiert werden, um den neuesten Glossarcode widerzuspiegeln?
  2. Die etoolbox gibt 'Boolean '\ifglo@test@usedonlyonce' undefinedfür jeden einen Fehler aus \newglossaryentry.

Wie kann ich sowohl Akronyme als auch Glossareinträge verwenden, wobei einmal verwendete Akronyme ignoriert werden? Einmal verwendeteGlossarEinträge müssen noch in der Liste angezeigt werden, aberAkronymesollte nicht.

Minimales Beispiel, das Fehler ausgibt:

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

Ich habe MikTeX und TeXnicCenter wie beschrieben eingerichtetHier. Das Ergebnis, das ich bekomme, wenn \newglossaryentryund das Entsprechende \glsauskommentiert ist: Ergebnis der Tex-Kompilierung

Antwort1

Mit Glossaren 4.14, die kurz nach der Veröffentlichung der Frage veröffentlicht wurden, ist es möglich, Akronyme und Glossareinträge, die nur einmal verwendet werden, zu ignorieren und dabei genau die Ergebnisse zu erzielen, die oben angefordert wurden.

Das obige Beispiel lässt sich wie folgt umwandeln:

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

Beachten Sie die unterschiedliche Position von \makeglossaries, die Hinzufügung von \glsenableentrycountund die Verwendung von \cglsanstelle von \gls.

Von Nicola aus der Antwort erwähntHier, wo auch weitere Informationen zur Funktionsweise zu finden sind.

verwandte Informationen