PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LaTeX + R mit Sweave



Makana
22-10-2012, 21:33
Hallo,

ich bin dabei meine Diplomarbeit zu schreiben und nutze dafür LaTeX und R. Nun musste ich mich heute wiederholt darüber ärgern, dass es soviel Zeit kostet, die mittels R erzeugten Grafiken in LaTeX einzubinden, da ich immer noch mit Grafikprogrammen das feintuning machen muss (Hauptsächlich wegen sich ändernden Schriftgrößen und Skalierung beim einbinden in LaTeX).

Nun habe ich Sweave "entdeckt" und ein bisschen was über knitr gelesen. Das hört sich auch alles recht gut an, aber mir ist einfach nicht klar wie ich einen anständigen workaround in dieser Kombination hinbekomme der über die Standardbeispiele von 2+2 und plot(x) hinausgeht.

Da ich mitten in meiner Arbeit stecke scheue ich mich davor mich da jetzt richtig einzuarbeiten um dann festzustellen, dass es nicht gewünscht funktioniert.

Vielleicht kann mir hier ja jemand ein paar Tips geben.

Zur Problemstellung:
Mein LaTeX Dokument besteht aus einem Hauptdokument und jeweils einem .tex Dokument für jedes Kapitel (über \include{Kapitel} eingebunden).
In die einzelnen Kapitel möchte ich gerne Grafiken aus R einbinden (bisher über R > postscript() > Inkscape > pdf > LaTeX )
Die für R genutzten Skripte sind teilweise recht umfangreich

Ich nutzer RStudio und Texmaker unter Ubuntu 12.04


Ich suche einen Weg wie ich die R-Skripte in LaTeX innerhalb unterschiedlicher Kapitel einbinden kann um mir daraus Grafiken zu erzeugen und über das Hauptdokument kompilieren lassen kann
Ich würde das ganze gerne über Texmaker kompilieren (ist aber nicht zwingend).

Gibt es dazu eine Möglichkeit, oder lieber gleich die Finger davon lassen?

Beste Grüße
Makana

bobmalaria
22-10-2012, 22:56
hi,

ich würde es an deiner stelle vorziehen plots mit tikzDevice (R paket) zu exportieren. dann hast du tex-code und kannst diesen per \input einbinden und der graph erscheint.

ich plotte meist ganz normale x,y plots und dafür exportiere ich aus R lieber ein datenfile das ich dann in latex mit dem pgfplots-paket plotte.

sollte ich in R estwas komplizierteres machen wie z.b. ein contour plot, dann erstelle ich ein png ohne achsen und beschriftung in der richtigen größe und binde es auch wieder mit dem pgfplots paket ein und füge dort die beschrifting ein. so habe ich immer die richtige schriftart und größe im dokument.

dadurch hat man natürlich keine direkte R-LateX interaktion, aber meistens braucht man das ja auch nicht wirklich, oder?

gruss

Donalduck
22-10-2012, 23:09
Der Schritt mit dem konvertieren in Inkscape lässt sich mit einer Batch datei auch nett automatisieren:

inkscape.com %1 -z -D --export-pdf="%~n1.pdf" --export-latex
Einfach eine Batch datei damit machen, dann kannst du ein Bild draufziehen und es wird konvertiert.

Makana
22-10-2012, 23:10
Danke für die schnelle Antwort,
ich werde mich morgen mal mit den pgfplot beschäftigen. Ich hatte schon versucht das tikzDevice Paket zu laden aber dieses schein für R 2.14.1 nicht verfügbar zu sein.

Mit dem brauchen oder nicht ist es eben so eine Sache :) es wäre halt schön bequem, einfach einen Verweis auf ein bestehendes Skrip zu geben und die entsprechende Ausgabe direkt im Dokument zu haben.

Beste Grüße
Makana

Makana
22-10-2012, 23:14
Hallo Donalduck,

was bewirkt denn die Batch-Datei? Das Hauptproblem ist ja die Schriftgröße und die Stelle an der der skalierte Text eingefügt wird. Aus R kann man sich auch direkt ein pdf ausgeben lassen aber hat dann unter umständen das Problem mit dem Format.

Beste Grüße
Makana

Donalduck
22-10-2012, 23:55
Das sorgt dafür dass (zumindest bei den svg Dateien die ich benutz) die Bilder als pdf exportiert werden und der Text der darauf liegt als LaTeX Code exportiert wird. Der LaTeX Code wird automatisch beim einbinden der "pdf_tex" Datei in deinem Dokument über das Bild gelegt. genaueres steht in der "pdf_tex" Datei. Das heisst, dass du den Vorteil hast es nicht selber zusammenbasteln zu müssen alles, aber du kannst in deinen Beschriftungen LaTeX-Code benutzen und er wird übersetzt und die Schriftarten stimmen auch.
Siehe auch hier, (http://wiki.inkscape.org/wiki/index.php/Release_notes/0.48#New_LaTeX_export_for_PDF.2FEPS.2FPS)

Makana
23-10-2012, 12:58
@ Donalduck

Ich weiß leider überhaupt nicht wie und wo ich diese batch Datei ausführen kann und muss.

Der Vollständigkeit halber hier noch der Weg wie man die tikzDevice für R installiert bekommt.


install.packages("tikzDevice", repos="http://R-Forge.R-project.org")

bobmalaria
23-10-2012, 13:15
hi,

meinen dafuerhalten nach bringt das batch skript in diesem fall nichts.

es ist richtig, dass inkscape ein pdf-bild und text in latex-code getrennt voneinander exportieren kann. so hat man dann die textschriftart im latex dokument.

dies funktioniert aber nicht wenn man ein pdfbild in inkscape laed das bereits text enthaelt, oder? ich glaube nicht.

das ziel ist es ja immer das man im dokument die achsenbeschriftung inkl. zahlen in der textschriftart darstellt. so sieht dann das dokument mehr wie "aus einem guss" aus. dafuer eigent sich meiner meinung nach am besten das direkte plotten mit pgfplots aus datenfiles, der export aus R als bild mit dem anschliessenden einbinden via pgfplots oder eben dem export aus R mit tikzdevice.

pgfplots und tikzdevice wuerde ich allerdings nicht mischen da es zu leichtu unterschiedlichen ergebnissen kommen kann

gruss

Donalduck
23-10-2012, 13:47
Wie gesagt, ich hab das nur benutzt um svg Dateien zu konvertieren, aber bei denen funktioniert es wunderbar wenn die den Text bereits enthalten. Natürlich nur wenn das noch Text ist, und nicht in Pfade konvertiert wurde.

bobmalaria
23-10-2012, 13:59
@donald,

ja so benutze ich inkcape auch. wie ich es verstanden habe, verwendet der OP inkscape aber nur um sein ps/eps bild in ein pdf zu verwandeln.

man kann in inkscape zwar beim eps import Text handling: Import text as text anwaehlen, aber das ist wohl noch ein feature mit bugs (http://www.inkscapeforum.com/viewtopic.php?f=5&t=12143).

sollte das stabil laufen, dann ist der weg eps->inkscape import mit text->pdf+latex export aus inkscape allerdings eine moeglichkeit