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
和/或功能的獎勵積分是 la的魔法品牌。 ; )]]biblatex
imakeidx
\write18
答案1
我沒有看到任何配置當前版本以latexmk
防止其進行額外運行的方法。不僅makeindex
第二次運行latexmk
,而且 也是如此latex
,因此運行時間加倍,這對大型文件來說是一個不好的懲罰。
要修正這個問題,需要對其latexmk
本身進行改變。.log
文件中有足夠的資訊來latexmk
確定該.ind
文件是在讀取之前的運行期間創建的latex
,因此表明不需要額外的運行。我已將其添加到我的未來版本的增強列表中latexmk
。
答案2
不要從約翰的答案中刪除任何內容,以幾乎最小的開銷添加$makeindex = "touch -m %D";
到本地生成自動化工作流程。.latexmkrc
在這種情況下,在我的系統上,此範例latex
僅運行一次。也就是說,這(幾乎)是最有效率的。當然,附帶imakeidx
條件\write18
是始終使用 withenabled ——對我來說這不是問題。
touch.exe
(*) Windows 使用者可以在任何現代發行版中取得一份副本gnu
。