使用術語表條目時忽略術語表首字母縮寫詞

使用術語表條目時忽略術語表首字母縮寫詞

我一直試著忽略只使用一次的首字母縮寫詞,如中所述這個問題。不幸的是,我有兩個問題:

  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

尼古拉從答案中提到這裡,還可以在其中找到有關其工作原理的更多資訊。

相關內容