使用 pdfLaTeX 将 TikZ 转换为 EPS

使用 pdfLaTeX 将 TikZ 转换为 EPS

我希望将我的 TikZ 图像转换为 EPS 格式并保存在单独的文件中,同时 pdfLaTeX 编译我的文档,这是理想的情况。请注意,我使用的是 MikTeX 和 TeXstudio。

否则,我希望能够使用 pdfLaTeX 将 TikZ 图片从 LaTeX 文件转换为 EPS。

我试过找到的方法这里但图片无法完全正确显示。图片有部分缺失,而且以这种方式转换每个图形非常麻烦。

下面是示例代码。

测试文本

\documentclass[a4paper,10pt]{article}

\usepackage{tikz}
\usepackage{pgf}
\usetikzlibrary{arrows, calc, decorations.pathmorphing, shapes}

\pgfrealjobname{test}


\begin{document}
    \beginpgfgraphicnamed{levels}
    \begin{tikzpicture}[scale=1, font=\normalsize, every node/.append style={transform shape}]
        \node[rectangle, draw, minimum width=1.5em, minimum height=1.5em, line width=0.05em] (n1) at (0,0) {1};
        \node[rectangle, draw, minimum width=1.5em, minimum height=1.5em, line width=0.05em] (n2) at (2,0) {2};     
    \end{tikzpicture}
    \endpgfgraphicnamed
\end{document}

在命令提示符中:

latex --jobname=levels test.tex
dvips -o levels.eps levels.dvi

有任何想法吗?

答案1

根据@Ignasi 的回答和他发布的有关使用 PdfLaTeX 编辑器的链接,解决方案如下:

foolabs.com下载 xpdf 并解压到计算机上的某个位置。

计算机属性高级系统设置 -> 环境变量并添加你的特定路径xpdfbin\bin到路径。这将使 Windows 能够找到该文件夹​​并使用可执行文件pdftops在命令行上。

特克斯工作室选项 -> 命令并将 PdfLaTeX 行更改为:

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

当您点击文件的编译按钮时,这将告诉 TeXstudio 在命令行上使用上述内容。

最后,在你的LaTeX 文档,在序言部分添加以下内容:

\usetikzlibrary{external}

\tikzset{external/system call={pdflatex \tikzexternalcheckshellescape 
                                        -halt-on-error
                                        -interaction=batchmode 
                                        -jobname "\image" "\texsource"
                                        && pdftops -eps "\image.pdf"}}
\tikzexternalize[shell escape=-enable-write18]

然后,您可以根据自己的心意进行编译,因为 PdfLaTeX 将生成所有 Tikz 绘图的 pdf 和 eps 版本!

有关 LaTeX 构建的其他信息以及如何针对您的特定情况进行构建,可以在 @Ignasi 建议的这两个链接中找到:

  1. 如何保存由 tikz 生成的图形 - 保存 - 导出为 eps 文件
  2. 从 tikz 导出 EPS 图形

此外,此技术还可以使用 xpdf 包中的其他 PDF 转换工具,例如pdftopng

答案2

这就是externalizeTikZ 库所做的。尝试使用命令pdflatex --shell-escape levels(即levels文件的名称)编译下一个代码。结果,您将获得一个pdf包含整个文档的文件,还有另一个levels-figure0.pdf包含该TikZ图的文件:

在此处输入图片描述

实际上,您将获得与源文件levels-figureXXX.pdf一样多的文件。下次您再次编译源文件时,所有文件都不会被处理,并会被相应的结果替换。tikzpictures.textikzpictures.pdf

如果在此期间任何 tikzpicture 发生了变化,则会再次处理,但仅限于已更新的内容。

可以通过引入库中的命令和选项来更改此默认行为,externalize其信息可以在“50 外部化库”一节(第 597-610 页)中找到pgfmanual

\documentclass[a4paper,10pt]{article}

\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

\usepackage{lipsum}

\begin{document}%
\lipsum[1]

\begin{tikzpicture}[scale=1, font=\normalsize, every node/.append style={transform shape}]
\node[rectangle, draw, minimum width=1.5em, minimum height=1.5em, line width=0.05em] (n1) at (0,0) {1};
\node[rectangle, draw, minimum width=1.5em, minimum height=1.5em, line width=0.05em] (n2) at (2,0) {2};     
\end{tikzpicture}

\lipsum[2]
\end{document}

答案3

作为使用方法的替代方案,\usetikzlibrary{external}如果文档是稳定的并且您将对 进行少量修改tikzpicture,最好将其处理为单独的文件并将它们作为图像 (或\input{test-tkz.tex}) 包含。ltximg您可以用脚本执行以下操作:

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

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

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

相关内容