imakeidx
和latexmk
是我在所有 TeX 时间中最喜欢的两个实用程序,尤其是在面对书籍大小的编译时(非常感谢 @egreg 和 @John Collins!)。除了轻松生成多个索引外, 最有用的属性之一是imakeidx
文档内编译索引子编译(我多么希望glossaries
并且biblatex
可以扩展为以相同的方式运行!)
鉴于 MWE:
\documentclass{article}
\usepackage{imakeidx}
\makeindex
\begin{document}
This.\index{this}
\printindex
\end{document}
makeindex
在直接编译期间,中途会调用一次latex
。但是,当使用时latexmk -recorder (etc.)
,会忽略中途生成的latexmk
新.ind
文件并再次调用该文件。imakeidx
makeindex
.idx
当然,对于这个玩具 MWE,这种低效率几乎是不可察觉的。但是,考虑到包含多个大索引、biblatex
/ biber
、多个目录glossaries
和多个目录的书籍大小的文档,需要经过多次传递才能完成,因此产生的额外工作latexmk
(而不是消除)极大地考验了我的优雅感(有时也考验了我的耐心)。
那么,我该如何改善使用 的文档中 的latexmk
过度调用?我希望为我的 添加一些简单的规则。我特别感兴趣的是将多次传递中的调用次数保持在最低限度(未显示此 MWE)——例如,每个索引文件最多调用两次。makeindex
imakeidx
.latexmkrc
makeindex
[[ 扩展glossaries
和/或biblatex
文档内编译能力可获得加分,堪称魔法imakeidx
品牌\write18
。;) ]]
答案1
我看不出有任何方法可以配置 的当前版本以latexmk
防止它进行额外的运行。 不仅 会makeindex
第二次运行latexmk
, 也会第二次运行latex
,因此运行时间加倍,这对大型文档来说是一个严重的惩罚。
要纠正这个问题,需要进行修改。文件latexmk
中有足够的信息来确定该文件是在读取之前在运行期间生成的,因此表明不需要额外的运行。我已将此添加到我对未来版本的增强功能列表中。.log
latexmk
.ind
latex
latexmk
答案2
不否认 John 的回答,添加$makeindex = "touch -m %D";
到本地.latexmkrc
可以以几乎最小的开销实现自动化工作流程。在这种情况下,在我的系统上,这个示例latex
只运行一次。也就是说,这是(几乎)最高效的。当然,前提是始终使用imakeidx
启用\write18
的 - 在我的情况下不是问题。
touch.exe
(*)Windows 用户可以在任何现代发行版中获取一份副本gnu
。