Wie konvertiere ich R Markdown in PDF?

127

Ich habe zuvor nach den Befehlen zum Konvertieren von R Markdown in HTML gefragt .

Was ist ein guter Weg, um R Markdown-Dateien in PDF-Dokumente zu konvertieren?

Eine gute Lösung würde so viel wie möglich vom Inhalt (z. B. Bilder, Gleichungen, HTML-Tabellen usw.) erhalten. Die Lösung muss über die Befehlszeile ausgeführt werden können. Eine gute Lösung wäre auch plattformübergreifend und würde im Idealfall Abhängigkeiten minimieren, um das Teilen von Makefiles usw. zu vereinfachen.

Insbesondere gibt es viele Optionen:

  • Gibt an, ob RMD in MD in HTML in PDF konvertiert werden soll. oder RMD zu MD zu PDF; oder RMD zu PDF
  • Wenn Sie das markdownPaket in R verwenden, welche Optionen anzugeben sind
  • Ob zu verwenden pandoc, ein in R integriertes Paket oder etwas anderes

Hier ist eine Beispiel- RMD-Datei , die vermutlich einen vernünftigen Test für jede vorgeschlagene Lösung bietet. Es wurde als Grundlage für diesen Blog-Beitrag verwendet .

Jeromy Anglim
quelle
7
Ich glaube, Pandoc sollte der beste Weg sein. Es macht für mich nicht viel Sinn, es in R einzubauen, und ich denke auch nicht, dass es möglich ist (es ist in Haskell geschrieben). Ich habe hier einige sehr frühe Arbeiten: github.com/yihui/knitr-book (siehe zwei Shell-Skripte knitund mdconvert.sh). Es kann schwierig sein, einen allgemeinen Ansatz zu finden, da LaTeX zu flexibel ist. Sie können alle Arten von Vorlagen für Pandoc verwenden.
Yihui Xie
Was ist 'R Markdown *? rstudio.com/ide/docs/r_markdown
Colonel Panic
markdowntopdf.com Diese Seite ist eigentlich ziemlich gut. Es gibt jedoch keine
Latexunterstützung
Können wir diese Antwort für RStudio v1.0 aktualisieren?
Adam_G

Antworten:

69

Aktualisierte Antwort (10. Februar 2013)

rmarkdown-Paket : Auf rmarkdowngithub ist jetzt ein Paket verfügbar , das mit Pandoc verbunden ist. Es enthält eine renderFunktion. Die Dokumentation macht ziemlich deutlich, wie man rmarkdown unter einer Reihe anderer Formate in pdf konvertiert. Dies umfasst das Einfügen von Ausgabeformaten in die rmarkdown-Datei oder das Ausführen eines Ausgabeformats für die Rend-Funktion. Z.B,

render("input.Rmd", "pdf_document")

Befehlszeile: Wenn ich rendervon der Befehlszeile aus laufe (z. B. mit einem Makefile), habe ich manchmal Probleme damit, dass Pandoc nicht gefunden wird. Vermutlich befindet es sich nicht auf dem Suchpfad. In der folgenden Antwort wird erläutert, wie Sie der R-Umgebung Pandoc hinzufügen .

Auf meinem Computer unter OSX, auf dem ich eine Kopie von pandoc über RStudio habe, kann ich beispielsweise Folgendes verwenden:

Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/pandoc');library(rmarkdown);  library(utils); render('input.Rmd', 'pdf_document')"

Alte Antwort (circa 2012)

Eine Reihe von Leuten hat vorgeschlagen, dass Pandoc der richtige Weg ist. Beachten Sie die nachstehenden Hinweise zur Bedeutung einer aktuellen Version von Pandoc.

Verwenden von Pandoc

Ich habe den folgenden Befehl verwendet, um R Markdown in HTML zu konvertieren (dh eine Variante dieses Makefiles ), wobei RMDFILEder Name der R Markdown-Datei ohne die .rmdKomponente lautet (es wird auch davon ausgegangen, dass die Erweiterung lautet .rmdund nicht .Rmd).

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"

und dann diesen Befehl in pdf konvertieren

Pandoc -s example-r-markdown.html -o example-r-markdown.pdf


