2010-08-10 14 views
8

Sto scrivendo la mia tesi in LaTeX e poiché le cose mi sono un po 'lunghe per i miei gusti, l'ho diviso in diversi file. Chiamiamoli thesis.tex, intro.tex, mat_n_met.tex, rslts.tex e discsn.tex. Ho collegato intro.tex, mat_n_met.tex, rslts.tex e discsn.tex tramite thesis.tex con \include{intro} (e così via ...). Ho anche creato un file separato chiamato r_crunching.Rnw (che eseguo tramite Sweave) che contiene un blocco che esegue lo script R con analisi dei dati e blocchi che producono output PDF di grafici che incorporo tramite \includegraphics (ad esempio, rslts.tex). Stai ancora seguendo?Come faccio a tessere un progetto a più file?

Se corro un Rnw (vale a dire ho rinominato rslts.tex-rslts.Rnw) senza "un collegamento" per il pezzo con lo script R, si otterrà un errore di Sweave() dicendo che il riferimento nel \Sexpr{} non esiste. C'è un modo, senza unire tutti i file in un singolo .Rnw, per chiamare \Sexpr{} in dire rslts.Rnw?

Altri metodi per ottenere questo sono i benvenuti.

+0

off-topic, ma sulla remota possibilità che questo è utile: http://staff.acecrc.org.au/~mdsumner/TCallaghan/ Questo modello mostra come usare l'infrastruttura include/includeonly e ha tutti i pezzi almeno per un'istituzione. L'ho usato direttamente, e ho appena sostituito chap1.tex ecc. Con i miei equivalenti Rnw e ho aggiunto Sweave al processo pre-lattice. – mdsumner

+0

Ho modificato il titolo per dire come ho capito la tua domanda. Sentiti libero di modificare di nuovo, se ho capito che è sbagliato. (Ancora non capivo bene il problema e come la risposta accettata aiutasse, però.) –

+0

Il problema era che almeno due dei file erano file Sweave e che i risultati di uno non potevano essere visti dall'altro . Penso che il titolo originale fosse più semplice e chiaro, anche se informale. Roman è ancora attivo qui, quindi forse salterà dentro, ma nel frattempo lo rimetterò più vicino a come è iniziato. Paŭlo, spero che questo non sia maleducato, ma perché modificare una domanda che non capisci? – Aaron

risposta

4

Dimentica per un secondo che hai a che fare con Sweave e pensa solo al problema del lattice - per il quale le soluzioni di offerta \include e \includeonly. Prova con alcuni semplici file di test.

Una volta che hai capito, ripiega Sweave nel mix e funziona come Sweave dopo "semplicemente" un passo di pre-elaborazione, anche se molto intelligente.

+4

Vedere anche SweaveInput. – jverzani

1

una risposta abbastanza ovvia è utilizzare un makefile, possibilmente utilizzando il pacchetto cachesweave, per elaborare i file rilevanti nell'ordine corretto.

2

Per espandere la risposta di Dirk e mjm, suggerirei di utilizzare \include e Makefile.

Supponiamo di avere un file master: master.tex. In quel file, di includere alcune .tex e .Rnw file, vale a dire

\include chapter1 
\include chapter2 
\include chapter3 
.... 

Ora il seguente Makefile fornisce funzioni per la creazione dei file .tex, .R e .pdf:

.SUFFIXES: .tex .pdf .Rnw .R 

MAIN = master 
##List your your .Rnw includes 
RNWINCLUDES = chapter1 chapter2 chapter3 
TEX = $(RNWINCLUDES:=.tex) 
RFILES = $(RNWINCLUDES:=.R) 
RNWFILES = $(INCLUDES:=.Rnw) 

all: $(MAIN).pdf 
    $(MAIN).pdf: $(TEX) $(MAIN).tex 

R: $(RFILES) 

.Rnw.R: 
    R CMD Stangle $< 

.Rnw.tex: 
    R CMD Sweave $< 

.tex.pdf: 
    pdflatex $< 
    bibtex $* 
    pdflatex $< 
    pdflatex $< 

In sostanza, il .SUFFIXES fornire un set di regole per convertire da un formato di file a un altro. Ad esempio, per convertire .Rnw-.R, usiamo il comando

`R CMD Stangle $<` 
5

mi consiglia di utilizzare RStudio (http://www.rstudio.com/ide/). Sweave è ben integrato in quell'IDE e supporta documenti multi-file. Anche la navigazione del log degli errori di Synctex e TeX funziona ancora quando si lavora con documenti multi-file.

Dal file master è possibile includere i file figlio utilizzando

\SweaveInput{Child.Rnw} 

È possibile collegare un file bambino torna al file master includendo la direttiva

% !Rnw root = Master.Rnw 

nel file secondario.In questo modo quando si lavora su un file secondario e lo si scrive, RStudio sa di comporre il file master.

I dettagli sono spiegati nella documentazione RStudio a http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

Problemi correlati