A friend recently showed me latexmk
, an alternative to my current setup of using make
to compile complicated tex documents (calling bibtex
and pdflatex
). Latexmk seems cool because it's really tracking all the dependencies and not just recompiling everything. However, it seems to always run pdflatex
in "final draft" mode, even for early passes which might as well use the -draftmode
option. On my thesis (218 page document with figures on roughly every other page), this meant latexmk
took 50s and my makefile
routine took 23s (assuming a cold start).
I guess the sad answer is that it’s impossible to know if the current run of pdflatex
should be the last (and hence should not be using -draftmode
). So I guess latexmk
plays it safe and runs everything without -draftmode
.
My makefile
assumes that I only ever need 3 passes, which I guess is pretty common but by no means universal.
I came up with gnarly alternative, which almost needs a makefile itsel:
latexmk -f -pdf -pdflatex="touch thesis.pdf && pdflatex -draftmode" thesis.tex && rm thesis.pdf && latexmk -pdf thesis.tex
First it runs latexmk
forcing pdflatex
to use -draftmode
, but also always touching the pdf so latexmk
is convinced that it succeeded in making its targets, then before running a final pass with latexmk
I need to remove the pdf so that latexmk
thinks there's something to do. Draftmode passes cost very little so this also runs at about 24s on my thesis.
Wonder if there’s a cleaner way. Especially if thesis.pdf
could be inferred nicely from thesis.tex
(I guess using basename
) and whether I can safely wrap this into an alias:
alias latexmk="..."
Update: Here's a better version, my friend came up with. It still needs the tex filename twice, but at least it's using substitution in the pdflatex
"command" and the -g
option forces latexmk
to run at least once.
latexmk -f -pdf -pdflatex='pdflatex -draftmode %O %S && touch %D' thesis && latexmk -pdf -g thesis