编辑:我想我找到了这个问题: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_pattern
latexmk 文档中的条目中。应该有效的是将以下内容放入文件latexmkrc
中
$hash_calc_ignore_pattern{'tex'} = '^%%';