Is there a script to automate externalizing TikZ graphics?
(As suggested by Scott here)
Please note: the solution below, which was work in progress at the time of writing, is now officially available in PGF/TikZ 2.10. The usage as sampled below is fully included in the official manual starting from v2.10. Thus, you can ignore the part about checking out the development version and apply this solution directly.
One answer to this question is "the developers are working on it".
The externalization method present in PGF/TikZ 2.00 works well if you need to pull a handfull of figures out of a document. However, it is a drag when it comes to automatically exporting all of the figures into external files.
This limitation has been known for some time and a new TikZ library,
Development versions can be obtained from the project's SourceForge site, but requires checking the code out using CVS- which is about as fun as ramming a flaming stick into your eyeball. Fortunately, the guys over at texample provide relatively up-to-date builds of the development code which are packaged in ready-to-use TDS-compliant zip files.
Using the development version of PGF, externalizing all TikZ graphics in a LaTeX document is as easy as:
If your document is named
To compile the document, you will need to ensure the
A whole pile of options is available to customize the way the figures are output. See section 31.4 (this numbering is subject to change!) of the development version documentation for complete info and options. The manual also covers how to obtain EPS output- but this option looks less polished than PDF output.
When I was writing my MSc thesis, I had created all of my figures and diagrams with tikz and pgfplots (using matplotlib2tikz). Keeping all of them within the source was not acceptable, since the compilation time was getting really slow, so I was searching for something that would allow me to automatically compile all those figures to pdf files that I could include in my text.
For various reasons, I was not entirely satisfied with any of the other solutions so I wrote a Python script that suited my purpose.
The things you must keep in mind are:
The script searches recursively within a folder structure for *.tikz files and compiles them using the specified preamble. Each time the scripts runs, it stores the modification time of each *.tikz file and on subsequent runs it compiles only the newly created files of the files that have been modified since the last run. If you make changes in your preamble, you just pass a command-line argument and it compiles all the *.tikz files.
On linux it works great. I haven't tested it on windows, but I don't see why it shouldn't run. Anyway, even if there is any problem, the fix is going to be really trivial
Here's my alternative; Konrad's answer is probably just as good, and certainly better documented.
I’ve just come up with the following. It seems to work quite well (on Unix/Linux and Mac):
Next, it invokes