Since tikz files are usually not accepted when submitting publications, it is
necessary to create a standalone EPS or PDF file. That is, the tikzpicture
should be embedded in a complete .tex
file, which compiles into a correctly
cropped picture, ready for inclusion with \includegraphics
. The .tex
file
can be easily set up to mimic the environment of the main document, so that e.g.
the fonts match.
Using the Preview Package
Option 1 is to use the preview package.
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usepackage[psfixbb,graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}
\begin{tikzpicture}
% ...
\end{tikzpicture}
\end{document}
This works especially well when using pdflatex
. It also works flawlessly with
non-standard sizes, e.g. beamer slides or A0 posters. With "old" latex
(producing DVI, which is then converted to postscript using dvips
), this
method has substantial problems. For one thing, all recent versions of TexLive
have a bug in the postscript they produce. This can be fixed by replacing
the line
\def\pgf@sys@postscript@header#1{\pgfutil@insertatbegincurrentpage{\special{!#1}}}
with
\def\pgf@sys@postscript@header#1{\AtBeginDvi{\special{! #1}}}
in ./tex/generic/pgf/systemlayer/pgfsys-dvips.def
inside the TexLive folder.
Even then, it does not seem possible to end up with an eps file that works as expected (the bounding box seems broken in very mysterious ways)
Using Externalization
Option 2 is the externalization feature that's included in pgf itself.
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\pgfrealjobname{levels_ext}
\begin{document}
\beginpgfgraphicnamed{levels}
\begin{tikzpicture}
% ...
\end{tikzpicture}
\endpgfgraphicnamed
\end{document}
This method works equally well for pdflatex
and just latex
. However, I've
seen it break for externalizing pictures from A0 posters. In this example, the
file must be named levels_ext.tex
. To obtain the file levels.dvi
, we must
compile the tex-file with the command
latex --jobname=levels levels_ext.tex
To go from the dvi file to an eps file, simply use dvips -o levels.eps levels.dvi
. Do not give the -E
flag to dvips
: Even without it, the
resulting postscript file will be in eps format (have a bounding box), but with
it, the resulting file actually has bounding box problems.
If pdflatex
instead of latex
is used, a pdf file instead of a dvi file is
generated.