1

I've been trying to ignore acronyms that are only used once, as described in this question. Unfortunately, I have two issues:

  1. The once-used abbreviation is still displayed in as the first entry (long text with the abbreviation in brackets instead of long text only). The message Patching failed (2) showed up so maybe the \patchcmd needs updating to reflect the latest glossaries code?
  2. The etoolbox issues a 'Boolean '\ifglo@test@usedonlyonce' undefined error for each \newglossaryentry.

How can I use both acronyms and glossary entries with once-used acronyms being ignored? Once-used glossary entries still have to be displayed in the list but acronyms should not.

Minimum example that issues the errors:

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

I have MikTeX and TeXnicCenter setup as described here. The result I get when the \newglossaryentry and corresponding \gls is commented out: result of tex compile

DoubleYou
  • 277
  • Have you tried my answer for that question which doesn't try to hack the internal commands but instead uses a new feature introduced in glossaries version 4.14? – Nicola Talbot Mar 10 '15 at 09:46
  • I have just tried, but even with version 4.14 it gives me an undefined control sequence \glsenableentrycount error. – DoubleYou Mar 11 '15 at 23:45
  • Can you double-check that the log file contains Package: glossaries 2015/02/28 v4.14. The example in my answer I linked to compiles without error for me. (It may be that there's an older version installed as well that's being loaded instead, which can happen sometimes.) – Nicola Talbot Mar 12 '15 at 19:04
  • It indeed uses the oldest one. Looks like my updater/package manager has issues - so posted a separate question related to that here. – DoubleYou Mar 15 '15 at 23:49

1 Answers1

1

With glossaries 4.14, released not long after the question was posted, it is possible to ignore acronyms and glossary items that are only used once, with the results exactly as requested above.

The example above converts to the following:

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

Note the different position of \makeglossaries, the addition of \glsenableentrycount and the use of \cgls instead of \gls.

Referred to by Nicola from the answer here, where also more information can be found on how this works.

DoubleYou
  • 277