2012-10-22 7 views
6

Versuch, meiner zweiten Latex-DateiWorkflow zwischen Latex und R geschraubt

\documentclass{article} 
\title{simple Sweave script} 
\usepackage{/Users/Brenden/Documents/R/R-2.15.1/share/texmf/tex/latex/Sweave} 
\begin{document} 
\maketitle 
This is a simple script to demonstrate Sweave. Let's 
begin by generating some results 
<<>>= 
x=rnorm(30) 
y=rnorm(30) 
mean(x) 
cor(x,y) 
@ 
and follow that up with some random text 
\end{document} 

Datei mit .Rnw als Erweiterung gespeichert zu schreiben. Ich könnte dann Swave unter R verwenden, um die Datei nach tex zu konvertieren. Ich starte dann pdflatex unter cmd, um meine .pdf Datei zu erhalten. R ist unter/Benutzer/Brenden/Dokumente gespeichert. MiKTex ist unter/Users/Brenden/Desktop gespeichert.

Es wird gesagt, dass normalerweise die Zeile "usepackage" nicht benötigt wird. Wenn ich Sweave unter R starte, wird eine Zeile "usepackage {Sweave}" zur tex Datei hinzugefügt, die unter/Users/gespeichert ist. Brenden/Dokumente. Wenn ich jedoch keine userpackage-Zeile einfüge, wenn ich pdflatex unter cmd (entweder unter/Documents oder/Desktop) ausführe, bekomme ich eine Meldung, die besagt, dass Sweave.sty nicht gefunden wurde. Also habe ich dieses Problem durchgemacht, indem ich immer eine Zeile mit einem detaillierten Pfad hinzugefügt habe, um das Problem zu umgehen. Obwohl die „Sweave.sty nicht gefunden“ Problem umgangen wird, ich feststellen, dass, wenn ich pdflatex unter cmd laufen, bekam ich die Antwort

LaTeX Warning: You have requested package '/Users/Brenden/Documents/R/R- 
2.15.1/share/texmf/tex/latex/Sweave', but the package provides "Sweave'. 

Dann geht es durch mehrere Dateien mit .sty unter miktex

(C:\Users\Brenden\Desktop\MiKTex\tex\latex\base\ifthen.sty) 
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\graphicx.sty) 
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\keyval.sty) 
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\graphics.sty) 
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\trig.sty) 
... 

zu erstellen schließlich eine PDF-

Von einem anderen Beitrag auf Stackoverflow, so heißt es, „Dieser Weg wird automatisch eingestellt, wenn Sie LaTeX installieren, es Baum Ihrer persönlichen texmf ist und Sie Stil oder Klassendateien setzen können Sie wollen LaTeX zu finden, da die Verzeichnisnamen nicht matt sind er sucht rekursiv in ihnen nach Swave.sty ". Für mich jedoch konnte mein MiKTex eindeutig den Swave.sty nicht finden, wenn ich den Pfad nicht spezifiziere. Und selbst mit der Pfadangabe warnt mich LaTex immer noch. Könnte mir jemand erklären, wo ich es vermasselt habe (vielleicht während der Installation von MiKTex?), Damit ich MiKtex helfen konnte, seinen Weg zu Swave zu finden, ohne dass ich den Pfad angegeben habe?

Vielen Dank.

+0

Link zum Beitrag in OP verwiesen: http://Stackoverflow.com/a/7610315/210673 – Aaron

Antwort

7

Im Programm MiKTeX Settings gibt es eine Registerkarte namens "Roots". Dort können Sie angeben, wo weitere .sty Dateien gefunden werden können. In Ihrem Fall glaube ich, dass Sie C:\Users\Brenden\Documents\R\R-2.15.1\share\texmf als zusätzlichen Root hinzufügen möchten. Auf diese Weise kann jedes der TeX-Programme Sweave.sty finden, egal ob es von R oder von der Befehlszeile aus ausgeführt wird.

