We are currently in the process of implementing PNG and JPEG for 2.13.0, and an extensible architecture is planned for 2.14.0.

On Wed, 23 Mar 2011, Meyer, Sebastian wrote:

Dear R devel,

being constrained to a windows environment at work and having colleagues being 
accustomed to the Microsoft Office Suite, I was looking for a way to have the 
RweaveLatex driver for Sweave automatically generating 'win.metafile's in 
addition to the pdf graphics.
Without this functionalilty, the generation of emf-graphics is quite laborious, 
I think:

<<>>=
plotit <- function () {
  # code which generates the graphic
}
win.metafile("foobar.emf")
plotit()
dev.off()
pdf("foobar.pdf")
plotit()
dev.off()
@
\includegraphics{foobar}


I would like to have something like:

<<foobar, fig=true, pdf=true, emf=true>>
# code which generates the graphic
@


SweaveHooks are not applicable for this feature. Therefore, I thought it would 
be best to extend the typical 'RweaveLatex' driver by an option 'emf' - like 
eps and pdf. So, here is the result of some handicrafts:

RweaveLatexEMF <- function ()
{
        # add option emf (= FALSE) and set default for eps to FALSE
        setup <- utils::RweaveLatexSetup
        setupsrc <- deparse(setup)
        epsline <- grep("eps", setupsrc)
        setupsrc[epsline] <- sub("eps = TRUE", "eps = FALSE, emf = FALSE", 
setupsrc[epsline])
        setup <- eval(parse(text=setupsrc))

        # 'makeRweaveLatexCodeRunner' function
        makeruncode <- function(evalFunc=utils::RweaveEvalWithOpt) {
                runcode <- utils:::RweaveLatexRuncode
                runcodesrc <- deparse(runcode)
                epsline1 <- grep("cat(.. eps..)", runcodesrc)
                runcodesrc <- append(runcodesrc, "            if (options$emf) cat(\" 
emf\")", after=epsline1)
                epsline2 <- grep("options\\$fig && options\\$eval", runcodesrc)
                runcodesrc <- append(runcodesrc,
                        deparse(quote(
                                if (options$emf && .Platform$OS.type == 
"windows") {
                            grDevices::win.metafile(file=paste(chunkprefix, "emf", 
sep="."),
                                                                
width=options$width, height=options$height)
                            err <- try({SweaveHooks(options, run=TRUE)
                                        eval(chunkexps, envir=.GlobalEnv)})
                            grDevices::dev.off()
                            if(inherits(err, "try-error")) stop(err)
                        }
                        ))
                , after=epsline2)
                runcode <- eval(parse(text=runcodesrc))
        }
        runcode <- makeruncode()

        list(setup = setup, runcode = runcode,
       writedoc = utils::RweaveLatexWritedoc, finish = utils::RweaveLatexFinish,
       checkopts = utils::RweaveLatexOptions)
}


This enhanced Sweave driver works for me like a charm, but it is a very poor 
solution.
What about allowing for all available grDevices on the current platform - besides the standard eps and 
pdf devices? The only building block is the section "if (options$fig && 
options$eval)" in utils:::makeRweaveLatexCodeRunner. The TODO list of Seth Falcon's weaver 
package also states "For Sweave: multiple graphic formats besides just pdf and eps (perhaps
as a separate driver?)".
However, since so many packages depend on the basic Sweave implementation by 
Fritz Leisch, I don't know if there is an easy route to tackle.

Looking forward to your opinions and pointers.
Best regards,
 Sebastian Meyer

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


--
Brian D. Ripley,                  rip...@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to