¿Cómo puedo Sweave un proyecto con múltiples archivos?
-
27-09-2019 - |
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.
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.