使用词汇表条目时忽略词汇表缩写

使用词汇表条目时忽略词汇表缩写

我一直试图忽略只使用一次的首字母缩略词,如下所述这个问题。不幸的是,我有两个问题:

  1. 曾经使用过的缩写仍然显示为第一个条目(长文本,缩写在括号中,而不是只有长文本)。消息Patching failed (2)出现了,所以可能\patchcmd需要更新以反映最新的词汇表代码?
  2. 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被注释掉 时我得到的结果:tex 编译的结果

答案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

Nicola 在回答中提到这里,其中还可以找到更多有关其工作原理的信息。

相关内容