Domanda

Sto scrivendo la mia tesi in LaTeX e perché le cose sono un po 'lungo per i miei gusti, ho dovuto dividerlo in più 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 attraverso thesis.tex con \include{intro} (e così via ...). Ho anche creato un file separato chiamato r_crunching.Rnw (che ho eseguito attraverso Sweave) che contiene un pezzo che esegue lo script R con analisi dei dati e blocchi che producono uscite pdf di grafici che incorporano via \includegraphics (a esempio, rslts.tex). Sempre seguendo?

Se corro un Rnw (cioè io rslts.tex rinominato 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 unico .Rnw, alla chiamata \Sexpr{} nel dire rslts.Rnw?

Altri metodi come per raggiungere questo obiettivo sono i benvenuti.

È stato utile?

Soluzione

Dimenticate per un secondo che si tratta di Sweave e basti pensare al problema lattice - per le quali soluzioni \include e offrire \includeonly. Prova che con pochi semplici file di test.

Una volta che avete capito, ripiegare Sweave nel mix e solo lavoro come Sweave è dopo 'solo' una fase di pre-elaborazione, anche se molto intelligente.

Altri suggerimenti

mi consiglia di utilizzare RStudio ( http://www.rstudio.com/ide/ ). Sweave è ben integrato in questo IDE e supporta i documenti multi-file. Anche Synctex e TeX navigazione log degli errori continua a funzionare quando si lavora con i 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 della stampa che, RStudio sa per comporre il master file.

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

Per espandere la risposta di mjm di Dirk e, vi suggerirei di usare \include e di Makefiles.

Supponiamo di avere un file master: master.tex. In quel file, di includere alcuni file .tex e .Rnw, cioè.

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

Ora il seguente Makefile offre 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 insieme di regole per convertire da un formato di file ad un altro. Ad esempio, per convertire da .Rnw a .R, si usa il comando

`R CMD Stangle $<`

una risposta abbastanza ovvia è quella di utilizzare un makefile, possibilmente utilizzando il pacchetto cachesweave, per elaborare i file rilevanti nel giusto ordine.

La mia soluzione a progetti multi-file in Sweave (sotto Rstudio) è il seguente:

1) Creare un master file, dire master.Rnw, in cui si hanno le chiamate ai sottofile intro.Rnw, matmet.Rnw, etc:

\documentclass[11pt]{book}
% \usepackage{blah, blah} as you wish

\graphicspath{ {./figs/}

\begin{document}
\SweaveOpts{concordance=TRUE}

\include{intro} % a call to 'intro.Rnw'
\include{matmet} % a call to 'matmet.Rnw'
\include{results} % a call to 'results.Rnw'
\include{discuss} % a call to 'discuss.Rnw'

\end{document}

2) Creare le sottofile. Sto dando qui solo il primo, intro.Rnw. Si prega di notare che in subfile si Non utilizzare del preambolo comandi come \documentclass o \begin{document}

\chapter{Introduction}\label{ch:intro}
\section{This is section 01}
In section 01 we are concerned about whether \texttt{Sexpr} could possibly work. The chunk below creates a variable \em{a} which will be referred to by this command later on.

<<>>=
a <- 1+2
@

Ok, if it is working, we shall see number 3 right here: \Sexpr{a}.

3) Dopo aver salvato le modifiche in 'intro.Rnw', basta andare alla 'master.Rnw' e compilarlo usando Ctrl + Shift + K e ... voilà:

Schermata del file creato dal comando precedente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top