Question

Je suis en train d'écrire ma thèse en LaTeX et parce que les choses ont un peu long à mon goût, je devais le diviser en plusieurs fichiers. Appelons les thesis.tex, intro.tex, mat_n_met.tex, rslts.tex et discsn.tex. Je lié intro.tex, mat_n_met.tex, rslts.tex et discsn.tex par thesis.tex avec \include{intro} (et ainsi de suite ...). J'ai aussi créé un fichier séparé appelé r_crunching.Rnw (que je cours à travers Sweave) qui contient un morceau qui exécute le script R avec l'analyse des données et des morceaux qui donnent des produits de pdf des graphiques que j'intégrer via \includegraphics (par exemple, dans, rslts.tex). Toujours suivant?

Si je lance un Rnw (à savoir I de rslts.tex remplacé le nom de rslts.Rnw) sans « un lien » pour le morceau avec le script R, vous obtiendrez une erreur de Sweave() dire la référence en \Sexpr{} n'existe pas. Est-il possible, sans fusionner tous les fichiers en un seul .Rnw, à l'appel \Sexpr{} à rslts.Rnw de dire?

D'autres méthodes pour appliquer ce principe sont les bienvenus.

Était-ce utile?

La solution

Oublier une seconde que vous faites affaire avec Sweave et il suffit de penser du problème de latex - pour lesquels des solutions de \include et offre de \includeonly. Essayez cela avec quelques fichiers de test simples.

Une fois que vous avez ce compris, replier Sweave dans le mélange et juste travail Sweave est après « simplement » une étape de pré-traitement, quoique très intelligent.

Autres conseils

Je recommande d'utiliser rstudio ( http://www.rstudio.com/ide/ ). Sweave est bien intégré dans cet IDE et il prend en charge les documents de plusieurs fichiers. Même synctex et TeX erreur de navigation du journal fonctionnent toujours lorsque l'on travaille avec des documents multi-fichiers.

A partir du fichier maître, vous pouvez inclure des fichiers enfants en utilisant

\SweaveInput{Child.Rnw}

Vous pouvez lier un fichier enfant dans le fichier maître en incluant la directive

% !Rnw root = Master.Rnw

dans le fichier enfant. De cette façon, lorsque vous travaillez sur un fichier enfant et le formater, rstudio savoir pour le fichier typeset maître.

Les détails sont expliqués dans la documentation rstudio http://www.rstudio.com / ide / docs / création / multiple_rnw_files

Pour élargir la réponse de Dirk et MJM, je suggère d'utiliser de \include et Makefile.

Supposons que vous ayez un fichier maître: master.tex. Dans ce fichier, vous devez inclure des fichiers .tex et .Rnw, i.e..

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

Maintenant, le Makefile suivant fournit des fonctions pour créer les .tex, les fichiers .R et .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 $<

Pour l'essentiel, la .SUFFIXES fournir un ensemble de règles pour convertir d'un format de fichier à un autre. Par exemple, pour convertir de .Rnw à .R, nous utilisons la commande

`R CMD Stangle $<`

une réponse assez évidente est d'utiliser un makefile, en utilisant éventuellement cachesweave paquet, pour traiter les fichiers concernés dans l'ordre.

Ma solution à des projets multi-fichiers en Sweave (sous rstudio) est le suivant:

1) Création d'un fichier maître, dire master.Rnw, dans lequel vous avez les appels vers les sous-fichiers 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) Créer des sous-fichiers. Je donne ici que la première, intro.Rnw. S'il vous plaît noter que dans les sous-fichiers vous ne pas utiliser préambulaire commandes telles que \documentclass ou \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) Après avoir enregistré des modifications dans 'intro.Rnw', allez simplement à 'master.Rnw' et le compiler en utilisant les touches Ctrl + Maj + K et ... voilá:

Capture de fichier créé par la commande ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top