[Rd] embed Sweave driver in .Rnw file
Sharpie
chuck at sharpsteen.net
Thu Feb 10 22:39:51 CET 2011
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.
More information about the R-devel
mailing list