我对使用以下方式创建的索引的顺序有疑问imakeidx
。我想定义自己的索引条目名称命令,以便\newcommand{$VARIABLENAME}{$VARIABLEVALUE}
在整个文档中重复使用它们。
但是,如果我这样做,索引中的顺序将由命令的名称而不是内容创建。我发现索引文件使用的是命令而不是内容。
我该如何避免这个问题?
平均能量损失
\documentclass{article}
\usepackage{imakeidx}
\indexsetup{%
level=\section*,%
toclevel=section,%
}
\newcommand{\idxKeywordName}{Keyword}
\makeindex[%
name=\idxKeywordName,%
title=\idxKeywordName{} index,
intoc,
]
\newcommand{\idxKwEntryA}{A}
\newcommand{\idxKwEntryB}{B}
\newcommand{\idxKwEntryC}{C}
\newcommand{\idxKwEntryD}{Z} % why is this entry not in order?
\newcommand{\idxKwEntryE}{E}
\newcommand{\idxKwEntryF}{F}
\begin{document}
\begin{itemize}
\item Item A \index[\idxKeywordName]{\idxKwEntryA}
\item Item B \index[\idxKeywordName]{\idxKwEntryB}
\item Item C \index[\idxKeywordName]{\idxKwEntryC}
\item Item D \index[\idxKeywordName]{\idxKwEntryD}
\item Item E \index[\idxKeywordName]{\idxKwEntryE}
\item Item F \index[\idxKeywordName]{\idxKwEntryF}
\end{itemize}
\printindex[\idxKeywordName]
\end{document}
最终的索引如下所示:
条目Z
显然不在它应该在的位置。我在idx
文件中找到了“错误”顺序的原因:
\indexentry{\idxKwEntryA}{1}
\indexentry{\idxKwEntryB}{1}
\indexentry{\idxKwEntryC}{1}
\indexentry{\idxKwEntryD}{1}
\indexentry{\idxKwEntryE}{1}
\indexentry{\idxKwEntryF}{1}
这里,索引条目由命令\idxKwEntryX
而不是其内容定义。这给出了ind
-file:
\begin{theindex}
\item \idxKwEntryA, 1
\item \idxKwEntryB, 1
\item \idxKwEntryC, 1
\item \idxKwEntryD, 1
\item \idxKwEntryE, 1
\item \idxKwEntryF, 1
\end{theindex}
根据 -file 的 MWE,我怀疑如下ilg
:
\indexentry{A}{1}
\indexentry{B}{1}
\indexentry{C}{1}
\indexentry{Z}{1}
\indexentry{E}{1}
\indexentry{F}{1}
和ind
文件:
\begin{theindex}
\item A, 1
\item B, 1
\item C, 1
\item E, 1
\item F, 1
\item Z, 1
\end{theindex}
这是为什么?我如何才能根据实际内容获得订单?
更新
类似问题:正确排序包含宏的 \index 条目
答案1
要根据内容对索引进行排序,需要扩展参数。扩展参数的一种简单方法是将其传递给恒等函数:
梅威瑟:
\documentclass{article}
\usepackage{imakeidx}
\newcommand{\idxKeywordName}{Keyword}
\newcommand{\nindex}[2][]{\index[#1]{#2}}
\makeindex[name=\idxKeywordName,title=\idxKeywordName{} index,columns=1]
\newcommand{\idxKwEntryA}{A}
\newcommand{\idxKwEntryB}{Z}
\newcommand{\idxKwEntryC}{C}
\begin{document}
\begin{itemize}
\item Item A \nindex[\idxKeywordName]{\idxKwEntryA}
\item Item B \nindex[\idxKeywordName]{\idxKwEntryB}
\item Item C \nindex[\idxKeywordName]{\idxKwEntryC}
\end{itemize}
\printindex[\idxKeywordName]
\end{document}
结果:
\indexspace
请注意,由于识别了不同的首字母,所以现在条目之间以 (即,小的垂直空间) 分隔,这与原始示例中所有条目都在同一组中相反。