Ein paar Anmerkungen dazu:

  • Ich habe den Verweis in der Beispieldatei entfernt, die Diagramme nach imgur exportiert, um Bilder zu hosten.
  • Ich habe einen Verweis auf ein Bild entfernt, das auf imgur gehostet wurde. Zahlen scheinen lokal zu sein.
  • Die Optionen in der markdownToHTMLFunktion bedeuteten, dass sich Bildreferenzen auf Dateien und nicht auf Daten beziehen, die in der HTML-Datei gespeichert sind (dh ich habe sie 'base64_images'aus der Optionsliste entfernt).
  • Die resultierende Ausgabe sah so aus . Es hat eindeutig ein Dokument im LaTeX-Stil erstellt, im Gegensatz zu dem, was ich bekomme, wenn ich die HTML-Datei von einem Browser aus als PDF drucke.

Aktuelle Version von Pandoc

Wie von @daroczig erwähnt, ist es wichtig, eine aktuelle Version von Pandoc zu haben, um PDFs ausgeben zu können. Unter Ubuntu war ich am 15. Juni 2012 mit der Version 1.8.1 von Pandoc im Paketmanager festgefahren, aber aus dem Änderungsprotokoll geht hervor, dass Sie für die PDF-Unterstützung mindestens Version 1.9+ von Pandoc benötigen.

Also habe ich installiert caball-install. Und dann lief:

cabal update
cabal install pandoc

Pandoc wurde in installiert ~/.cabal/bin/pandoc . Als ich pandoces ausführte, sah es immer noch die alte Version. Hier finden Sie Informationen zum Hinzufügen zum Pfad .

Jeromy Anglim
quelle
5
Danke für diese Antwort. Ich möchte nur kommentieren, dass meine Erfahrung darin bestand, dass das Geben der .md-Datei an pandoc anstelle der .html-Datei eine bessere Ausgabe ergab. Es lohnt sich also zu experimentieren.
Yoavram
Dies ist der nächste Schritt, den ich auch zu einem guten Prozess gemacht habe. Gibt es eine Möglichkeit, den Figurentext von "Plot Chunk of ..." in etwas anderes zu ändern?
Svenski
1
pandocist in Version 1.12 sogar in meinem mittlerweile veralteten Ubuntu 13.04.
krlmlr
22

Ich denke , was Sie wirklich brauchen pandoc , die großartige Software entworfen und gebaut wurde nur für diese Aufgabe :) Neben pdf , könnten Sie Ihre konvertieren md - Datei zB docx oder odt unter anderem.

Nun, die Installation einer aktuellen Version von Pandoc kann sich unter Linux haskell-platformherausfordern (da Sie das gesamte ˙ benötigen, um aus den Quellen zu erstellen), ist aber unter Windows / Mac mit nur wenigen Megabyte Download wirklich einfach.

Wenn Sie die gebraute / gestrickte Markdown-Datei haben, können Sie einfach pandocz. B. bash oder mit der systemFunktion in R aufrufen . Eine POC-Demo von letzterer ist in der Ṗandoc.convertFunktion meines kleinen Pakets implementiert (von dem Sie sich schrecklich langweilen müssen, wenn ich es versuche lenken Sie Ihre Aufmerksamkeit dort bei jeder Gelegenheit ).

daroczig
quelle
+1 Die Funktion sieht gut aus; Haben Sie einen empfohlenen einzeiligen Pandoc-Befehl zum Konvertieren von R Markdown in PDF?
Jeromy Anglim
1
Das Hinzufügen --tocin der Befehlszeile (was zu einem Nics-Inhaltsverzeichnis führt, das auf Ihren Überschriften basiert) und das Anpassen der LaTeX-Vorlage an Ihre Anforderungen (wie das Hinzufügen dort \listoffiguresund / oder \listoftablesusw.) können zu wunderbaren Dokumenten führen.
Daroczig
3
Was ist mit einer Herausforderung apt-get install pandoc?
Summe
@sumid Möglicherweise haben Sie den aktuellen Teil verpasst (naja , wenn Sie keine Tests verwenden).
Daroczig
Ja, du hast recht - zweimal. Ich habe es verpasst und verwende auch Tests ;-) Dann empfinde ich es als einfacher, vorübergehend Tests zuzulassen sources.listund apt-get install -t testing pandocdann zu installieren haskell-platformund zu kompilieren. (Normalerweise mache ich das mit experimentellen. Ich hoffe, dass es beim Testen genauso funktioniert.)
Summe
14

