[R] Sweave Makefile issue

Duncan Murdoch murdoch at stats.uwo.ca
Thu Dec 17 22:56:42 CET 2009


On 17/12/2009 3:19 PM, Luc Villandré wrote:
> Dear R-specialists,
> 
> I am trying to create a Makefile that will first convert all my .Rnw 
> files into .tex files and then, that will run the LaTeX compiler to 
> produce a pdf document. This issue has been discussed before. Hence, 
> I've basically adapted a Makefile I found at 
> http://n4.nabble.com/R-Sweave-R-and-complex-latex-projects-td810020.html#a810023 
> to make it compatible with a Windows XP environment. You will find my 
> version of it at the end of this message.

It doesn't exactly address your question, but you might also want to 
look at the patchDVI package on R-forge.  It takes a Rnw file as input, 
runs Sweave and some version of latex, then patches the result so that 
reverse search (from the .dvi or a .pdf with synctex) goes back to the 
Rnw file instead of going to the .tex file.

It doesn't address the problem of an output file depending on multiple 
.Rnw files, but it does at least handle the case of one .Rnw being 
included by a master .tex file.  For example, I use something close to 
this in a batch file to process one .Rnw and display the whole thing:

echo library(patchDVI);SweaveMiktex('%2', '%3.tex') | Rterm --slave
yap -1 -s"%1%2" %3.dvi

The arguments are
%1=line number,
%2=filename of .Rnw file,
%3=basename of master file (or of the filename)

Duncan Murdoch

> 
> However, it's not doing what I expect it to do. Instead of only using 
> pdfTeX on "total_article.tex" (which is the file with the necessary 
> headers and \include's), it tries to convert all my tex files into pdf, 
> which of course cannot be done since only total_article.tex has the 
> necessary structure to be understood by the compiler.
> 
> What's wrong then with this Makefile (I am using GNU Make 3.81)?
> 
> I will be grateful for any help you can provide.
> _________________________________________________
> 
> MASTER = total_article.pdf
> 
> # the master document depends on all of the tex files
> Rfile = prepareScript.R
> RNWFILES = $(wildcard *.Rnw)
> TEXFILES = $(wildcard *.tex)
> DEPENDS = $(patsubst %.Rnw,%.tex,$(RNWFILES)) $(TEXFILES)
> 
> RERUN = "(There were undefined references|Rerun to get 
> (citations|cross-references|the bars) (correct|right)|Table widths have 
> changed. Rerun LaTeX.|Linenumber reference failed)"
> RERUNBIB = "No file.*\.bbl|Citation.*undefined"
> 
> all : $(MASTER)
> 
> $(MASTER) : $(DEPENDS)
> 
> %.tex : %.Rnw
> 
>     SWEAVE '$<'
> 
> %.pdf : %.tex
> 
>     @pdflatex $<
>     @egrep -c $(RERUNBIB) $*.log && (bibtex $*;pdflatex $<); true
>     @egrep $(RERUN) $*.log && (pdflatex $<) ; true
>     @egrep $(RERUN) $*.log && (pdflatex $<) ; true
> 
> clean:
>     @del *.aux *.log *.bbl *.blg *.brf *.cb *.ind *.idx *.ilg  \
>           *.inx *.ps *.dvi *.toc *.out *.lot *~ *.lof *.ttt *.fff \
>           *.eps *.pdf
>     @del -f $(patsubst %.Rnw,%.tex,$(RNWFILES))
>    
> script :
>     Rcmd BATCH $(Rfile)
>




More information about the R-help mailing list