embed Sweave driver in .Rnw file
Friedrich Leisch wrote:
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
Is there an update on the status of this patch? I use a particularly ugly hack to splice a custom driver into one of my package Vignettes and it would be great to retire it in favor of an officially supported method. -Charlie ----- Charlie Sharpsteen Undergraduate-- Environmental Resources Engineering Humboldt State University
View this message in context: http://r.789695.n4.nabble.com/embed-Sweave-driver-in-Rnw-file-tp3086897p3300339.html Sent from the R devel mailing list archive at Nabble.com.