latexmk / imakeidx 互操作效率

latexmk / imakeidx 互操作效率

imakeidxlatexmk是我在所有 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文件并再次调用该文件。imakeidxmakeindex.idx

当然,对于这个玩具 MWE,这种低效率几乎是不可察觉的。但是,考虑到包含多个大索引、biblatex/ biber、多个目录glossaries和多个目录的书籍大小的文档,需要经过多次传递才能完成,因此产生的额外工作latexmk(而不是消除)极大地考验了我的优雅感(有时也考验了我的耐心)。

那么,我该如何改善使用 的文档中 的latexmk过度调用?我希望为我的 添加一些简单的规则。我特别感兴趣的是将多次传递中的调用次数保持在最低限度(未显示此 MWE)——例如,每个索引文件最多调用两次。makeindeximakeidx.latexmkrcmakeindex

[[ 扩展glossaries和/或biblatex文档内编译能力可获得加分,堪称魔法imakeidx品牌\write18。;) ]]

答案1

我看不出有任何方法可以配置 的当前版本以latexmk防止它进行额外的运行。 不仅 会makeindex第二次运行latexmk, 也会第二次运行latex,因此运行时间加倍,这对大型文档来说是一个严重的惩罚。

要纠正这个问题,需要进行修改。文件latexmk中有足够的信息来确定该文件是在读取之前在运行期间生成的,因此表明不需要额外的运行。我已将此添加到我对未来版本的增强功能列表中。.loglatexmk.indlatexlatexmk

答案2

不否认 John 的回答,添加$makeindex = "touch -m %D";到本地.latexmkrc可以以几乎最小的开销实现自动化工作流程。在这种情况下,在我的系统上,这个示例latex只运行一次。也就是说,这是(几乎)最高效的。当然,前提是始终使用imakeidx启用\write18的 - 在我的情况下不是问题。

touch.exe(*)Windows 用户可以在任何现代发行版中获取一份副本gnu

相关内容