我正在创建一组文档,这些文档包含在不同的 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
文件。