[R] Sweave, R and complex latex projects
Deepayan Sarkar
deepayan.sarkar at gmail.com
Sun Oct 15 01:04:50 CEST 2006
On 10/14/06, Mark Wardle <mark at wardle.org> wrote:
> Hello all,
>
> I've been able to use R very successfully to run simple statistics and
> generate the plots I require.
>
> I've been evaluating Sweave, and have hit upon a small problem that I
> don't seem to be able to workaround. Sweave runs very well for single
> file latex documents, but I have a complex thesis made up of several
> parts and chapters. These are arranged with a master latex file and
> subdirectories with "\include"-ed latex fragments representing those
> parts/chapters, and I don't seem to be able to get Sweave to work properly.
>
> I've tried a number of approaches, including converting the master
> document into a Snw file itself, or even generating chapters manually
> chapter by chapter using Sweave and then "\include"ing the result into
> the master tex file. Unfortunately for the latter attempt, the the latex
> generated doesn't prepend the required path to the filename, and so
> latex looks for the pdfs and tex files in the wrong place - it looks in
> the "root" directory (where the master tex file is located) rather than
> the chapter subdirectory where all the files have been generated.
>
> I hope I'm not missing something obviously documented, but I can't see
> it in the Sweave docs. Is there an option to prepend a pathname to the
> filename of Sweave generated TeX and PDF documents?
>
> Do people use Sweave for complex multi-file latex projects, and what is
> the best approach? I'm almost tempted to keep R and Latex separate, and
> continue to run a R script to generate all of the dynamic tables/charts
> which are then "\input"ed, but I was rather attracted to the whole
> Sweave approach.
You haven't told us what platform you are using, but makefiles are the
solution I would recommend if that's feasible. For example, the
Makefile in one of my presentations might look like
-----------------
R_PROG = R-2.4
R_HOME = `${R_PROG} RHOME`
TPUTS = ${TEXINPUTS}:${R_HOME}/share/texmf/:tex/
TEX_COMPS = tex/defs tex/main
RNW_COMPS = faithful barley qqaspect
all: statgraphics.pdf
statgraphics.tex: $(TEX_COMPS:=.tex) $(RNW_COMPS:=.tex) tex/statgraphics.tex
cp tex/statgraphics.tex .
clean:
rm -f *.Rnw *.tex *.log *.dvi *.ps *.pdf *.R figs/* *~ */*~
%.Rnw: rnw/%.Rnw
ln -s $< .
%.tex: %.Rnw
echo "library(tools); Sweave('$<')" | ${R_PROG} --vanilla --silent
%.R: %.Rnw
echo "library(tools); Stangle('$<')" | ${R_PROG} --vanilla --silent
%.dvi : %.tex
TEXINPUTS=${TPUTS} texi2dvi -q -c $<
%.ps : %.dvi
TEXINPUTS=${TPUTS} dvips -o -q $<
%.pdf : %.tex
TEXINPUTS=${TPUTS} texi2dvi -c -q --pdf $<
--------------
Things are slightly complicated because I tend to keep .tex and .Rnw
files in separate directories (but make a copy/link before running
Sweave or latex on them). After a make clean, the top-level directory
looks like:
deepayan at kanika:statgraphics$ ls -R
.:
data figs Makefile rnw tex
./data:
./figs:
./rnw:
barley.Rnw faithful.Rnw qqaspect.Rnw
./tex:
defs.tex main.tex statgraphics.tex
and
deepayan at kanika:statgraphics$ grep input tex/*.tex
tex/main.tex:\input{faithful1}
tex/main.tex:\input{barley1}
tex/main.tex:\input{qqaspect}
tex/statgraphics.tex:\input{tex/defs}
tex/statgraphics.tex:\input{tex/main}
HTH,
-Deepayan
More information about the R-help
mailing list