Pregunta

Yo escribo mi tesis en LaTeX y porque las cosas se pusieron un poco largo para mi gusto, que se había dividido en varios archivos. Llamémosles thesis.tex, intro.tex, mat_n_met.tex, rslts.tex y discsn.tex. He ligado intro.tex, mat_n_met.tex, rslts.tex y discsn.tex través thesis.tex con \include{intro} (y así sucesivamente ...). También he creado un archivo separado llamado r_crunching.Rnw (que corro por Sweave) que sujeta un trozo que se ejecuta la secuencia de comandos R con análisis de datos y trozos que las salidas de productos PDF de gráficos que lo integrar a través de \includegraphics (en, por ejemplo, rslts.tex). Siempre siguiendo?

Si me quedo un Rnw (es decir, que rslts.tex renombrado a rslts.Rnw) sin "un enlace" con el trozo con el guión R, obtendrá un error de Sweave() diciendo no existe la referencia en \Sexpr{}. ¿Hay una manera, sin la fusión de todos los archivos en un único .Rnw, a \Sexpr{} llamada en rslts.Rnw digamos?

Otros métodos de cómo lograr esto son bienvenidos.

¿Fue útil?

Solución

Olvídate por un momento que se trata de Sweave y sólo piensa en el problema de látex - para los cuales las soluciones \include y ofrecer \includeonly. Trate de que con unas simples archivos de prueba.

Una vez que tenga que resuelto, doble hacia atrás Sweave en la mezcla y que sólo el trabajo como Sweave es después de 'simplemente' una etapa de pre-procesamiento, aunque una muy inteligente.

Otros consejos

Le recomiendo usar rstudio ( http://www.rstudio.com/ide/ ). Sweave está muy bien integrado en dicho IDE y es compatible con documentos de múltiples archivos. Incluso SyncTeX y Tex registro de errores de navegación todavía funcionan cuando se trabaja con documentos de múltiples archivos.

Desde el archivo maestro puede incluir archivos de los niños utilizando

\SweaveInput{Child.Rnw}

Se puede vincular un archivo secundario de vuelta al archivo maestro mediante la inclusión de la directiva

% !Rnw root = Master.Rnw

en el archivo secundario. De esta manera cuando se trabaja en un archivo secundario y archivos de texto que, rstudio sabe que componga el archivo maestro.

Los detalles se explican en la documentación rstudio en http://www.rstudio.com / ide / docs / autoría / multiple_rnw_files

Para ampliar la respuesta de Dirk y MJM, se recomienda usar \include de y Makefile.

Suponga que tiene un archivo maestro: master.tex. En ese archivo, se incluyen algunos archivos .tex y .Rnw, es decir.

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

Ahora el siguiente Makefile proporciona funciones para crear los archivos .tex, .R y .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 $<

En esencia, el .SUFFIXES proporcionar un conjunto de reglas para convertir de un formato a otro. Por ejemplo, convertir de .Rnw a .R, utilizamos el comando

`R CMD Stangle $<`

una respuesta bastante obvia es usar un makefile, posiblemente usando el paquete cachesweave, para procesar los archivos relevantes en el orden correcto.

Mi solución a proyectos de varios archivos en Sweave (bajo rstudio) es la siguiente:

1) Crear un archivo maestro, master.Rnw decir, en el que tienes las llamadas a los archivos secundarios 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) Crear los archivos secundarios. Le voy a dar aquí sólo el primero, intro.Rnw. Tenga en cuenta que en los archivos secundarios que No utilice preámbulo comandos como \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) Después de guardar modificaciones en 'intro.Rnw', sólo tiene que ir a 'master.Rnw' y compilarlo usando Ctrl + Shift + K y ... voilá:

Captura de pantalla del archivo creado por el comando anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top