使用 tikz externalize 时出错:无法写入 md5 文件

使用 tikz externalize 时出错:无法写入 md5 文件

我尝试使用 externalize 库。当我的所有文件都位于同一文件夹中时,它工作正常。通常我使用子文件夹作为构建文件夹,所有生成的文件都应存储在该文件夹中。使用 externalize 的前缀进行设置时,我收到一条错误消息,我觉得这很奇怪。

我究竟做错了什么?

这是一个抛出错误消息的 MWE!我无法在文件“build/Test-figure0.md5”上写入

我正在使用 TexStudio 和 Texlive 2014。为了进行编译,我使用以下命令:

pdflatex.exe -synctex=1 -interaction=nonstopmode -shell-escape -output-directory=build %.tex

这是一个不起作用的例子:

\documentclass[english]{scrbook}

\usepackage{tikz} 
\usepackage{pgfplots}

\pgfplotsset{compat=newest}
\usepgfplotslibrary{external} 
\tikzset{external/up to date check={md5}}
\tikzset{external/mode=convert with system call} 
\tikzexternalize 
\tikzsetexternalprefix{build/}

\begin{document}

\usetikzlibrary{arrows}
\tikzstyle{myedgestyle} = [diamond-open diamond]
\begin{tikzpicture}

\node (v2) at (2,4) {};
\node (v1) at (-0.5,2) {};
\draw [diamond-open diamond] (v1) edge (v2);
\end{tikzpicture}

\end{document}

到目前为止我尝试了以下事情:

  1. 尝试不带前缀运行它

它可以工作,但所有文件都将在主文件夹中创建

  1. 使用 \tikzset{external/system call={pdflatex \tikzexternalcheckshellescape -halt-on-error -output-directory=build -interaction=batchmode -jobname "\image" "\texsource"}} 而不使用前缀选项来更改构建位置

它在构建目录中创建图片,但我会收到此错误: ===== 图像“Test-figure0”是最新的。 ====== !pdfTeX 错误:pdflatex.exe(文件 Test-figure0.pdf):找不到图像文件 ==> 发生致命错误,没有生成输出 PDF 文件!–

  1. 使用前者 \tikzset 和前缀选项一起使用如果之前没有创建图片,我将再次获取 md5 信息。如果我在第一次运行中没有使用前缀选项,则图片将在构建文件夹中创建。在第二次运行中重新打开前缀选项,它将不会生成任何错误并使用之前生成的图片。

我认为这是一个非常糟糕的解决方法。 有没有更好的解决方案?

  1. 更改 tikz 图片的文件夹没有什么区别。

  2. 在草稿模式和 tikzset 和前缀集下运行示例将正常运行,但图片框具有标准尺寸。

答案1

-output-directory=build出现此问题的原因是您在运行时使用了标志pdflatex


为了使解释不那么模棱两可,让我们重命名文件夹:

  • 您正在使用标志-output-directory=foo
  • 您的.tex文件位于名为 的文件夹中root
  • 您在文件中使用以下宏.tex\tikzexternalize[prefix=bar/]

实际情况是,外部化在文件夹中创建了.pdf(以及.log和文件) 。但是,.dpthroot/bar/外化也创造了“输出文件”(实际上.md5)然后将它们存储到...root/foo/bar

出现此错误的原因是root/foo/bar您的计算机上不存在该文件夹(您只创建了root/bar)。创建该文件夹应该可以解决问题。

答案2

你可以试试:

\tikzexternalize[prefix=build/] %  activates folder access folderName=build

和:

\tikzsetnextfilename{TestFigure} % filename = TestFigure

我的解决方案是这样的:

  1. 编译命令:

    pdflatex -shell-escape tikzImageCreate

2.tikzImageCreate.tex: (.tex 文件名必须与上面的命令相同(参见1.)

\documentclass{minimal}
%compile with: pdflatex -shell-escape tikzImageCreate

\usepackage{tikz}

\usetikzlibrary{external}

% storage location
\tikzexternalize[prefix=build/] %  your external folderName= build
\usetikzlibrary{external}

\begin{document}
%filename of the tikz fig.,
\tikzsetnextfilename{TestFigure} % your name for the tikz fig.for example filename=TestFigure
\begin{tikzpicture}
\node (v2) at (2,4) {};
\node (v1) at (-0.5,2) {};
\draw (v1) edge (v2);
\end{tikzpicture}

\end{document}   

相关内容