以下latexmk
仅mode = buildnew
当\includestandalone
Latexmk:未获得稳定文件,已达到 lualatex 的最大运行次数
此消息可能重复之前的消息。Latexmk:处理文件失败:
“lualatex”需要太多遍
latexmk -lualatex -silent -synctex=1 -g -e "$max_repeat=3" -f -interaction=nonstopmode -shell-escape -usepretex=\AtBeginDocument{\printanswersfalse} <file name.tex>
\documentclass{exam}
\usepackage[subpreambles=false]{standalone}
\begin{filecontents*}[overwrite]{diaa_pic.tex}
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[->] (0,1cm)--++(14,-5);
\end{tikzpicture}
\end{document}
\end{filecontents*}
\begin{document}
\begin{figure}
\includestandalone[mode=buildnew]{diaa_pic}
\end{figure}
\end{document}
答案1
问题是由于主文档的编译导致diaa_pic.pdf
创建了一个文件,而该文件在下一次编译期间被读入。该文件中编码了创建日期等,因此每次运行后它都会发生变化pdflatex
,即使视觉形式没有变化。 Latexmk
发现文件在编译后发生了变化,因此它决定需要再次运行。
(顺便说一下,该文档\usepackage{tikz}
在编译之前需要几行。)
两种解决方案:
简单的:安排
latexmk
忽略文件中的相关行pdf
。为此,请将以下几行放入 latexmkrc 文件中:$hash_calc_ignore_pattern{'pdf'} = '^/(CreationDate|ModDate|ID)'; # Also apply the same idea to eps files, so that this code works with latex $hash_calc_ignore_pattern{'eps'} = '^(%%CreationDate: |%DVIPSSource: )'; # In compilation, -shell-escape has to be used: set_tex_cmds( '-shell-escape %O %S' );
想要:在 latexmk 发行版的目录中查找
example_rcfiles
文件tikz-externalized-latexmkrc
,然后使用您需要的内容。(该文件和目录可以doc/support/latexmk
在 TeXLive 或 MiKTeX 发行版的相关部分下找到。) 但请注意,此解决方案需要增强才能处理该问题中的特定文档。
答案2
感谢约翰的回答,我意识到设置选项filecontents
会使每次运行都overwrite
生成更新版本(具有相同内容)。diaa_pic.tex
通过传递mode=buildnew
给\includestandalone
,latexmk
将被迫在每次运行时创建图像,diaa_pic.pdf
因为它的tex
源比它更新。
因此,删除该overwite
选项就足以使一切按预期工作。