Im Moment (August 2014) können Sie RStudio zum Konvertieren von R Markdown in PDF verwenden. Grundsätzlich verwendet RStudio Pandoc , um Rmd in PDF zu konvertieren.

Sie können Metadaten ändern in:

  1. Inhaltsverzeichnis hinzufügen
  2. Ändern Sie die Figurenoptionen
  3. Ändern Sie den Syntaxhervorhebungsstil
  4. Fügen Sie LaTeX-Optionen hinzu
  5. Und viele mehr...

Weitere Informationen finden Sie unter http://rmarkdown.rstudio.com/pdf_document_format.htmlGeben Sie hier die Bildbeschreibung ein

Jot eN
quelle
1
Die Option 'PDF stricken' ist in Ubuntu 14.04, pandoc v1.17.1 nicht verfügbar. Müssen Einstellungen vorgenommen werden?
Prradep
Welche Version von RStudio haben Sie? Haben Sie eine neue Rmarkdown-Datei erstellt?
Jot eN
Rstudio - v 0.98.507
Prradep
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Prradep
@Pradep Was war das Ergebnis des Gesprächs?
Nealmcb
10

Für eine Option, die eher dem entspricht, was Sie beim Drucken über einen Browser erhalten, wkhtmltopdfsteht eine Option zur Verfügung.

Auf Ubuntu

sudo apt-get install wkhtmltopdf

Und dann der gleiche Befehl wie für das Pandoc-Beispiel, um zum HTML zu gelangen:

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"

und dann

wkhtmltopdf example-r-markdown.html example-r-markdown.pdf

Die resultierende Datei sah so aus . Es schien nicht mit MathJax umzugehen ( dieses Problem wird hier behandelt ), und die Seitenumbrüche sind hässlich. In einigen Fällen kann ein solcher Stil jedoch einer Präsentation im LaTeX-Stil vorgezogen werden.

Jeromy Anglim
quelle
Ich kann den letzten Befehl in RStudio nicht ausführen. Ich habe versucht, eine system("wkhtmltopdf temp.html temp.pdf") Idee, wie man das behebt
Urvah Shabbir
9

Nur zwei Schritte:

  1. Installieren Sie die neueste Version "pandoc" von hier:

    https://github.com/jgm/pandoc/releases

  2. Rufen Sie die Funktion pandocin derlibrary(knitr)

    library(knitr)
    pandoc('input.md', format = 'latex')
    

So können Sie Ihre "input.md" in "input.pdf" konvertieren.

Wei
quelle
3

Ich fand es am einfachsten, R Studio zu verwenden, aber wenn Sie über die Befehlszeile steuern möchten, kann ein einfaches R-Skript den Trick mit dem Befehl rmarkdown render (wie oben erwähnt) ausführen . Vollständige Skriptdetails hier

#!/usr/bin/env R

# Render R markdown to PDF.
# Invoke with:
# > R -q -f make.R --args my_report.Rmd

# load packages
require(rmarkdown)

# require a parameter naming file to render
if (length(args) == 0) {
    stop("Error: missing file operand", call. = TRUE)
} else {
    # read report to render from command line
    for (rmd in commandArgs(trailingOnly = TRUE)) {
        # render Rmd to PDF
        if ( grepl("\\.Rmd$", rmd) && file.exists(rmd)) {
            render(rmd, pdf_document())
        } else {
            print(paste("Ignoring: ", rmd))
        }
    }
}
Frank Jung
quelle
0

Wenn Sie nichts installieren möchten, können Sie HTML ausgeben. Öffnen Sie dann die HTML-Datei - sie sollte in einem Browserfenster geöffnet werden, und klicken Sie dann mit der rechten Maustaste, um sie zu drucken. Wählen Sie im Druckfenster unten rechts "Als PDF speichern", wenn Sie einen Mac verwenden. Voila!

Mariah Akinbi
quelle
0

Befolgen Sie diese einfachen Schritte:

1: Führen Sie im Rmarkdown-Skript Knit (Strg + Umschalt + K) aus. 2: Klicken Sie nach dem Öffnen des HTML-Markdowns auf Im Browser öffnen (oben links) und das HTML wird in Ihrem Webbrowser geöffnet. 3: Verwenden Sie dann Strg + P und als PDF speichern.

Ankit Kamboj
quelle