eficiência interoperacional latexmk / imakeidx

eficiência interoperacional latexmk / imakeidx

imakeidxe latexmksão dois dos meus utilitários favoritos de toda a época do TeX, especialmente em relação às compilações do tamanho de livros (muito obrigado @egreg e @John Collins!). Além da facilidade de produzir vários índices, uma das propriedades mais úteis imakeidxé a subcompilação do índice de compilação no documento (como desejo glossariese biblatexpoderia ser estendida para se comportar da mesma maneira!)

Dado MWE:

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

\begin{document}

This.\index{this}

\printindex

\end{document}

makeindexé invocado uma vez no meio da compilação direta latex. No entanto, ao usar latexmk -recorder (etc.), latexmkignora o novo .indarquivo imakeidxproduzido no meio e invoca makeindexo .idxarquivo novamente.

Claro, esta ineficiência é dificilmente perceptível com este brinquedo MWE. Mas, dados os documentos do tamanho de um livro, muitos arquivados, com vários índices grandes, biblatex/ biber, vários glossariese vários tocs que necessitam de várias passagens antes de serem concluídos, o trabalho extra que latexmkcria (em vez de eliminar) testa meu senso de elegância (e às vezes minha paciência) muito.

Como, então, posso melhorar latexmka ânsia excessiva de invocar makeindexem documentos usando imakeidx? Espero que algumas regras simples sejam adicionadas ao meu arquivo .latexmkrc. Estou particularmente interessado em manter o número de makeindexinvocações no mínimo em várias passagens (não mostrado neste MWE) - digamos, no máximo duas invocações por qualquer arquivo de índice.

[[ Pontos de bônus para extensão glossariese/ou biblatexcapacidade de compilação em documentos à la imakeidxmarca de \write18mágica. ; ) ]]

Responder1

Não vejo nenhuma maneira de configurar a versão atual latexmkpara evitar que ela faça execuções extras. Não apenas é makeindexexecutado uma segunda vez latexmk, mas também o é latex, portanto o tempo de execução é duplicado, o que é uma penalidade ruim em um documento grande.

Para corrigir isso, são necessárias mudanças em latexmksi. Há informações suficientes no .logarquivo para latexmkdeterminar que o .indarquivo foi criado durante a execução latexantes de ser lido e, portanto, para mostrar que execuções extras não são necessárias. Adicionei isso à minha lista de melhorias para uma versão futura do latexmk.

Responder2

Para não tirar nada da resposta de John, adicionar $makeindex = "touch -m %D";ao local .latexmkrcproduz um fluxo de trabalho automatizado com sobrecarga quase mínima. Nesse caso, no meu sistema com este exemplo, latexé executado apenas uma vez. Ou seja, isso é (quase) tão eficiente quanto as coisas podem ser. A ressalva, claro, é que imakeidxwith \write18enabled seja sempre usado – o que não é um problema no meu caso.

(*) Os usuários do Windows podem adquirir uma cópia em qualquer distribuição touch.exemoderna .gnu

informação relacionada