如何保存 tikz 生成的图形并将其导出为 EPS 文件

如何保存 tikz 生成的图形并将其导出为 EPS 文件

我使用 MiKTeX 2.9 和tikzTeXworks 打包并制作简单的图形,这些图形通过 pdfLaTeX 保存在 pdf 文件中。我希望将它们保存为 EPS 文件。我在这里阅读: 从 TikZ 导出 eps 图形 我使用一个简单的例子

\documentclass{article}
\usepackage{tikz}

% set up externalization
\usetikzlibrary{external}
\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error
-interaction=batchmode -jobname "\image" "\texsource" && 
dvips -o "\image".ps "\image".dvi &&
ps2eps "\image.ps"}}
\tikzexternalize[shell escape=-enable-write18] % MikTeX uses a -enable-write18 instead of --shell-escape.

\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1cm);
\end{tikzpicture}
\end{document}

并出现以下错误:

===== 'mode=convert with system call': Invoking 'latex -halt-on-error -interact
ion=batchmode -jobname "untitled-1-figure0" "\def\tikzexternalrealjob{untitled-
1}\input{untitled-1}" && dvips -o "untitled-1-figure0".ps "untitled-1-figure0".
dvi && ps2eps "untitled-1-figure0.ps"' ========

! Package tikz Error: Sorry, the system call 'latex -halt-on-error -interaction
=batchmode -jobname "untitled-1-figure0" "\def\tikzexternalrealjob{untitled-1}    input{untitled-1}" && dvips -o "untitled-1-figure0".ps "untitled-1-figure0".dvi
 && ps2eps "untitled-1-figure0.ps"' did NOT result in a usable output file 'unt
itled-1-figure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that yo
u have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. So
metimes it is also named 'write 18' or something like that. Or maybe the comman
d simply failed? Error messages can be found in 'untitled-1-figure0.log'. If yo
u continue now, I'll try to typeset the picture.

See the tikz package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.15 \end{tikzpicture}  

我发现很多人都遇到了同样的错误。我不知道该怎么办。有人能帮忙吗?

答案1

有时,在命令窗口中手动输入有用的命令似乎比执行支持 LaTeX 的文本编辑器的无休止的配置步骤更容易。考虑以下内容myfile.tex

\documentclass[11pt]{book}
\usepackage{tikz}
\pgfrealjobname{myfile}
\begin{document}
\beginpgfgraphicnamed{myfile-f1}%
\begin{tikzpicture}
\fill(0,0) rectangle (4,4);
\end{tikzpicture}
\endpgfgraphicnamed
\end{document}

在你的文件所在的工作文件夹中打开这样的命令窗口myfile.tex,并进行如下编译:

latex --jobname=myfile-f1 myfile.tex

然后

dvips myfile-f1.dvi

您将获得所需的正确裁剪的myfile-f1.eps文件。

答案2

以下是 MiKTeX 用户的两条路线。第一条类似于这个帖子,但有附加说明。

使用pdflatex+pdftops使用 TeXworks

  1. 下载pdftopsfoolabs.com(PDF 到 PS/EPS 转换器)。您可以在以下位置找到适用于 Windows 的 32 位和 64 位二进制文​​件xpdfbin-win-3.03.zip。要安装它,请pdftops.exe从此文件中提取并将其复制到安装目录C:\Program Files\Xpdf\bin。请记住添加C:\Program Files\Xpdf\bin到系统变量Path开始菜单-> 右键单击电脑->特性->高级系统设置->环境变量在下面先进的tab -> 查找系统变量Path并编辑其值)。

  2. 在 TeXworks 中,转到优先->排版选项卡,并添加--shell escape到传递给编译器的参数列表中pdflatex,如下所示。在此处输入图片描述

现在pdflatex运行

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{external} % set up externalization

\tikzexternalize[shell escape=-enable-write18] % activate externalisation

\tikzset{external/system call={pdflatex \tikzexternalcheckshellescape -halt-on-error
-interaction=batchmode -jobname "\image" "\texsource" && 
pdftops -eps "\image.pdf"}}

\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1cm);
\end{tikzpicture}
\end{document}

在 TeXworks 中您将获得 EPS 格式的图形。

使用乳胶+ps2eps与 TeXnicCenter

  1. 下载ps2eps并按照说明进行安装ps2eps。你会发现一些额外的说明这里在 Windows 下安装。

  2. 你还需要Ghostscript以及 Perl 解释器(一个选项是免费的 ActivePerl“社区版”,可从 activestate.com/activeperl)。

    (该ps2eps脚本假定您已安装 Ghostscript 的 32 位 Windows。如果您安装 64 位版本,则ps2eps.pl必须按照本答案末尾的说明更改文件。)

  3. 技术中心,添加到-enable-write18传递给编译器的参数列表中latex(转到建造,然后点击定义输出配置文件),如下图所示。在此处输入图片描述

现在你可以继续latex运行

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{external} % set up externalization

\tikzexternalize[shell escape=-enable-write18] % activate externalisation

\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error
-interaction=batchmode -jobname "\image" "\texsource" && 
dvips -o "\image".ps "\image".dvi &&
ps2eps -l "\image.ps"}}

\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1cm);
\end{tikzpicture}
\end{document}

在 TeXnicCenter 中您将获得 EPS 格式的图形。

如果您安装了 64 位版本的 Ghostscript,则需要ps2eps.pl使用文本编辑器打开并将两次出现的 替换gswin32cgswin64c

答案3

另一种回应是ltximg 脚本自动化此过程,单独的图像文件将它们作为图像(或使用\input{test-tkz-1.tex})包含在内。ltximg脚本可以执行以下操作:

$ ltximg  --eps --subenv --imgdir=mypics  --prefix=tkz -o test-out test.tex

现在您将拥有一个test-out.textikzpicture环境转换为图像的新文档(保留字体的一致性),并且您还将 tikzpicture在单独的文件中拥有每个环境(以防您需要一些额外的修改)和一个test-all.tex包含(仅)所有内容的文件tikzpicture

首先检查文档,查看输入文件必须满足的选项和条件。

相关内容