在以下 MWE 中,尽管有选项indexonlyfirst
,但在我使用重置所有首次使用标志后,页码仍然会转到首字母缩略词列表\glsresetall
,从而给我
有没有办法打开和关闭页码来索引文档的选定部分,所以我只能在首字母缩略词列表中得到“第 2 页”,如本 MWE 所示?
\documentclass{report}
\usepackage[acronym,
xindy,
indexonlyfirst,
]{glossaries}
\usepackage{glossary-mcols}
\setacronymstyle{footnote-desc}
%% glossary entries
\newacronym{NMR}{NMR}{\textit{Nuclear Magnetic Resonance}}
\makeglossaries
\begin{document}
% Command to turn page numbers to index off
A glossary acronym : \gls{NMR} \gls{NMR} \gls{NMR}
\glsresetall
% Command to turn page numbers to index on
\newpage
The same acronym : \gls{NMR} \gls{NMR} \gls{NMR}
\glsresetall
% Command to turn page numbers to index off
\newpage
A third time the same acronym : \gls{NMR} \gls{NMR} \gls{NMR}
\printglossaries
\end{document}
答案1
正如@cfr 提到的,问题在于\glsresetall
,它将每个条目标记为未使用。这意味着下次使用它时,它将被视为“首次使用”,因此被编入索引。
我认为这是一项工作glossaries-extra
,它扩展了该glossaries
包。您的示例可以进行如下调整:
\documentclass{report}
\usepackage[abbreviations,% "acronyms" -> "abbreviations"
xindy,% no change from original
nomain % don't define "main" glossary
]{glossaries-extra}% "glossaries" -> "glossaries-extra"
\usepackage{glossary-mcols}
% setup abbreviation style
\setabbreviationstyle{footnote}
\renewcommand*{\glsfirstlongdefaultfont}[1]{\textit{#1}}
\renewcommand*{\glossentrydesc}[1]{%
\glsdoifexistsorwarn{#1}%
{%
\textit{\glsentrydesc{#1}}%
}%
}
% switch off automatic indexing
\GlsXtrSetDefaultGlsOpts{noindex}
%% glossary entries
\newabbreviation{NMR}{NMR}{Nuclear Magnetic Resonance}
\makeglossaries
\begin{document}
\glsresetall
A glossary acronym : \gls{NMR} \gls{NMR} \gls{NMR}.
\glsresetall
\newpage
The same acronym : \gls[noindex=false]{NMR} \gls{NMR} \gls{NMR}
\glsresetall
\newpage
A third time the same acronym : \gls{NMR} \gls{NMR} \gls{NMR}
\printglossaries
\end{document}
在这里,不是尝试索引第一次使用,而是使用以下方法抑制所有条目的自动索引
\GlsXtrSetDefaultGlsOpts{noindex}
现在必须通过使用 取消此设置来明确调用索引\gls[noindex=false]{NMR}
。这意味着您可以精确控制实际索引术语的哪些用法。
如果愿意,您可以为命令设置修饰符,例如\gls
为以下命令提供快捷方式[noindex=false]
:
\GlsXtrSetAltModifier{!}{noindex=false}
现在,您只需使用\gls!{NMR}
而不是即可\gls[noindex=false]{NMR}
。(如果您愿意,您可以选择其他符号,但请确保其类别代码稍后不会更改。不要使用*
或 ,+
因为它们已经是修饰符。)
得出的结果为:
您可以使用可选参数\printglossary
或修改标题\printabbreviations
,以使其与直接示例相同glossaries
:
\printglossary[type=\glsxtrabbrvtype,title=Acronyms]
或者
\printabbreviations[title=Acronyms]
或者你可以重新定义\abbreviationsname
\renewcommand{\abbreviationsname}{Acronyms}
您可以保留原始\newacronym
命令,但需要使用以下命令设置样式:
\setabbreviationstyle[acronym]{footnote}
代替
\setacronymstyle{footnote}
这是因为glossaries-extra
有不同类别的缩写,并且acronym
是子类别。这允许您为不同类型的缩写使用不同的样式,而 无法做到这一点glossaries
。(如果需要,可以恢复 提供的原始命令glossaries
,但它们可能会与某些样式冲突glossaries-extra
。)
我已将字体命令移出\textit
缩写定义,并使用以下方法调整格式命令:
\renewcommand*{\glsfirstlongdefaultfont}[1]{\textit{#1}}
\renewcommand*{\glossentrydesc}[1]{%
\glsdoifexistsorwarn{#1}%
{%
\textit{\glsentrydesc{#1}}%
}%
}
这与此无关,但语义上更好,因为它将内容与样式分开。这是假设您的所有条目都需要斜体。如果不是这样,那么只需删除这些行即可。