[Rd] Sweave.sh shell script on CRAN

Duncan Murdoch murdoch at stats.uwo.ca
Mon Apr 16 16:02:23 CEST 2007

On 4/16/2007 7:53 AM, Gregor Gorjanc wrote:
> Duncan Murdoch wrote:
>>> I do not have any experience with use of (bash) shell scripts under
>>> Windows. Sweave.sh can be used with Cygwin, but I am not sure how to use
>>> shell script without Cygwin. I noticed that some "scripts" in R*/bin
>>> directory on our Windows machine are perl (build, check, INSTALL, ...)
>>> and shell (Rd2dvi.sh, Stangle.sh, Sweave.sh, ...) scripts. This
>>> therefore means that R ships also perl and shell interpreter or am I
>>> missing something?
>> We don't ship Perl or sh.exe, but we do describe how to get them in the
>> R Admin manual.
> Maybe I got this totally wrong. Say someone who uses Windows finds R and
> installs it via setup file. Can he/she launch the folowing without
> having Perl and/or sh.exe?
> R CMD script whateverOption

No.  Installing a binary package has a pure R implementation so it 
doesn't need R CMD, but most of the capabilities of R CMD are not 
available with a basic R install.

There are two reasons for this.  One is that the extra tools that are 
needed take up a lot of space, so they would make the setup file really 
huge.  That's an issue of less importance these days than in the past.

Another issue that is still important is that not all the tools needed 
have licenses compatible with redistribution:  in particular ActiveState 
Perl and the Microsoft Help Workshop.  There are other Perl 
implementations, but in the past Brian Ripley found that they didn't 
work.  I don't know if that's still true.  (In fact, I don't know if the 
licenses still limit redistribution.)

>> I'd be interested in talking to you about integration of my patchDVI
>> functions into your script.  They allow forward and reverse search
>> between the .dvi file and the .Rnw file (in yap and xdvi, at least).
> I am all ears.

The package is on my web page as


Starting in R 2.5.0 (currently in beta), if you use Sweave options including


then it will write out an \input{} for a file containing a TeX 
\special{} encoding the concordance between the lines in the .Rnw file 
and the lines in the .tex file.  The patchDVI package contains routines 
to look through a .dvi file for these specials, and the specials 
inserted by latex when you ask for forward and reverse search (the 
--src  option in MikTeX, not sure how it's invoked in other 
implementations), and patches the .dvi so the references point to the 
.Rnw file instead.

It would make more sense for the previewer to interpret the specials 
directly and so not require the patch, but currently it appears nobody 
has done something like this.  (If you know differently, please let me 
know!)  I think most people don't use forward and reverse search, so 
there's not a lot of pressure for this feature in the previewers.

It would probably also make sense to make the concordance format a 
little more general than it currently is (it assumes that each .tex file 
comes from exactly one source Rnw file, for instance; I think that's 
generally true now, but not necessarily true about other preprocessors.).

In the current implementation, this means the processing goes like this:

1.  Run Sweave to produce the .tex.
2.  Run latex to produce the .dvi.
3.  Run patchDVI to patch the .dvi.
4.  Run the previewer.

Since invoking R is slow in Windows, I wrote an R function SweaveMiktex 
in patchDVI that does steps 1-3 in one R session.

Duncan Murdoch

More information about the R-devel mailing list