如何使用 imakeidx 和 .ist 文件对多个索引使用不同的格式?

如何使用 imakeidx 和 .ist 文件对多个索引使用不同的格式?

我需要使用 .ist 文件以不同方式格式化三种不同类型的索引的项目和子项目。如何使用单独的 .ist 文件为特定术语添加斜体,并在每个索引的不同项目级别之间引入空行?

梅威瑟:

\documentclass[openany]{book}

\usepackage{imakeidx}
\makeindex[name=one,title=Index One, intoc, options= -s onetwothree.ist]
\makeindex[name=four,title=Index Four, intoc, options= -s four.ist]
\makeindex[name=six,title=Index Six, intoc, options= -s fivesix.ist]

\begin{document}

Some text.

\index[one]{Acts of the Avocados!2:2}
\index[one]{Romaines!3:3}
\index[one]{Romaines!4:4}
\index[four]{Aristotle!Metaphysallis!205c}
\index[four]{Aristotle!Metaphysallis!306d}
\index[four]{Plato!Tomatoes!407e}
\index[four]{Cicero!Lettuce!115}
\index[six]{Bananerges}
\index[six]{Appleadorus}
\index[six]{Plato}

\printindex[one]
\printindex[four]
\printindex[six]
\end{document}

.ist 内容(全部三个文件):

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

问题的长版本:我花了一段时间研究这个问题,阅读了所有我能在网上找到的资料,但坦率地说,我对 TeX 文件本身之外的工作了解不够多,无法完成这项工作。我通过抄袭其他人的代码并对其进行调整和反复试验来学习 LaTeX,我没有任何书籍或编码背景,所以请详细回答,不要认为我具备特定的知识。我打算将来阅读 LaTeX 配套书籍,我确实理解很多东西,但不理解行话,如果这说得通的话。

我的出版商要求为不同的索引使用三种不同的格式。我总共有六个索引:三个(额外)圣经资料索引、一个古代经典资料索引、一个地点索引和一个主题索引。索引 1-3 共享一种格式,索引 5 和 6 也是如此,但索引 4 有自己的要求。它们总是完全向左对齐,除了地点和主题索引中的子项外,没有任何缩进。我认为使用 .ist 文件是获得我需要的三种格式的最佳方式,但到目前为止,我只成功地使最后一种样式接近我想要的样式。

这些索引格式分解如下:

索引 1-3:项目前的空行,项目名称用斜体表示(例如“Genesis”),下一行跟着作为子项目的引用(没有跳过),并且 \hfill 到页码。

索引 4:项目前有空行(正常字体),子项目前有空行(斜体),子子项目前无空行。所有内容都应左对齐。

索引 5 和 6:首字母相同的项目之间没有空行,没有斜体,子项目缩进较小。

在我看来,我需要 3 个 .ist 文件来用于这三种不同的索引格式。到目前为止,我在这些 .ist 文件中可以使用 \hfill,但其他的都不起作用:

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

这是期望结果的图像: 在此处输入图片描述

对于其他索引/LaTeX 新手的提示,我发现我不需要使用终端来运行它,它只在运行 XeLaTex 的 texmaker 中工作。

我也见过这一页使用 .ist 命令,但我不太了解如何使用这些命令来实现我想要的效果。我不知道如何将其余格式放入 .ist 文件中,以获得三种索引样式所需的格式。

答案1

好的,我想我找到了答案。感谢 Gilu,他的信息让我找到了以下解决方案。这是 MWE(稍微扩展了一下以更好地了解其工作原理)。

\documentclass[openany]{book}

\usepackage{imakeidx}
\makeindex[name=one,title=Index One, intoc, options= -s one.ist]
\makeindex[name=four,title=Index Four, intoc, options= -s four.ist]
\makeindex[name=six,title=Index Six, intoc, options= -s six.ist]

\usepackage[hangindent=0pt,subindent=0pt,subsubindent=0pt]{idxlayout}

\begin{document}

Some text.

