![使用 latexmk 与 mpgraphics 时编译次数过多](https://linux22.com/image/252345/%E4%BD%BF%E7%94%A8%20latexmk%20%E4%B8%8E%20mpgraphics%20%E6%97%B6%E7%BC%96%E8%AF%91%E6%AC%A1%E6%95%B0%E8%BF%87%E5%A4%9A.png)
\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
忽略文件中的相关行:.pdf
latexmk
$hash_calc_ignore_pattern{'pdf'} =
'^/CreationDate\('
.'|^/ModDate\('
.'|^/ID \['
.'|^<rdf:RDF '
.'|^<rdf:Description rdf:about'
.'|^<xmp:CreateDate>';