为了加快我正在写的一本书的编撰速度,我了解了 tikz 的“外部化”功能。然而,有些图形它会出错,并出现错误
! Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "pgfbugfig/pgfbug-figure1" "\def\tikzexter
nalrealjob{pgfbug}\input{pgfbug}"' did NOT result in a usable output file 'pgfb
ugfig/pgfbug-figure1'
当我使用数据可视化格式时,似乎会发生这种情况。我构建了一个 MWE:
\documentclass[10pt]{book}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{datavisualization}
\usepgfplotslibrary{external}
\tikzexternalize
\tikzsetexternalprefix{pgfbugfig/}
\begin{document}
The first figure:
\begin{center}
\begin{tikzpicture}[>=stealth,domain=-2:2]
\draw[very thin, color=gray] (-2,0) grid (2, 4);
\draw (-2.1, 0) -- (2.1, 0);
\draw (0, 0) -- (0, 4.1);
\draw[thick] plot [smooth](\x,{4*exp(-2*\x*\x)});
\end{tikzpicture}
\end{center}
The second figure:
\begin{center}
\tikz\datavisualization
[scientific axes,
visualize as line]
data {
x, y
0, 0
1, 1
};
\end{center}
\end{document}
如果我运行这个\tikzexternalize
注释掉的程序,它就会工作,我会得到预期的 PDF。启用它后,它会为第一张图片生成一个外部化的 PDF,但第二张图片会出错。
pgfbugfig/pgfbug-figure1.log 文件中的实际错误是:
A tikzpicture has been optimized away. Use '/tikz/external/optimize=false' to d
isable this.
\openout4 = `pgfbugfig/pgfbug-figure1.dpth'.
! Package PGF Math Error: Sorry, an internal routine of the floating point unit
got an ill-formatted floating point number `'. The unreadable part was near ''
有什么提示可以解释这里发生了什么吗?“外部化”是否与数据可视化选项不兼容?如果是这样,我是否可以以某种方式“排除”这些数字,以便我仍然可以享受其他数字的加速?
答案1
这看起来像一个错误,因为该external
库应该与图表一起工作\tikz
,并且它可以与手册中给出的简单示例一起工作。
毫不奇怪,数据可视化模块也加载了fpu
库,这可能暗示了为什么该图表失败而其他图表成功。
在这种情况下,请考虑使用环境的解决方法tikzpicture
。这不会破坏外部化过程。
代码
\documentclass[10pt]{book}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{datavisualization}
\usepgfplotslibrary{external}
\tikzexternalize
\tikzsetexternalprefix{pgfbugfig/}
\begin{document}
The first figure:
\begin{center}
\begin{tikzpicture}[>=stealth,domain=-2:2]
\draw[very thin, color=gray] (-2,0) grid (2, 4);
\draw (-2.1, 0) -- (2.1, 0);
\draw (0, 0) -- (0, 4.1);
\draw[thick] plot [smooth](\x,{4*exp(-2*\x*\x)});
\end{tikzpicture}
\end{center}
The second figure:
\begin{center}
\begin{tikzpicture}
\datavisualization
[scientific axes,
visualize as line]
data {
x, y
0, 0
1, 1
};
\end{tikzpicture}
\end{center}
\end{document}