A friend recently showed me
latexmk, an alternative to my current setup of using
make to compile complicated tex documents (calling
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
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
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:
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