tags:

views:

790

answers:

5

I'm using TikZ to draw diagrams in LaTeX that I then want to isolate as image files to put online. My guess is there is a way to extract these diagrams directly without having to tease them out of the finished .pdf file. How would I go about doing that? (If it matters, I'm using TeXnicCenter.)

+5  A: 

Following up on my comment: Cirkuit converts TikZ diagrams into images by running something like the following sequence of commands:

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

Here img.tex would be a LaTeX file that follows this template:

\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}

If you are able to use Cirkuit or a similar editor, or write a script for yourself to put your diagram into that template and run the appropriate tools, you'll have a quick way to convert TikZ code into a PNG image.

To answer your question more directly... no, I don't know of any way to convert a TikZ diagram directly to PNG without going through a PDF file (or at least DVI) at some stage.

David Zaslavsky
+1 Works like a charm!
Bart Kiers
Thanks! All I wanted to avoid was having to manually isolate the diagrams, so this should work fine.
Qiaochu Yuan
+3  A: 

I'm generally using something along these lines:

\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}
Habi
+3  A: 

Hi,

I would recommend the following approach to you. Place the tikz picture in a separate file and use the 'standalone' class to compile it standalone. It uses the 'preview' package mentioned in the other answers. To include the picture in the main document load the 'standalone' package there first and use \input on the picture file.

This will allow you to get a single PDF of the tikz picture without margins. Then you can use a PDF-to- say PNG converter to get a PNG (recommended for web publishing of drawings). The SVG format would be nicer, because it's a vector format, but not all browsers might be able to display it.

Here some example code:

The tikz picture file (e.g. '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}

The main 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}

Then compile the picture and convert it, e.g. with ImageMagick (e.g. under Linux):

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

or try SVG:

convert pic.pdf pic.svg

Regards, Martin

Martin Scharrer
+1  A: 

See the Tikz manual section "Externalizing Graphics". This lets you make EPS or PDF versions of your graphics. I use EPS files, convert them to TIFFs and can then put them wherever I need to.

Joseph Wright
A: 

I use this to Makefile rule create PNG files and thumbnails from .tex files that contain one tikzpicture each. It works similar to the creation of images at TeXample.net:

%.png: %.tex
        @sed 's/^\\begin{document}/\
\\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 ; \
        convert -thumbnail 200 $@ $(addsuffix .thumb.png, $(basename $@)) ; \
        mv example.pdf $(addsuffix .pdf, $(basename $<)) ; rm example.*

ghostview (gs) can probably be replaced by convert and you can replace example with another tempfile prefix.

Jakob