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和/或功能的獎勵積分是 la的魔法品牌。 ; )]]biblateximakeidx\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

相關內容