2010-08-10 21 views
8

Estoy escribiendo mi tesis en LaTeX y porque las cosas se pusieron un poco largas para mi gusto, las había dividido en varios archivos. Vamos a llamarlos thesis.tex, intro.tex, mat_n_met.tex, rslts.tex y discsn.tex. He vinculado intro.tex, mat_n_met.tex, rslts.tex y discsn.tex a través de thesis.tex con \include{intro} (y así sucesivamente ...). También he creado un archivo separado llamado r_crunching.Rnw (que ejecuto Sweave) que contiene un fragmento que ejecuta el script R con análisis de datos y fragmentos que producen salidas en PDF de gráficos que incrusto a través de \includegraphics (en, por ejemplo, rslts.tex). ¿Aún sigues?¿Cómo adormezco un proyecto de varios archivos?

Si me quedo un Rnw (es decir Retitulé rslts.tex-rslts.Rnw) sin "un enlace" con el trozo con el guión R, recibirá un error de Sweave() diciendo no existe la referencia en \Sexpr{}. ¿Hay alguna manera, sin combinar todos los archivos en un único .Rnw, para llamar al \Sexpr{} en decir rslts.Rnw?

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

+0

fuera de tema, pero en la remota posibilidad de que esto sea útil: http://staff.acecrc.org.au/~mdsumner/TCallaghan/ Esa plantilla muestra cómo usar la infraestructura include/includeonly, y tiene todas las piezas al menos para una institución. Lo usé directamente, y acabo de reemplazar chap1.tex etc. con mis equivalentes Rnw y agregué Sweave al proceso anterior al látex. – mdsumner

+0

Edité el título para decir cómo entendí tu pregunta. Siéntase libre de editar nuevamente, si lo entendí mal. (Todavía no entendía realmente el problema y cómo la respuesta aceptada ayudó, sin embargo). –

+0

El problema era que al menos dos de los archivos eran Sweave y que los resultados de uno no podían ser vistos por el otro . Creo que el título original era más simple y claro, aunque informal. Roman sigue activo aquí, así que tal vez él saltará, pero mientras tanto lo pondré más cerca de cómo comenzó. Paŭlo, espero que esto no sea grosero, pero ¿por qué editar una pregunta que no entiendes? – Aaron

Respuesta

4

Olvide por un segundo que está tratando con Sweave y solo piense en el problema del látex, para el cual \include y \includeonly ofrecen soluciones. Pruébalo con unos pocos archivos de prueba simples.

Una vez que lo hayas descifrado, dobla de nuevo Sweave en la mezcla y simplemente funciona como Sweave después de 'simplemente' un paso de preproceso, aunque muy inteligente.

+4

Véase también SweaveInput. – jverzani

1

Una respuesta bastante obvia es utilizar un archivo MAKE, posiblemente usando el caché de paquetes, para procesar los archivos relevantes en el orden correcto.

2

Para expandir la respuesta de Dirk y mjm, sugeriría usar \include y Makefiles.

Supongamos que tiene un archivo maestro: master.tex. En ese archivo, se incluyen algunos .tex y .Rnw archivos, 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 de archivo a otro. Por ejemplo, para convertir de .Rnw a .R, utilizamos el comando

`R CMD Stangle $<` 
5

recomiendo el uso de rstudio (http://www.rstudio.com/ide/). Sweave está muy bien integrado en ese IDE y admite documentos de varios archivos. Incluso la navegación de registro de errores de Synctex y TeX sigue funcionando cuando se trabaja con documentos de varios archivos.

Desde el archivo maestro se pueden incluir archivos secundarios usando

\SweaveInput{Child.Rnw} 

Puede vincular un archivo a un niño de nuevo al archivo maestro mediante la inclusión de la directiva

% !Rnw root = Master.Rnw 

en el archivo secundario.De esta forma, al trabajar en un archivo secundario y escribirlo, RStudio sabe que debe componer el archivo maestro.

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

Cuestiones relacionadas