From chuck at sharpsteen.net  Thu Feb 10 22:39:51 2011
From: chuck at sharpsteen.net (Sharpie)
Date: Thu, 10 Feb 2011 13:39:51 -0800 (PST)
Subject: [Rd] embed Sweave driver in .Rnw file
In-Reply-To: <19719.24931.968293.80971@angua.stat.uni-muenchen.de>
References: <4D075794.3010201@r-enthusiasts.com>
	<19719.24931.968293.80971@angua.stat.uni-muenchen.de>
Message-ID: <1297373991040-3300339.post@n4.nabble.com>



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.



[Rd] embed Sweave driver in .Rnw file
Sharpie