imakeidx - 按斜体字词分组

imakeidx - 按斜体字词分组

我正在使用伊玛克包来创建索引。我希望我的索引完全按照字母顺序排列,因此我使用@-命令对于数学模式或斜体术语。

但是,如果我现在想对索引中的一些项目进行分组(使用!-命令) 位于斜体项下,则会出现问题。第一级项在索引中出现两次,一次正常,一次斜体。第二级项被分组在非斜体项下。

索引文件的期望输出第二学期(参见下文的 MWE)是:

  \item \textit{Term2}, 1
    \subitem -A, 1
    \subitem -B, 1

有人知道如何解决这个问题吗(无需手动操作)?提前谢谢!

梅威瑟:

\documentclass{scrreprt} 

\usepackage{imakeidx}                       
\makeindex[columns=1]

\begin{document}

% Works as desired without \textit
Term1 \index{Term1}
Term1-A \index{Term1!-A}
Term1-B \index{Term1!-B}

% Does not work as desired with \textit
\textit{Term2} \index{Term2@\textit{Term2}}
\textit{Term2}-A \index{Term2!-A@\textit{Term2}-A}
\textit{Term2}-B \index{Term2!-B@\textit{Term2}-B}

% Does also not work 
\textit{Term3} \index{Term3@\textit{Term3}}
\textit{Term3}-A \index{Term3-A@\textit{Term3}!-A}
\textit{Term3}-B \index{Term3-B@\textit{Term3}!-B}

\printindex
\end{document}

创建的索引文件:

\begin{theindex}

  \item Term1, 1
    \subitem -A, 1
    \subitem -B, 1
  \item Term2
    \subitem \textit{Term2}-A, 1
    \subitem \textit{Term2}-B, 1
  \item \textit{Term2}, 1
  \item \textit{Term3}, 1
  \item \textit{Term3}
    \subitem -A, 1
  \item \textit{Term3}
    \subitem -B, 1

\end{theindex}

答案1

您实际的部件处于错误的级别\index

顶层是\index{Term2@\textit{Term2}},下一层是\index{Term2@\textit{Term2}!子层}。 这子层也可以采用以下形式子排序@潜台词但在这种情况下,没有必要子排序@部分。

\documentclass{scrreprt}

\usepackage{imakeidx}
\makeindex[columns=1]

\begin{document}

% Works as desired without \textit
Term1 \index{Term1}
Term1-A \index{Term1!-A}
Term1-B \index{Term1!-B}

% Works as desired with \textit
\textit{Term2} \index{Term2@\textit{Term2}}
\textit{Term2}-A \index{Term2@\textit{Term2}!-A}
\textit{Term2}-B \index{Term2@\textit{Term2}!-B}

\printindex


\end{document}

索引图像

答案2

解决此问题的另一种方法是使用索引样式文件(.ist 文件)来控制索引的格式。使用 .ist 文件,您可以指定哪个样式指南与哪个索引相匹配,这样您就可以在一个文档中拥有多种格式的变体,并分布在多个索引中。

要创建 .ist 文件,您需要创建 .txt 文件,然后在 Finder/Explorer 中将其名称(在 Windows 上是否仍这样称呼?)更改为 .ist。因此,您需要将 .txt 文件类型更改为 .ist 文件类型。.ist 应该可以在 NotePad 或 TextEdit 或其他程序中打开。

当 XeLaTex 或其他程序要格式化您的索引时,它会使用 .ist 文件作为样式指南来执行此操作。这样,您就可以指定所有第一级项目为斜体、所有第二级项目为粗体、所有第三级项目为正常等等,随您怎么想!它会获取 .idx 文件的原始信息,使用您在 .ist 中指定的样式格式化代码对其进行插值(将每个项目放在您指定的任何内容之前、之间和之后),然后在 .ind 文件中生成工作代码。

我提供了两个示例,一个比较简单,一个比较复杂。将 .ist 文件包含在 .tex 文件的文件夹中。

Tex 文件:

\documentclass[a4paper]{book}
\usepackage{imakeidx}
\makeindex[name=itindexplain,title=Plain Index Title, options = -s itindexplain.ist]
\makeindex[name=itindex,title=Example Index Title, options = -s itindex.ist]
\makeindex
\begin{document}
This is a test.
\index[itindexplain]{Item 0!Item 1!Item 2}
\index[itindexplain]{example!this .ist code requires a sub-item to work, since it closes the textit environment with a second curly bracket}
\index[itindex]{first test}
\index[itindex]{Item 0!Item 1!Item 2}
\printindex[itindexplain]
\printindex[itindex]
\end{document}

itindexplain.ist 文件的内容:

item_0 "\\indexspace \\vspace{-12pt} \n \\textit{\\item " 
item_x1 "} \n \\subitem "
item_1 " \n \\subitem "

delim_0 " \\hfill " 
delim_1 " \\hfill " 
delim_2 " \\hfill "

itindex.ist 文件的内容如下:

item_0 "\\indexspace \n \\item \\noindent \\vspace{8pt}"
item_x1 "\n \\subitem \\hspace{-.8cm} \\textit{"
item_1 "\\vspace{8pt} \n \\subitem \\hspace{-.8cm} \\textit{"
item_x2 "\n} \\subitem \\hspace{-.725cm}"
item_2 "\n \\subitem \\hspace{-.725cm}"

delim_0 "\\hfill"
delim_1 "\\hfill"
delim_2 "\\hfill"

两个重要说明:

  • 确保您的 .ist 文件编辑器(记事本、文本编辑等)不会自动将直引号更改为弯引号。这仅适用于直引号。
  • 这是一个网站列出了使用 .ist 文件所需的按键。

相关内容