Using tikzDevice with Sweave in R 2.13

R 2.13 introduces an option to specify a custom graphics device in an Sweave code chunk. This is really cool and allows you to use tikzDevice output like pgfSweave does. In an pinch, say when you dont have access to any non-core packages, you can use tikzDevice output with the regular Sweave driver (RweaveLatex) more simply than before. Here is a minimal example showing how.

\documentclass{article}

\usepackage[noae,nogin]{Sweave}
\usepackage{tikz}

\begin{document}
\SweaveOpts{prefix.string=fig}

Example using \texttt{tikzDevice} with the default \textbf{Sweave}
driver (\texttt{RweaveLatex}).  First define a custom device:

<<results=hide>>=
tikz.Swd <- function(name, width, height, …){
require(tikzDevice)
tikzDevice::tikz(file = paste(name, "tikz", sep = "."),
width = width, height = height)

}
@

Then use the device for plotting, but you have to include the figure manually.

<<myplot, fig=T, grdevice=tikz.Swd, include=F, width=4,height=4>>=
plot(1)
@
\input{fig-myplot.tikz}

\end{document
}

WARNING: This could be very slow if your graphic is complex

There is a new version of pgfSweave, and its awesome!

I just uploaded version 1.2.1 of pgfSweave, and I think it is just great! The most notable new feature is the use of the TikZ externalization library list and make feature instead of the pgf \begingraphicnamed functionality. This has some important consequences:

1. PGF 2.10 is required! This has been out for some months now but many LaTeX distros are notoriously slow at updating, so you may need to update manually.
2. Backward compatibility may break with some documents who still have the \pgfrealjobname hardcoded or who use the tex.driver option.
3. A new workflow is required to compile documents (it includes make), this is outlined in the vignette.
4. You can use all the nifty features in the TikZ externalization library, see the TikZ/PGF manual for more details.
5. Most importantly it is faster!

There are a boat load of other changes and new features, I think you like it, check them out:

————————–
Version 1.2.1 – 2011-04-03
————————–
* [NEW] If PGF 2.10 is not available, issue a startup message but still
load the package (So the package can go on CRAN). PGF 2.10
is still required to compile .tex file produced with pgfSweave
* [NEW] Remove null device code which could cause problems with grid
graphics
* [NEW] Example using xelatex for external graphics
* [NEW] Chunk options relwidth’ and relheight’ for scaling figures
relative to the width’ and height’ options (thanks to Fabrice
Rossi for the patch)
* [CHANGED] Fix the internal caching of external graphics, it now works as
expected and can save significant time

————————–
Version 1.2.0 – 2011-02-21
————————–
* [NEW] Use the tikz externalization library instead of the pgf backend.
This allows for more flexibility and faster compilations but
BEWARE, this requires at least pgf 2.10 and may break backward
computability in some cases
* [NEW] GNU Make is now a system requirement for externalizing graphics,
NOT for compiling the package
* [NEW] Option to specify number of processors when externalizing graphics
* [NEW] Externalized graphics now have another layer of crude caching
* [NEW] Highlighted output is now output in a separate environment to fix
the centering issues
* [NEW] Example document using plain latex and the tikz external library
to generate eps graphics,
inst/example/pgfSweave-latex-example.Rnw
* [CHANGED] The command line interface is now much simpler internally
and uses optparse instead of getopt for more flexibility (the
optparse package is now a dependency)
* [CHANGED] The tex.driver’ option has been removed, the same effect can
be achieved using the tikz externalization library, see the new
example for how
* [DEPRECIATED] The pgf’ option is depreciated, please use the `tikz’
option