eficiencia interoperacional latexmk / imakeidx

eficiencia interoperacional latexmk / imakeidx

imakeidxy latexmkson dos de mis utilidades favoritas de todo el tiempo TeX, especialmente de cara a las compilaciones del tamaño de un libro (¡muchas gracias @egreg y @John Collins!). Además de la facilidad de producir múltiples índices, una de las propiedades más útiles imakeidxes la subcompilación del índice de compilación en el documento (¡cómo desearía glossariesy biblatexpodría extenderse para que se comporte de la misma manera!)

Dado MWE:

\documentclass{article}
\usepackage{imakeidx}
\makeindex

\begin{document}

This.\index{this}

\printindex

\end{document}

makeindexse invoca una vez a mitad de camino durante latexla compilación directa. Sin embargo, cuando se utiliza latexmk -recorder (etc.), latexmkignora el nuevo .indarchivo que imakeidxse produce a la mitad y makeindexlo invoca .idxde nuevo.

Por supuesto, esta ineficiencia apenas se nota con este juguete MWE. Pero dados los documentos del tamaño de un libro archivados con múltiples índices grandes, biblatex/ biber, múltiples glossariesy varios tocs que requieren varias pasadas antes de completarse, el trabajo adicional que latexmkcrea (en lugar de eliminar) pone a prueba mi sentido de la elegancia (y a veces mi paciencia) en gran medida.

Entonces, ¿cómo puedo mejorar latexmkel exceso de entusiasmo de invocar makeindexen documentos usando imakeidx? Espero agregar algunas reglas simples a mi .latexmkrc. Estoy particularmente interesado en mantener el número de makeindexinvocaciones al mínimo en múltiples pasadas (no se muestra en este MWE), digamos, a un máximo de dos invocaciones por cualquier archivo de índice.

[[ Puntos de bonificación por ampliar glossariesy/o biblatexcapacidad de compilación en documentos como si imakeidxfuera \write18magia. ; ) ]]

Respuesta1

No veo ninguna forma de configurar la versión actual latexmkpara evitar que realice ejecuciones adicionales. No sólo makeindexlo ejecuta una segunda vez latexmk, sino que también lo hace latex, por lo que el tiempo de ejecución se duplica, lo cual es una mala penalización en un documento grande.

Para corregir esto se necesitan cambios en latexmksí mismo. Hay suficiente información en el .logarchivo para latexmkdeterminar que el .indarchivo se creó durante la ejecución o latexantes de ser leído y, por lo tanto, para mostrar que no se necesitan ejecuciones adicionales. Agregué esto a mi lista de mejoras para una versión futura de latexmk.

Respuesta2

Para no quitarle nada a la respuesta de John, agregarlo $makeindex = "touch -m %D";al local .latexmkrcproduce un flujo de trabajo automatizado con una sobrecarga casi mínima. En cuyo caso, en mi sistema con este ejemplo, latexsolo se ejecuta una vez. Es decir, esto es (casi) lo más eficiente que las cosas puedan llegar a ser. La condición, por supuesto, es que siempre se use imakeidxwith enable, lo que no es un problema en mi caso.\write18

(*) Los usuarios de Windows pueden obtener una copia en cualquier distribución touch.exemoderna .gnu

información relacionada