Hello, Sweave lets you use alternative drivers through the driver argument, and several packages take advantage of that and define custom Sweave driver for various purposes. Most of them are listed on the Reproducible Research CTV: (http://cran.r-project.org/web/views/ReproducibleResearch.html) The next natural step is for package developpers to take advantage of this in their vignettes. In Rcpp we work around the way package building works and we do: - let R build a dummy vignette - then use the inst/doc/Makefile to replace it with a vignette that is processed by the driver from the highlight package (giving syntax highlighting). I played with Sweave so that it would be able to create the driver from some text included in the text of the .Rnw file: $ svn diff Index: src/library/utils/R/Sweave.R ==================================================================--- src/library/utils/R/Sweave.R (revision 53846) +++ src/library/utils/R/Sweave.R (working copy) @@ -20,6 +20,16 @@ # We don't need srclines for code, but we do need it for text, and it's easiest # to just keep it for everything. +SweaveGetDriver <- function(file){ + txt <- readLines(file) + line <- grep( "\\SweaveDriver", txt, value = TRUE ) + if( length(line) ){ + txt <- sub( "^.*\\SweaveDriver[{](.*)[}]", "\\1", line[1L] ) + driver <- try( eval( parse( text = txt ) ), silent = TRUE ) + if( !inherits( driver, "try-error") ) driver + } +} + Sweave <- function(file, driver=RweaveLatex(), syntax=getOption("SweaveSyntax"), ...) { @@ -28,7 +38,9 @@ else if(is.function(driver)) driver <- driver() - + drv <- SweaveGetDriver(file) + if( !is.null(drv) ) driver <- drv + if(is.null(syntax)) syntax <- SweaveGetSyntax(file) if(is.character(syntax)) This allows one to write something like this in their file: %\SweaveDriver{ { require(highlight); HighlightWeaveLatex() } } So that when calling : > Sweave( "somefile.Rnw" ) the highlight driver is used instead of the default driver. Could something like that be added to Sweave ? Romain -- Romain Francois Professional R Enthusiast +33(0) 6 28 91 30 30 http://romainfrancois.blog.free.fr |- http://bit.ly/fT2rZM : highlight 0.2-5 |- http://bit.ly/gpCSpH : Evolution of Rcpp code size `- http://bit.ly/hovakS : RcppGSL initial release
>>>>> On Tue, 14 Dec 2010 12:40:04 +0100, >>>>> Romain Francois (RF) wrote:> Hello, > Sweave lets you use alternative drivers through the driver argument, and > several packages take advantage of that and define custom Sweave driver > for various purposes. Most of them are listed on the Reproducible > Research CTV: > (http://cran.r-project.org/web/views/ReproducibleResearch.html) > The next natural step is for package developpers to take advantage of > this in their vignettes. In Rcpp we work around the way package building > works and we do: > - let R build a dummy vignette > - then use the inst/doc/Makefile to replace it with a vignette that is > processed by the driver from the highlight package (giving syntax > highlighting). > I played with Sweave so that it would be able to create the driver from > some text included in the text of the .Rnw file: > $ svn diff > Index: src/library/utils/R/Sweave.R > ================================================================== > --- src/library/utils/R/Sweave.R (revision 53846) > +++ src/library/utils/R/Sweave.R (working copy) > @@ -20,6 +20,16 @@ > # We don't need srclines for code, but we do need it for text, and > it's easiest > # to just keep it for everything. > +SweaveGetDriver <- function(file){ > + txt <- readLines(file) > + line <- grep( "\\SweaveDriver", txt, value = TRUE ) > + if( length(line) ){ > + txt <- sub( "^.*\\SweaveDriver[{](.*)[}]", "\\1", line[1L] ) > + driver <- try( eval( parse( text = txt ) ), silent = TRUE ) > + if( !inherits( driver, "try-error") ) driver > + } > +} > + > Sweave <- function(file, driver=RweaveLatex(), > syntax=getOption("SweaveSyntax"), ...) > { > @@ -28,7 +38,9 @@ > else if(is.function(driver)) > driver <- driver() > - > + drv <- SweaveGetDriver(file) > + if( !is.null(drv) ) driver <- drv > + > if(is.null(syntax)) > syntax <- SweaveGetSyntax(file) > if(is.character(syntax)) > This allows one to write something like this in their file: > %\SweaveDriver{ { require(highlight); HighlightWeaveLatex() } } > So that when calling : >> Sweave( "somefile.Rnw" ) > the highlight driver is used instead of the default driver. > Could something like that be added to Sweave ? Yes, sure! Will have a look at the patch later this week and apply it if it passes the tests. The patch is against a current r-devel? Best, Fritz
Possibly Parallel Threads
- Quote the path of graphics output in Sweave when it contains spaces
- How to turn a LaTeX Sweave file (Rnw) into .HTML/.odf/.docx? (under windows)
- Sweave - if \Sexpr{} than \SweaveInput{"my.Rnw"}
- How to call patchDVI::SweavePDF on an .Rnw which is not the master file?
- sync+Rnw+TeXShop, again