软件包的后续版本tcolorbox
minted
允许使用其库格式化源代码(使用minted
包裹)。
当文档被编译时,.pyg
会生成一个临时文件,文件扩展名是 LaTeX 代码,该文件由pygmentize
Python 应用程序。
我注意到,使用 Python3 时,生成的文件每次运行可能都不同,每次运行的行排序都不同。每次运行时行都相同,但顺序不一定相同。
这使得latexmk
编译文档时无限期运行。发生这种情况是因为latexmk
根据输入文件的校验和确定是否需要重新运行 latex 编译器。
Python2 中没有出现这种不良行为。
这是一个最小的工作示例test.tex
:
\documentclass{article}
\usepackage[minted]{tcolorbox}
\begin{document}
\begin{tcblisting}{listing engine=minted, minted language=java}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
\end{tcblisting}
\end{document}
编译命令:
latexmk -pvc -pdf -latexoption=-shell-escape test
latexmk
其输出消息中有:
Latexmk: applying rule 'pdflatex'...
Rule 'pdflatex': File changes, etc:
Changed files, or newly in use since previous run(s):
'test.pyg'
Latexmk: Maximum runs of pdflatex reached without getting stable files
我正在寻找tcolorbox
使用 Python3 的修复程序。
答案1
我认为你想%hash_calc_ignore_pattern
看看latexmk docs
。我期望类似$hash_calc_ignore_pattern{'pyg'} = '.*'
; 的规则可以工作。据我所知,没有办法只忽略具有特定扩展名的文件,这会更有效率。
该.pyg
文件是 生成的临时文件。它将在编译结束时minted
自动删除。它minted
是当我在示例tcblisting
中用替换环境时,删除了它。但是它minted
不是在使用环境时删除。这是由于 中的错误与源tcblisting
交互所致。基本上,由于调用的方式,临时文件不会被删除。(该命令忽略了删除其临时文件。)这minted
tcolorbox
tcolorbox
minted
\usemintedstyle
minted
错误已在 中得到修复开发版本,它使用更高效的方案来删除临时文件。只需修复错误minted
即可解决您的问题,而无需规则latexmk
,因为所有.pyg
文件都将被删除。
该.pyg
文件通常每次编译都会使用多次,但我认为在示例中只使用一次(由于 的工作原理tcolorbox
)。因此,如果文档没有改变,那么其内容也不应该改变,即使在中间步骤也是如此。我不确定 Python 3 可以做哪些不同的事情。也许是 Pygments 中的一些东西,尽管这似乎不太可能。