
Ich habe versucht, Akronyme zu ignorieren, die nur einmal verwendet werden, wie indiese Frage. Leider habe ich zwei Probleme:
- 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\patchcmd
muss sie vielleicht aktualisiert werden, um den neuesten Glossarcode widerzuspiegeln? - Die etoolbox gibt
'Boolean '\ifglo@test@usedonlyonce' undefined
fü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 \newglossaryentry
und das Entsprechende \gls
auskommentiert ist:
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 \glsenableentrycount
und die Verwendung von \cgls
anstelle von \gls
.
Von Nicola aus der Antwort erwähntHier, wo auch weitere Informationen zur Funktionsweise zu finden sind.