![在 \printindex 之后收集索引条目](https://linux22.com/image/303898/%E5%9C%A8%20%5Cprintindex%20%E4%B9%8B%E5%90%8E%E6%94%B6%E9%9B%86%E7%B4%A2%E5%BC%95%E6%9D%A1%E7%9B%AE.png)
似乎存在一个内在的假设,即一个\printindex
命令后面不能跟着进一步的\index
命令。
我正在处理一个文档,该文档超出了命令创建的页面\printindex
。此部分包含引文。每个引文后面都有作者,作者的名字应该进入名称索引。
以下是从该文档中得出的 MWE:
\documentclass{scrbook}
\usepackage{showidx}
\usepackage[noautomatic]{imakeidx}
\makeindex[program=texindy]
\makeindex[name=nameindex,program=texindy,title=Namensindex]
\title{title}
\author{author}
\begin{document}
\frontmatter
\index{frontmatter}
\index[nameindex]{frontmatter}
\maketitle
\index{aftertitle}
\index[nameindex]{aftertitle}
\tableofcontents
\index{aftertoc}
\index[nameindex]{aftertoc}
\mainmatter
\index{mainmatter}
\index[nameindex]{mainmatter}
\chapter{A}
\index{chapA}
\index[nameindex]{chapA}
\chapter{B}
\index{chapB}
\index[nameindex]{chapB}
\appendix
\index{appendix}
\index[nameindex]{appendix}
\chapter{1}
\index{chap1}
\index[nameindex]{chap1}
\chapter{2}
\index{chap2}
\index[nameindex]{chap2}
\backmatter
\index{backmatter}
\index[nameindex]{backmatter}
\printindex
\printindex[nameindex]
\index{afterindex}
\index[nameindex]{afterindex}
\end{document}
每个\index
命令都重复了两遍,因此两个索引应该包含相同的条目。但是,在我的系统上创建的 test.pdf 在默认索引中缺少两个条目(backmatter、afterindex),在 nameindex 中缺少一个条目(afterindex)。
我正在使用 TL2014 的最新 LuaTeX 版本 0.79.1 来处理它。日志的相关部分如下:
Writing index file test.idx
Writing index file nameindex.idx
(./test.aux) [1{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updma/pdftex.map}] [2] (./test.toc) [3] [4]
Chapter 1.
[1] [2]
Chapter 2.
[3] [4]
Appendix A.
[5] [6]
Appendix B.
[7] [8] (./test.ind) [9
\indexentry{backmatter}{9}
] [10] (./nameindex.ind)
Package imakeidx Warning: Remember to run lualatex again after calling
(imakeidx) `texindy test.idx'.
Package imakeidx Warning: Remember to run lualatex again after calling
(imakeidx) `texindy nameindex.idx'.
[11
\indexentry{afterindex}{11}
\indexentry{afterindex}{11}
] (./test.aux))
328 words of node memory still in use:
[...]
Output written on test.pdf (15 pages, 47727 bytes).
我的印象是索引生成的一般方案如下:
- 第一次运行 TeX,收集
\index
.idx 文件中的所有条目。 - 对 .idx 文件运行 makeindex 或 xindy 以生成 .ind 文件。
- 第二次 TeX 运行,
\printindex
命令导入 .ind 文件。
因此,我的假设是收集部分和导入部分完全解耦。所有\index
命令都收集在 .idx 文件中,无论它们出现在命令之前还是之后\printindex
。并且\printindex
命令不参与收集过程,只导入生成的 .ind 文件。
但 MWE 显然推翻了我的假设。在做 RTFM 杂务时,我发现imakeidx
文档明确指出:
\printindex 用于排版特定索引,如果未指定可选参数,则排版名为 \jobname.ind 的默认索引。实际上,此命令激活了关闭原始索引文件输出的所有机制,并调用 splitindex 脚本,以便根据每个索引的默认值或指定值将排版引擎生成的单个原始文件划分为不同的原始文件,在每个分割的原始文件上调用排序和格式化程序(除非被 noautomatic 选项禁止;在这种情况下会发出警告,以便提醒排版员该特定索引尚未处理),生成已排序和格式化的 .ind 文件,并最终输入和排版这些格式化的文件。深呼吸。
所以\printindex
确实\involved
在收集和导入部分都是如此。有没有办法把它分成两个命令?所以我可以写类似的东西:
[...]
\printindex
\printindex[nameindex]
\index{afterindex}
\index[nameindex]{afterindex}
\prepareindex
\prepareindex[nameindex]
\end{document}