86

我正在使用 TikZ 在 LaTeX 中绘制图表,然后我想将其隔离为图像文件以放到网上。我正在使用 TeXnicCenter 来编辑源代码。

有没有一种方法可以直接提取这些图表而无需从完成的 PDF 文件中提取它们?

4

6 回答 6

68

我会推荐以下方法。将有问题的 TikZ 图片放在一个单独的文件中,并使用standalone该类独立编译它。它使用preview其他答案中提到的包。要将图片包含在主文档中,请先在其中加载standalone ,然后\input对图片文件使用命令。

这将允许您获得没有边距的 TikZ 图片的单个 PDF。然后,您可以使用 PDF 到 PNG 转换器来获得 PNG(推荐用于图纸的网络发布)。SVG 格式会更好,因为它是矢量格式,但并非所有浏览器都能显示它。

这里有一些示例代码。TikZ 图片文件(例如pic.tex):

\documentclass{standalone}
\usepackage{tikz}
% all other packages and stuff you need for the picture

\begin{document}
\begin{tikzpicture}
% your picture code
\end{tikzpicture}
\end{document}

主要文件:

\documentclass{article} % or whatever class you are using
\usepackage{standalone}
\usepackage{tikz}
% All other packages required
\begin{document}
% Text text text
% somewhere where you want the tikz picture
\input{pic}
% Text text text
\end{document}

然后编译图片并转换它,例如,使用 ImageMagick:

pdflatex pic
convert -density 600x600 pic.pdf -quality 90 -resize 800x600 pic.png

或尝试 SVG:

convert pic.pdf pic.svg
于 2010-04-24T08:14:00.690 回答
30

跟进我的评论:Cirkuit通过运行以下命令序列将 TikZ 图转换为图像:

pdflatex img.tex
pdftops -eps img.pdf
convert -density 300 img.eps img.png

img.tex将是一个遵循此模板的 LaTeX 文件:

\documentclass{article}
\usepackage{tikz,amsmath,siunitx}
\usetikzlibrary{arrows,snakes,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks}
\usepackage[graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}
\begin{document}
\begin{tikzpicture}
    % (your TikZ code goes here)
\end{tikzpicture}
\end{document}

如果您能够使用 Cirkuit 或类似的编辑器,或者为自己编写一个脚本将您的图表放入该模板并运行适当的工具,您将有一个快速的方法将 TikZ 代码转换为 PNG 图像。

为了更直接地回答您的问题...不,我不知道在某些阶段无需通过 PDF 文件(或至少 DVI)即可将 TikZ 图直接转换为 PNG 的任何方法。

于 2010-04-23T21:19:25.073 回答
11

请参阅 TikZ 手册部分“外部化图形”。这使您可以制作图形的 EPS 或 PDF 版本。我使用 EPS 文件,将它们转换为 TIFF,然后可以将它们放在我需要的任何地方。

于 2010-04-24T15:57:19.520 回答
7

我通常使用这些方面的东西:

\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
%\setlength\PreviewBorder{2mm} % use to add a border around the image
\usepackage{tikz}
\begin{document}
\begin{preview}
\begin{tikzpicture}
    \shade (0,0) circle(2); % background
    \draw (0,0) circle(2);  % rim
    \draw (.75,1) circle(.5);   % right eye
    \fill (.66,.9) circle(.25); % right pupil
    \draw (-.75,1) circle(.5);  % left eye
    \fill (-.66,.9) circle(.25);% left pupil
    \fill (.2,0) circle (.1);   % right nostril
    \fill (-.2,0) circle (.1);  % left nostril
    \draw (-135:1) arc (-135:-45:1) -- cycle; % mouth
  \end{tikzpicture}
\end{preview}
\end{document}

生成的 pdf 文件包含独立的 TikZ 图片。要将其转换为任何其他文件格式,只需使用 Gimp 打开即可。

于 2010-04-23T23:31:51.887 回答
2

我使用这个 Makefile 规则从每个包含一个 tikzpicture 的 .tex 文件创建 PNG 文件和缩略图。它的工作原理类似于在TeXample.net上创建图像:

%.png: %.tex
        @sed 's/^\\begin{文档}/\
\\pgfrealjobname{dummy}\\begin{document}\\beginpgfgraphicnamed{example}/' $< | \
sed 's/^\\end{document}/\\endpgfgraphicnamed\\end{document}/' > example.tex ; \
        pdflatex --jobname=example example.tex ; \
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -sDEVICE=png16m \
-sOutputFile=$@ -dBATCH example.pdf ; \
        转换 -thumbnail 200 $@ $(addsuffix .thumb.png, $(basename $@)) ; \
        mv example.pdf $(addsuffix .pdf, $(basename $<)) ; rm 示例。*

ghostview ( gs) 可能可以替换为convert,您可以替换example为另一个临时文件前缀。

于 2010-08-10T20:21:29.793 回答
2

Windows:对于像我这样的菜鸟来说是完全明确的

在您的乳胶代码中使用上述 Habi 建议的 prewiew 包来删除边距。

安装 MIktex 和 Inkscape 并使用以下 bat 文件:

cd = "C:\Path to tex"
pdflatex input-file-name.tex
"C:\Program Files (x86)\Inkscape\inkscape.exe" input-file-name.pdf --export-plain-svg=output-file-name.svg
于 2012-02-07T14:15:46.723 回答