
Я стараюсь игнорировать аббревиатуры, которые используются только один раз, как описано вэтот вопрос. К сожалению, у меня две проблемы:
- Аббревиатура, которая использовалась когда-то, по-прежнему отображается в качестве первой записи (длинный текст с аббревиатурой в скобках вместо простого длинного текста). Сообщение
Patching failed (2)
появилось, так что, возможно,\patchcmd
необходимо обновить его, чтобы отразить последний код глоссариев? - Etoolbox выдает
'Boolean '\ifglo@test@usedonlyonce' undefined
ошибку для каждого\newglossaryentry
.
Как можно использовать и аббревиатуры, и записи глоссария, игнорируя при этом однократно используемые аббревиатуры?глоссарийзаписи все равно должны отображаться в списке, ноаббревиатурыне должна.
Минимальный пример, выдающий ошибки:
\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}
У меня MikTeX и TeXnicCenter настроены так, как описаноздесь. Результат, который я получаю, когда \newglossaryentry
и соответствующее \gls
закомментировано:
решение1
Благодаря глоссариям версии 4.14, выпущенным вскоре после публикации вопроса, можно игнорировать аббревиатуры и пункты глоссария, которые используются только один раз, и получать результаты, точно соответствующие запрошенным выше.
Приведенный выше пример преобразуется в следующее:
\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}
Обратите внимание на различное положение \makeglossaries
, добавление \glsenableentrycount
и использование \cgls
вместо \gls
.
Ссылаясь на Николу из ответаздесь, где также можно найти более подробную информацию о том, как это работает.