3

Correct me if I am wrong, when latexmk determines if it need another run, among other things, it look into the fdb file, which has a list of input files. It compare each file's hash against stored value to see it has changed, and if yes, the associated rule is re-run.

This is causing problem for me for one type of file, the cache file of opentype fonts written by luaotfload, some compiled luc files. (Again, correct me if I am wrong), the contents of the luc file will dependent on the contents of the documents of that the font in question was used. So if the document used some new features or glyphs that has not been cached yet, the cache file will change. And cause latexmk to re-run its pdflatex rule (I set the custom $pdflatex variable to use lualatex).

So far this is fine for a single document. At worst it will occasionally cause one additional one that would otherwise be unnecessary because of the updated cache file. However, the real trouble is that it prevent parallel run of lualtex on multiple documents.

Say I have a dozen documents, each about 5000+ pages. They use the same fonts. But they are independent otherwise. It makes perfect sense to compile multiple of them in parallel. With Arno Pro, and protrusions turned on, it is difference between a little more than 5 minutes and half an hour on a recent quad core CPU. But because luaotfload will want to write the cache file for different documents (some of them will fail because of race condition, but that is actually fine). And latexmk will sometime see the luc file getting updated constantly. And it will decide that each document will need another run and in the end, each document end up with the maximum run (default is 5), instead of just one it needs.

(Sorry for the length explanation of the background of the questions, please correct me if I am misunderstanding any aspects of the process).

One solution I think should work is to ask latexmk to ignore the cache files as input. But I haven't find a satisfactory solution so far. And that is my question.

One thing that come in mind is to disable recorder, however, that is undesirable since in quite a few cases it does improve accuracy of dependency detection.

  • With the present version of latexmk, there's a trick to get changes in the luc files ignored. This to put $hash_calc_ignore_pattern{'luc'}='^'; in an initialization file. This specifies a pattern (regular expression) for lines to be ignored when latexmk tests whether an luc file has changed. The pattern here is matched by every line. Let me know if this works. – John Collins Jan 12 '17 at 2:35
  • @JohnCollins Thanks! I know of $hash_calc_ignore_pattern but didn't think of ^. How stupid was me. If you can write an answer, I will accept it. – Yan Zhou Jan 12 '17 at 8:49
3

There's a trick to get changes in the luc files ignored. This is to put

$hash_calc_ignore_pattern{'luc'}='^';

in an initialization file. This specifies a pattern (regular expression) for lines to be ignored when latexmk tests whether an luc file has changed. The pattern here is matched by every line.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.