我尝试使用 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}
到目前为止我尝试了以下事情:
- 尝试不带前缀运行它
它可以工作,但所有文件都将在主文件夹中创建
- 使用 \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 文件!–
- 使用前者 \tikzset 和前缀选项一起使用如果之前没有创建图片,我将再次获取 md5 信息。如果我在第一次运行中没有使用前缀选项,则图片将在构建文件夹中创建。在第二次运行中重新打开前缀选项,它将不会生成任何错误并使用之前生成的图片。
我认为这是一个非常糟糕的解决方法。 有没有更好的解决方案?
更改 tikz 图片的文件夹没有什么区别。
在草稿模式和 tikzset 和前缀集下运行示例将正常运行,但图片框具有标准尺寸。
答案1
-output-directory=build
出现此问题的原因是您在运行时使用了标志pdflatex
。
为了使解释不那么模棱两可,让我们重命名文件夹:
- 您正在使用标志
-output-directory=foo
; - 您的
.tex
文件位于名为 的文件夹中root
; - 您在文件中使用以下宏
.tex
:\tikzexternalize[prefix=bar/]
。
实际情况是,外部化在文件夹中创建了.pdf
(以及.log
和文件) 。但是,.dpth
root/bar/
外化也创造了“输出文件”(实际上.md5
)然后将它们存储到...root/
foo/
bar
。
出现此错误的原因是root/foo/bar
您的计算机上不存在该文件夹(您只创建了root/bar
)。创建该文件夹应该可以解决问题。
答案2
你可以试试:
\tikzexternalize[prefix=build/] % activates folder access folderName=build
和:
\tikzsetnextfilename{TestFigure} % filename = TestFigure
我的解决方案是这样的:
编译命令:
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}