使用 latexmk 与 mpgraphics 时编译次数过多

使用 latexmk 与 mpgraphics 时编译次数过多
\documentclass{article}
\usepackage{mpgraphics}
\begin{document}
\begin{figure}
.
\label{fig:a}
\caption{a}
\end{figure}
\begin{mpinline}
draw (20,20)--(0,0)--(0,30)--(30,0)--(0,0)
\end{mpinline}
\ref{fig:a}
\end{document}

我使用 MikTex 2.9 和 TexMaker。我使用 编译了这个 MWE latexmk。更准确地说,命令是:latexmk -e "$pdflatex=q/pdflatex -synctex=1 -shell-escape -interaction=nonstopmode/" -pdf %.tex

我的文档一遍又一遍地编译。日志中写道:

Rule 'pdflatex': File changes, etc: Changed files, or newly in use since previous run(s): 'C:/tmp/tmp-fig1.pdf' 'tmp-fig1.pdf' ------------ Run number 1 of rule 'pdflatex' ------------ ------------ Running 'pdflatex -synctex=1 -shell-escape -interaction=nonstopmode -recorder "tmp.tex"' ------------

Rule 'pdflatex': File changes, etc: Changed files, or newly in use since previous run(s): 'C:/tmp/tmp-fig1.pdf' 'tmp-fig1.pdf' ------------ Run number 2 of rule 'pdflatex' ------------ ------------ Running 'pdflatex -synctex=1 -shell-escape -interaction=nonstopmode -recorder "tmp.tex"' ------------

Rule 'pdflatex': File changes, etc: Changed files, or newly in use since previous run(s): 'C:/tmp/tmp-fig1.pdf' 'tmp-fig1.pdf' ------------ Run number 3 of rule 'pdflatex' ------------ ------------ Running 'pdflatex -synctex=1 -shell-escape -interaction=nonstopmode -recorder "tmp.tex"' ------------

Rule 'pdflatex': File changes, etc: Changed files, or newly in use since previous run(s): 'C:/tmp/tmp-fig1.pdf' 'tmp-fig1.pdf' ------------ Run number 4 of rule 'pdflatex' ------------ ------------ Running 'pdflatex -synctex=1 -shell-escape -interaction=nonstopmode -recorder "tmp.tex"' ------------

Rule 'pdflatex': File changes, etc: Changed files, or newly in use since previous run(s): 'C:/tmp/tmp-fig1.pdf' 'tmp-fig1.pdf' ------------ Run number 5 of rule 'pdflatex' ------------ ------------ Running 'pdflatex -synctex=1 -shell-escape -interaction=nonstopmode -recorder "tmp.tex"' ------------

最后,它编译了五次,比必要的次数多了 3 次。
我怀疑原因是结果的 pdfmpinline不是二进制相等的(它们包含时间戳或类似的东西?),这导致 latexmk 认为它需要再次编译。

当编译很长的文档时,这种行为确实很烦人,因为它会浪费大量时间。可以修复吗?

答案1

看起来.pdf文件确实在被查看是否有变化,当然每次都会发生变化。在我的实验中,latexmk实际上放弃了。

这毫无问题:

\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{figure}
.
\label{fig:a}
\caption{a}
\end{figure}
\begin{mpost}[use]
draw (20,20)--(0,0)--(0,30)--(30,0)--(0,0)
\end{mpost}
\ref{fig:a}
\end{document}

答案2

.pdf由于时间戳等原因,生成的文件确实每次都会发生变化。(只需.pdf在连续的运行中比较生成的文件即可。)您可以通过将以下内容放入 的初始化文件之一中来配置latexmk忽略文件中的相关行:.pdflatexmk

$hash_calc_ignore_pattern{'pdf'} = 
   '^/CreationDate\('
   .'|^/ModDate\('
   .'|^/ID \['
   .'|^<rdf:RDF '
   .'|^<rdf:Description rdf:about'
   .'|^<xmp:CreateDate>';

相关内容