Wie Sweave ich ein Multiple-Datei-Projekt?
-
27-09-2019 - |
Frage
Ich schreibe meine Diplomarbeit in LaTeX und weil die Dinge ein bisschen zu lang für meinen Geschmack bekam, hatte ich Split sie in mehrere Dateien. Nennen wir sie thesis.tex
, intro.tex
, mat_n_met.tex
, rslts.tex
und discsn.tex
. Ich habe intro.tex
, mat_n_met.tex
verbunden, rslts.tex
und discsn.tex
durch thesis.tex
mit \include{intro}
(und so weiter ...).
Ich habe auch eine separate Datei namens r_crunching.Rnw
erstellt (das ich durch Sweave laufen), die ein Stück hält, dass der R-Skript mit Datenanalyse ausgeführt wird und die produzieren chunks pdf Ausgänge von Graphen, dass ich über \includegraphics
Einbetten (in z.B. rslts.tex
). Folgende noch?
Wenn ich eine Rnw (das heißt ich umbenannten rslts.tex
zu rslts.Rnw
) ohne „einen Link“ auf den Brocken mit dem R-Skript ausführen, erhalten Sie einen Sweave()
Fehlermeldung erhalten dass die Referenz in \Sexpr{}
existiert nicht. Gibt es eine Möglichkeit, ohne alle Dateien in ein einziges .Rnw, um Anruf \Sexpr{}
in etwa rslts.Rnw
Fusion?
Andere Methoden, wie dies zu erreichen, ist willkommen.
Lösung
Vergessen Sie für eine Sekunde, dass Sie mit Sweave handelt und man denke nur an den Latex Problem - für die \include
und \includeonly
bieten Lösungen. Versuchen Sie das mal mit ein paar einfachen Testdateien.
Sobald Sie haben herausgefunden, dass, falten Sweave zurück in die Mischung und es nur Arbeit als Sweave nach ist ‚nur‘ ein Vorverarbeitungsschritt, wenn auch ein sehr kluger ein.
Andere Tipps
Ich empfehle, mit RStudio ( http://www.rstudio.com/ide/ ). Sweave ist schön in diesem IDE integriert und unterstützt Multi-File-Dokumente. Auch arbeiten SyncTeX und TeX Fehlerprotokoll Navigation noch, wenn sie mit Multi-Datei-Dokumenten arbeiten.
Von der Master-Datei können Sie Kind-Dateien enthalten mit
\SweaveInput{Child.Rnw}
Sie können eine untergeordnete Datei zurück auf die Master-Datei verknüpfen, indem die Richtlinie einschließlich
% !Rnw root = Master.Rnw
in der untergeordneten Datei. Auf diese Weise, wenn sie auf einer untergeordneten Datei arbeiten und Satz es, RStudio kennen die Master-Datei zu setzen.
Die Details werden in der RStudio Dokumentation erläutert unter http://www.rstudio.com / ide / docs / Authoring / multiple_rnw_files
Zur Erweiterung Dirks und MJM Antwort, würde ich vorschlagen \include
des und Makefiles verwenden.
Angenommen, Sie eine Master-Datei haben: master.tex
. In dieser Datei sind einige .tex
und .Rnw
Dateien, d.
\include chapter1
\include chapter2
\include chapter3
....
Nun ist die folgende Makefile bietet Funktionen für die Erstellung der .tex
, .R
und .pdf
Dateien:
.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 $<
Im Wesentlichen bieten die .SUFFIXES
eine Reihe von Regeln für convert von einem Dateiformat in ein anderes. Zum Beispiel zu konvertieren von .Rnw
zu .R
, verwenden wir den Befehl
`R CMD Stangle $<`
eine ziemlich offensichtliche Antwort ist eine Make-Datei zu verwenden, möglicherweise Paket cachesweave verwenden, die entsprechenden Dateien in der richtigen Reihenfolge zu verarbeiten.
Meine Lösung für Multi-File-Projekte in Sweave (unter Rstudio) ist die folgende:
1) Erstellen Sie eine Master-Datei, sagen master.Rnw
, in dem Sie die Anrufe müssen die Subdateien 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) Erstellen Sie die Unterdateien. Ich gebe hier nur die ersten, intro.Rnw
. Bitte beachten Sie, dass in den Teildateien Sie nicht verwenden Präambel Befehle wie \documentclass
oder \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) Nach Änderungen in 'intro.Rnw' zu speichern, einfach zu 'master.Rnw' gehen und kompilieren Sie es mit Strg + Shift + K und ... voilá: