A相关问题七年前就有人在这里问过,但是我无法让这个解决方案在我的情况下发挥作用。
我在文本的不同实例中使用宏来简写常用术语,同时也自动根据这些术语构建索引。由于我的用例要求对每次使用的第一个实例进行不同于其他实例的处理,因此我使用了词汇表包。
但是,当我从它们建立索引时,它们会按宏的纯文本排序,而不是按宏的结果排序。
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{glossaries}
\newcommand{\MacroToIndex}[1]{\gls{#1}\index{\gls{#1}}}
\newacronym{aaaa}{AAAA}{AAAA}
\newacronym{bbbb}{ZZZZ}{ZZZZ}
\newacronym{cccc}{CCCC}{CCCC}
\begin{document}
\MacroToIndex{aaaa}, \MacroToIndex{bbbb}, \MacroToIndex{cccc}
\printindex
\end{document}
在这种情况下,结果索引是:
AAAA,1
ZZZZ,1<- 这是 \gls{bbbb}
中国交通建设集团有限公司,1
有什么方法可以让索引正确地对它们进行排序吗?链接的线程建议使用 \expandafter,但我无法理解如何在我的情况下使用它。
答案1
不要使用\makeindex
and \printindex
,而是\makeglossaries
and \printglossaries
。
在文档上运行 LaTeX 后,运行makeglossaries
而不是然后makeindex
重新运行 LaTeX。
\documentclass{article}
\usepackage{glossaries}
\makeglossaries
\newcommand{\MacroToIndex}[1]{\gls{#1}\index{\gls{#1}}}
\newacronym{aaaa}{AAAA}{AAAAfirst}
\newacronym{bbbb}{ZZZZ}{ZZZZfirst}
\newacronym{cccc}{CCCC}{CCCCfirst}
\begin{document}
\MacroToIndex{aaaa}, \MacroToIndex{bbbb}, \MacroToIndex{cccc}
\MacroToIndex{aaaa}, \MacroToIndex{bbbb}, \MacroToIndex{cccc}
\printglossaries
\end{document}