\index[one]{Acts of the Avocados!2:2}
\index[one]{Acts of the Avocados!5:5}
\index[one]{Acts of the Avocados!3:3}
\index[one]{Acts of the Avocados!5:5}
\index[one]{Acts of the Avocados!6:6}
\index[one]{Acts of the Avocados!7:7}
\index[one]{Acts of the Avocados!8:8}
\index[one]{Romaines!3:3}
\index[one]{Romaines!4:4}
\index[one]{Romaines!5:5}
\index[four]{Aristotle!Metaphysalis!205c}
\index[four]{Aristotle!Metaphysalis!306d}
\index[four]{Plato!Tomatoes!407e}
\index[four]{Cicero!Lettuce!115}
\index[six]{Bananerges}
\index[six]{Appleadorus}
\index[six]{Plato}
\index[six]{Plato!\textit{Potatoes}!144a}
\index[six]{Plato!\textit{Potatoes}!166d}

\printindex[one]
\printindex[four]
\idxlayout{itemlayout=abshang} 
\printindex[six]
\end{document}

发生变化的地方:1)我添加了 idxlayout,这样当需要关闭索引内的缩进时就变得简单,而不必像 Gilu 建议的那样在类文件中乱搞;2)我正确设置了 .ist 文件以实现我想要实现的目标;3)我添加了一行 idxlayout 代码来重新应用主题索引的缩进,该索引位于最后。

现在,这里是新的 .ist 文件,后面是它们生成的 .ind 文件,以防其他人需要以类似的方式自定义他们的索引。我使用问题中引用的页面来查找控制 .ist 文件(索引样式文件)中索引格式的不同方面的“密钥”。这是链接:https://www.sharelatex.com/learn/Indices#/Parameters_for_the_.5Cmakeindex_command

我摆弄了 .ist 文件,直到它们生成一个读起来像工作代码的 .ind 文件,所以如果有人必须以同样的方式格式化索引,那么这将是我从这次经验中得出的首要建议:摆弄您的 .ist 文件,直到运行 (xe)latex 时它们生成的 .ind 文件看起来像应该工作的 latex 代码。有时这意味着在一个键下打开花括号,在另一个键下关闭它们。

最后一件事:始终确保您的文本编辑器在您不注意的时候不会将 .ist 文件中的直引号(“)转换为弯引号。这会把事情搞砸。

one.ist:

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


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

one.ind(尽管在这里它被设置为代码,但这只是文件的内容;在论坛帖子编辑器中将其设置为代码可以使其更容易阅读):

 \begin{theindex}

 \textit{\item Acts of the Avocados } 
 \subitem 2:2 \hfill 1 
 \subitem 3:3 \hfill 1 
 \subitem 5:5 \hfill 1 
 \subitem 6:6 \hfill 1 
 \subitem 7:7 \hfill 1 
 \subitem 8:8 \hfill 1

  \indexspace

 \textit{\item Romaines } 
 \subitem 3:3 \hfill 1 
 \subitem 4:4 \hfill 1 
 \subitem 5:5 \hfill 1

\end{theindex}

four.ist:(\未添加缩进,因为如果没有缩进,则移动 \item 时会有一个空格)

item_0 " \\indexspace \n \\item \\noindent \\vspace{10.5pt}"
item_x1 " \n  \\subitem  \\textit{"
item_x2 " \n } \\subitem "

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

四、标志:

\begin{theindex}
\item \noindent \vspace{10.5pt}Aristotle 
  \subitem  \textit{Metaphysalis 
 } \subitem 205c \hfill 1
      \subsubitem 306d \hfill 1

  \indexspace
\item \noindent \vspace{10.5pt}Cicero 
  \subitem  \textit{Lettuce 
 } \subitem 115 \hfill 1

  \indexspace
\item \noindent \vspace{10.5pt}Plato 
  \subitem  \textit{Tomatoes 
 } \subitem 407e \hfill 1

\end{theindex}

六.ist:

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

六.ind:

\begin{theindex}

  \item Appleadorus \hfill 1

  \indexspace

  \item Bananerges \hfill 1

  \indexspace

  \item Plato \hfill 1
    \subitem \textit{Potatoes}
      \subsubitem 144a \hfill 1
      \subsubitem 166d \hfill 1

\end{theindex}

我会等待几天才接受我自己的帖子作为答案,因为有人可能有更优雅的解决方案。

相关内容