tcolorbox 铸造库具有 python3 非确定性

tcolorbox 铸造库具有 python3 非确定性

软件包的后续版本tcolorboxminted允许使用其库格式化源代码(使用minted包裹)。

当文档被编译时,.pyg会生成一个临时文件,文件扩展名是 LaTeX 代码,该文件由pygmentizePython 应用程序。

我注意到,使用 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交互所致。基本上,由于调用的方式,临时文件不会被删除。(该命令忽略了删除其临时文件。)这mintedtcolorboxtcolorboxminted\usemintedstyleminted错误已在 中得到修复开发版本,它使用更高效的方案来删除临时文件。只需修复错误minted即可解决您的问题,而无需规则latexmk,因为所有.pyg文件都将被删除。

.pyg文件通常每次编译都会使用多次,但我认为在示例中只使用一次(由于 的工作原理tcolorbox)。因此,如果文档没有改变,那么其内容也不应该改变,即使在中间步骤也是如此。我不确定 Python 3 可以做哪些不同的事情。也许是 Pygments 中的一些东西,尽管这似乎不太可能。

相关内容