
我一直試著忽略只使用一次的首字母縮寫詞,如中所述這個問題。不幸的是,我有兩個問題:
- 曾經使用過的縮寫仍然顯示為第一個條目(長文本,縮寫在括號中,而不是僅長文本)。該訊息
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
。
尼古拉從答案中提到這裡,還可以在其中找到有關其工作原理的更多資訊。