我曾经能够使用预览包创建使用 tikz 代码制作的图表的 png 图像,并使用 ghostscript 将 dvips 的 dvi 输出打印到 png 文件。最新版本的 tikz 似乎在某种程度上破坏了这种能力。
如果我使用以下乳胶代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,snakes,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks}
\usepackage[graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}
然后我运行 Latex 来获取 dvi 文件,并运行 dvips 来转换为 postscript。然后我运行 ghostscript 来生成 png,命令如下:
gswin32c.exe -sDEVICE=png16m -dTextAlphaBits=4 -r300 -dGraphicsAlphaBits=4 -dSAFER -q -dNOPAUSE -sOutputFile="tikz_preview_png_problem.png" -f "tikz_preview_png_problem.ps"
在 tikz 2.1 之前,这个方法运行良好,但现在产生以下输出:
Error: /undefined in pgfo
Operand stack:
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-
- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- fa
lse 1 %stopped_push 1878 1 3 %oparray_pop 1877 1 3 %oparray_
pop 1861 1 3 %oparray_pop 1755 1 3 %oparray_pop --nostringval-
- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringv
al-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:1161/1684(ro)(G)-- --dict:0/20(G)-- --dict:74/200(L)-- --dict:95
/300(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is 9094
GPL Ghostscript 8.71: Unrecoverable error, exit code 1
有什么办法可以解决这个问题,这很麻烦,因为我喜欢能够生成高分辨率的 png 矢量图形以用于非乳胶文档或网站等。我在 Windows 上使用 Miktex,并使用 Texniccenter 作为编辑器,以防万一。
答案1
我仔细研究了一下,但还是没能找出 Postscript 管道出了什么问题。我首选的生成独立图像的方法是使用 PDF 管道和 ImageMagickconvert
实用程序。工作流程相当简单:
pdflatex foo.tex
convert -density 300 foo.pdf foo.png
可以找到 Windows 二进制文件这里,但有两点需要注意:
您将需要GhostScript
gswin32c.exe
来从 PDF 或 PS 格式中获取图像。PATH
convert
convert.exe
必须位于 Windows 二进制文件之前,PATH
因为有一个 system32 工具也叫convert.exe
这个,并且它具有相同的名称。或者您必须将其重命名convert.exe
为类似 的名称imconvert.exe
。
这快速环境编辑器是 一个 漂亮 的 工具 , 可以 帮助 您 排序 Windows PATH
.
更新
看来 TikZ 2.10 确实有一个变化破坏了与 Postscript 端预览的兼容性。是 二先前提及此问题的错误报告以及PGF 邮件列表上的帖子把问题集中到一行上pgfsys-dvips.def
。
更新 2
由于问题在于 TikZ 产生损坏的 Postscript 而不是 GhostScript,因此gswin32c
应该能够对 PDF 文件执行转换:
pdflatex foo.tex
gswin32c -sDEVICE=png16m -dTextAlphaBits=4 -r300 -dGraphicsAlphaBits=4 -dSAFER -q -dNOPAUSE -dBATCH -sOutputFile=foo.png foo.pdf
这将省去 ImageMagick 的安装和设置。