使用 gnuplottex 会导致 latexmk 永远编译

使用 gnuplottex 会导致 latexmk 永远编译

编辑:我想我找到了这个问题:GNUplot 在它生成的 *.tex 文件顶部的第二个时间戳中添加了 a,所以 latexmk 当然认为它已经改变了。%% 2021-01-18 11:32:42 AM

我通常用latexmk它来编译我的文档,因为这样可以节省很多手动工作,不用计算需要编译多少次。但是,如果我使用gnuplottex它,每次运行它都会说Changed files, or newly in use since previous run(s): 'loop-gnuplottex-fig1.tex'

这……不应该是真的吗?它可能每次都被写入,但并没有改变。有没有办法解决这个问题,以便对我的文档的微小更改不会触发五次 pdflatex 运行,因为这在我的台式机上需要很长时间,在我的笔记本电脑上则需要无休止的运行。

这是触发此问题的 MWE。它不像我希望的那样容易编译,因为需要安装 Gnuplot 才能运行,然后将三个文件从 GNUplot 的\share\texmf\tex目录结构复制到 TeX 可以找到它们的地方。(根据 GNUplot 中的配置文件,如果您在 GNUplot 之后安装了 LaTeX,这似乎应该会自动发生)。

此外,此 MWE 仅适用于 Windows:如果在 Postix 系统上编译它,则必须取消设置“miktex”选项。

\documentclass{article}
\usepackage{shellesc}
\usepackage{gnuplot-lua-tikz} 
%Note, you need GNUplot installed for this to compile, 
       %and need to copy three files from GNUplot to somewhere TeX can find them!
\usepackage[miktex]{gnuplottex} %MiKTeX means windows since they can't do basic testing, unset if on *nix

\begin{document}
\begin{gnuplot}[terminal=tikz, terminaloptions=color]
plot sin(x)
\end{gnuplot}
\end{document}

我怀疑这个问题可能与这个问题,但是没有实际的例子,所以我不太清楚如何设置我的文档来使用他们所谈论的内容,但听起来它完全绕过了这个包并且大大加快了编译速度。

答案1

在 Ulrike Fischer 的建议下查看 *.tex 文件输出后,我发现了问题。

tex 文件包含精确到秒的日期/时间戳,例如:

%% generated with GNUPLOT 5.4p1 (Lua 5.3; terminal rev. Jun 2020, script rev. 114)
%% 2021-01-18 11:32:42 AM 

这意味着从实际意义上讲,每次输出后文件都会有所不同,并且 latexmk 会认为它需要重新编译它。

了解了这一点后,我发现生成 *.tex 文件的文件是gnuplot-tikz.lua,查看它后我发现了以下内容:

  -- for regression tests etc. we can turn off the timestamp
  notimestamp = false,

似乎没有办法从文本文件或 GNUplot 脚本中设置它,尽管我很容易错过一些东西。编辑gnuplot-tikz.lua和设置它来true修复问题,但远非理想的解决方案。

我把这个写成一个答案,因为它有效,解决问题,但如果其他人写出更好的答案,我将不胜感激。

答案2

处理此问题的另一种方法是配置 latexmk,使其在确定 tex 文件是否已更改时忽略有问题的行。该方法位于%hash_calc_ignore_patternlatexmk 文档中的条目中。应该有效的是将以下内容放入文件latexmkrc

$hash_calc_ignore_pattern{'tex'} = '^%%';

相关内容