令我惊讶的是,缩写 TEST 在词汇表中出现了两次。这似乎是由于 glsreset 造成的。我怎样才能仍然只显示文档中第一次使用的内容?
这文档第 94 页的红框中指出这是已知行为。但我不明白是否可以更改它。
\listfiles
\documentclass{article}
\usepackage[indexonlyfirst=true]{glossaries}
\makenoidxglossaries
\setacronymstyle{long-short}
\newacronym
{TEST}{Short Test}{Long Test}
\newacronym
{FOO}{Short Foo}{Long Foo}
\begin{document}
\gls{TEST}
\gls{FOO}
\glsreset{FOO}
\gls{FOO}
\newpage
a
\glsreset{TEST}
\gls{TEST}
\printnoidxglossaries
\end{document}
答案1
\glswriteentry
红色框后面是手册中描述的负责将信息写入外部文件的命令。您可以在本地重新定义它,不执行任何操作
\listfiles
\documentclass{article}
\usepackage[indexonlyfirst=true]{glossaries}
\makenoidxglossaries
\setacronymstyle{long-short}
\newacronym
{TEST}{Short Test}{Long Test}
\newacronym
{FOO}{Short Foo}{Long Foo}
\begin{document}
\gls{TEST}
\gls{FOO}
\glsreset{FOO}
\gls{FOO}
\newpage
a
\glsreset{TEST}
{\renewcommand*{\glswriteentry}[2]{}\gls{TEST}}
\printnoidxglossaries
\end{document}
如果你要多次使用它,你可能应该为此创建一个宏,比如\newcommand\mygls[1]{\begingroup\renewcommand*{\glswriteentry}[2]{}\glslocalreset{#1}\gls{#1}\endgroup}
然后使用如下
\listfiles
\documentclass{article}
\usepackage[indexonlyfirst=true]{glossaries}
\newcommand\mygls[1]{\begingroup
\renewcommand*{\glswriteentry}[2]{}%
\glslocalreset{#1}%
\gls{#1}\endgroup}
\makenoidxglossaries
\setacronymstyle{long-short}
\newacronym
{TEST}{Short Test}{Long Test}
\newacronym
{FOO}{Short Foo}{Long Foo}
\begin{document}
\gls{TEST}
\gls{FOO}
\glsreset{FOO}
\gls{FOO}
\newpage
a
\mygls{TEST}
\printnoidxglossaries
\end{document}
编辑
您可以为每个首字母缩略词添加一个条件,该条件将在首次使用首字母缩略词后设置为 true,然后重新定义\glswriteentry
为仅当条件为 false 时才打印页码。以下代码可以做到这一点,但仅适用于首字母缩略词,而不是一般的词汇表条目
\listfiles
\documentclass{article}
\usepackage[indexonlyfirst=true]{glossaries}
\makeatletter
\def\@gls@#1#2[#3]{%
\glsdoifexists{#2}%
{%
\let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
\let\glsifplural\@secondoftwo
\let\glscapscase\@firstofthree
\let\glscustomtext\@empty
\def\glsinsert{#3}%
\def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
\@gls@link[#1]{#2}{\@glo@text}%
\@gls@do@glsunset{#2}%
}%
\glspostlinkhook
\csname #2@used@beforetrue\endcsname
}
\makeatother
\renewcommand*{\glswriteentry}[2]{%
\csname if#1@used@before\endcsname
\else
#2%
\fi
}
\makenoidxglossaries
\setacronymstyle{long-short}
\NewCommandCopy\oldnewacronym\newacronym % must be after \setacronymstyle
\renewcommand*\newacronym[4][]{\expandafter\newif\csname if#2@used@before\endcsname\oldnewacronym[#1]{#2}{#3}{#4}} % must be after \setacronymstyle
\newacronym
{TEST}{Short Test}{Long Test}
\newacronym
{FOO}{Short Foo}{Long Foo}
\begin{document}
\gls{TEST}
\gls{FOO}
\glsreset{FOO}
\gls{FOO}
\newpage
a
\glsreset{TEST}
\gls{TEST}
\printnoidxglossaries
\end{document}