+0

Vielen Dank, Brian. Es funktionierte! Die Folgefrage eines Neulings, ist diese Information in einem der Dokumente in MiKTex enthalten? Nochmals vielen Dank –

+1

R und MiKTeX haben etwas andere Vorstellungen darüber, wie diese zusätzlichen Dateien behandelt werden sollten. MiKTeX hat sein eigenes Verpackungs- und Vertriebssystem, das R nicht für seine TeX-bezogenen Dateien verwendet. R patcht alles, wenn Dinge aus R aufgerufen werden, indem Umgebungsvariablen geändert werden (TEXINPUTS, glaube ich), so dass TeX die R-spezifischen Dateien finden kann. Aber wenn von außen R aufgerufen wird, fehlt dieser Kleber. Siehe zum Beispiel eine Diskussion dazu: http://tolstoy.newcastle.edu.au/R/e14/help/11/05/2061.html –

4

Ich vermute, dass der Pfad, auf den in dem anderen Beitrag verwiesen wird, der Pfad zu Ihrem persönlichen texmf-Baum ist, wo Sweave es nicht ausdrückt. Eine Möglichkeit ist es zu Ihrem persönlichen texmf-Baum zu bewegen, aber die übliche Methode heute, glaube ich, ist pdflatex aus R laufen, wie folgt aus:

texi2dvi("foo.tex", pdf = TRUE) 

Ich glaube, Sie können auch haben Sweave den vollständigen Pfad hinzufügen automatisch durch

Zugabe
export SWEAVE_STYLEPATH_DEFAULT="TRUE" 

auf Ihre .bashrc Datei, oder was auch immer das Äquivalent auf Ihrem System sein würde.

+0

Vielen Dank, Aaron. Ich habe tyri2dvi schon einmal ausprobiert und ist gescheitert (Anfängerfehler). Aber dann habe ich herausgefunden, dass ich zuerst das Toolpaket hochladen musste. –

2

in der Befehlszeile, R CMD setzt die Umwelt mit Variablen angemessen für die Ausführung von R, beispielsweise auf Windows-up

C:\Users\mtmorgan> "c:\Program Files\R\R-2.15.1\bin\R" CMD set 

umfasst

(dies ist nicht set in der Befehlszeile, wenn man Typen gefunden)
TEXINPUTS=.;c:/PROGRA~1/R/R-215~1/.1/share/texmf/tex/latex; 

und so

C:\Users\mtmorgan> "c:\Program Files\R\R-2.15.1\bin\R" CMD pdflatex myfile.tex 

wird Sweave.sty finden. tools::texi2dvi kann auch von innen R.

6

aufgerufen werden Es ist ärgerlich, durch kleine Teufel wie diese (neue Konzept texmf tree, endlose Umgebungsvariablen TEXINPUTS, SWEAVE_STYLEPATH_DEFAULT, ...) immer abgelenkt werden. Sie werden nie Sorgen um LaTeX-Pakete, wenn Sie knitr verwenden, und wenn Sie die Sweave Stil mögen, können Sie einfach ausgedrückt render_sweave() in dem Dokument wie:

\documentclass{article} 
\title{simple Sweave script} 
<<setup, include=FALSE>>= 
render_sweave() 
@ 

\begin{document} 
\maketitle 
This is a simple script to demonstrate Sweave. Let's 
begin by generating some results 
<<>>= 
x=rnorm(30) 
y=rnorm(30) 
mean(x) 
cor(x,y) 
@ 
and follow that up with some random text 
\end{document} 

speichern es als, sagen wir, test.Rnw und kompilieren Sie es mit

library(knitr); knit('test.Rnw') # or knit2pdf('test.Rnw') 

Und ich denke, Sie sind wahrscheinlich besser dran ohne render_sweave() (dh verwenden Sie die Standard-LaTeX-Stil in knitr).