如何从多个文档生成组合索引?

如何从多个文档生成组合索引?

我正在创建一组文档,这些文档包含在不同的 LaTeX 源文件中,并将编译成不同的 PDF 文件。每个文档都可以有自己的索引,使用常规程序生成makeindex。但由于这些文档涵盖相关主题,我希望能够生成一个包含所有文档的所有术语的主索引。显然,索引中的参考资料(而不仅仅是页码)必须同时包含页码和文档的某种标识符。有办法吗?

当然,我确信我可以编写一个脚本来对文件进行后期处理.idx,但我更愿意使用现有的脚本。

如果我需要转储makeindex并使用一些替代品,那应该没问题。

答案1

除了连接文件以生成主索引之外,可以不进行任何后期处理来完成此操作.idx,但它需要一些宏操作。

诀窍在于,在单独的文档中,您必须对命令进行一些低级更改,\index以便它包含 makeindex 所称的“封装”。您可以通过添加 | 符号后跟宏名称(前面没有反斜杠)来做到这一点。然后,您可以将\jobname作为该宏名称的参数,如下所示:

\documentclass{article}
\usepackage{makeidx}
\makeindex
\let\LATEXindex\index % save old definition to prevent recursion
\renewcommand\index[1]{\LATEXindex{#1|docname{\jobname}}}

这将创建.idx如下条目:

\indexentry{alpha|docname{testdoc}}{1}

运行后makeindex,将转换为以下.ind条目:

\item alpha, \docname{testdoc}{1}

现在,回到单独的文档,您必须为\docname宏添加一个定义,例如像这样:

\newcommand\docname[2]{#2}

此后,单独的文档应该像以前一样进行编译,除了已经使用封装的任何索引条目(您必须手动修复这些条目)。

现在,对于全局索引创建,您所要做的就是将所有单独的.idx文件连接到一个文件中,对结果运行 makeindex,然后使用如下输入文件:

\documentclass{article}
\usepackage{makeidx}
\newcommand\docname[2]{#1: #2}
\begin{document}
\printindex
\end{document}

请注意:该文档本身不应包含\makeindex命令,或者至少您永远不应运行makeindex该文件,因为这将覆盖组合.ind文件。

相关内容