imakeidx:使用自己的命令来指定索引项的顺序

imakeidx:使用自己的命令来指定索引项的顺序

我对使用以下方式创建的索引的顺序有疑问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请注意,由于识别了不同的首字母,所以现在条目之间以 (即,小的垂直空间) 分隔,这与原始示例中所有条目都在同一组中相反。

相关内容