Come convertire R Markdown in PDF?

Ho chiesto in precedenza i comandi per convertire R Markdown in HTML .

Qual è un buon modo per convertire i file R Markdown in documenti PDF?

Una buona soluzione preserverebbe il più ansible il contenuto (ad es. Immagini, equazioni, tabelle html, ecc.). La soluzione deve essere in grado di essere eseguita dalla riga di comando. Una buona soluzione sarebbe anche cross-platform e idealmente ridurre al minimo le dipendenze per rendere più facile la condivisione dei makefile e così via.

Nello specifico, ci sono molte opzioni:

  • Sia per convertire RMD in MD in HTML in PDF; o da RMD a MD in PDF; o RMD in PDF
  • Se si utilizza il pacchetto markdown in R, quali opzioni specificare
  • Se usare pandoc , un pacchetto incorporato in R o qualcos’altro

Ecco un esempio di file rmd che presumibilmente fornisce un test ragionevole di qualsiasi soluzione proposta. È stato usato come base per questo post sul blog .

    Risposta aggiornata (10 febbraio 2013)

    pacchetto rmarkdown : ora è disponibile un pacchetto rmarkdown su github che si interfaccia con Pandoc. Include una funzione di render . La documentazione rende abbastanza chiaro come convertire rmarkdown in pdf in una serie di altri formati. Ciò include l’inclusione dei formati di output nel file rmarkdown o l’esecuzione di un formato di output per la funzione rend. Per esempio,

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

    Riga di comando: quando eseguo il render dalla riga di comando (ad esempio, utilizzando un makefile), a volte ho problemi con pandoc che non viene trovato. Presumibilmente, non è sul percorso di ricerca. La seguente risposta spiega come aggiungere pandoc all’ambiente R.

    Quindi, per esempio, sul mio computer con OSX, dove ho una copia di pandoc tramite RStudio, posso usare quanto segue:

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

    Vecchia risposta (circa 2012)

    Quindi, un numero di persone ha suggerito che Pandoc è la strada da percorrere. Vedere le note seguenti sull’importanza di avere una versione aggiornata di Pandoc.

    Utilizzando Pandoc

    Ho usato il seguente comando per convertire R Markdown in HTML (cioè, una variante di questo makefile ), dove RMDFILE è il nome del file R Markdown senza il componente .rmd (presuppone anche che l’estensione sia .rmd e non .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'))" 

    e poi questo comando per convertire in pdf

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

    Alcune note su questo:

    • Ho rimosso il riferimento nel file di esempio che esporta i grafici da imgur alle immagini host.
    • Ho rimosso un riferimento a un’immagine ospitata su imgur. Sembra che le cifre debbano essere locali.
    • Le opzioni nella funzione markdownToHTML significavano che i riferimenti alle immagini riguardano i file e non i dati memorizzati nel file HTML (cioè, ho rimosso 'base64_images' dall’elenco delle opzioni).
    • L’output risultante sembrava così. Ha chiaramente creato un documento in stile LaTeX in contrasto con quello che ottengo se stampo il file HTML in formato PDF da un browser.

    Ottenere la versione aggiornata di Pandoc

    Come accennato da @daroczig, è importante avere una versione aggiornata di Pandoc per l’output dei pdf. Su Ubuntu a partire dal 15 giugno 2012, sono rimasto bloccato con la versione 1.8.1 di Pandoc nel gestore pacchetti, ma dal log delle modifiche sembra che per il supporto pdf sia necessaria almeno la versione 1.9+ di Pandoc.

    Pertanto, ho installato caball-install . E poi ha funzionato:

     cabal update cabal install pandoc 

    Pandoc è stato installato in ~/.cabal/bin/pandoc Quindi, quando ho eseguito pandoc , continuava a vedere la versione precedente. Vedi qui per aggiungere al percorso .

    Penso che tu abbia davvero bisogno di pandoc , quale ottimo software è stato progettato e realizzato proprio per questo compito 🙂 Oltre al pdf , puoi convertire il tuo file md ad es. Docx o odt, tra gli altri.

    Beh, installare una versione aggiornata di Pandoc potrebbe essere una sfida su Linux (come avresti bisogno dell’intera haskell-platform haskell ˙ per creare dai sorgenti), ma davvero facile su Windows / Mac con solo pochi megabyte di download.

    Se hai il file pandoc preparato / lavorato puoi semplicemente chiamare pandoc ad esempio bash o con la funzione di system in R. Una demo POC di quest’ultimo è implementata nella funzione Ṗandoc.convert del mio piccolo pacchetto ( che devi essere terribilmente annoiato di come cerco di indicare la tua attenzione lì in ogni occasione ).

    Al momento (agosto 2014) è ansible utilizzare RStudio per convertire R Markdown in PDF. Fondamentalmente, RStudio usa pandoc per convertire Rmd in PDF.

    È ansible modificare i metadati in:

    1. Aggiungi sumrio
    2. Cambia le opzioni di figura
    3. Cambia stile di evidenziazione della syntax
    4. Aggiungi opzioni LaTeX
    5. E molti altri…

    Per maggiori dettagli: http://rmarkdown.rstudio.com/pdf_document_format.html inserisci la descrizione dell'immagine qui

    Per un’opzione che assomiglia di più a ciò che si ottiene stampando da un browser, wkhtmltopdf offre un’opzione.

    Su Ubuntu

     sudo apt-get install wkhtmltopdf 

    E poi lo stesso comando per l’esempio pandoc per arrivare all’HTML:

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

    e poi

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

    Il file risultante sembrava così. Non sembrava gestire MathJax ( questo problema è discusso qui ) e le interruzioni di pagina sono brutte. Tuttavia, in alcuni casi, uno stile simile potrebbe essere preferito a una presentazione in stile LaTeX.

    Solo due passaggi:

    1. Installa l’ultima versione “pandoc” da qui:

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

    2. Chiama la funzione pandoc nella library(knitr)

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

    Pertanto, puoi convertire il tuo “input.md” in “input.pdf”.

    Ho trovato l’uso di R Studio nel modo più semplice, ma se vuoi controllare dalla riga di comando, allora un semplice script R può fare il trucco usando il comando rmarkdown render (come menzionato sopra). Dettagli completi di script qui

     #!/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)) } } } 

    Se non vuoi installare nulla, puoi generare html. Quindi apri il file html: dovrebbe aprirsi in una finestra del browser, quindi fare clic con il pulsante destro del mouse per stampare. Nella finestra di stampa, seleziona “salva come pdf” nell’angolo in basso a destra se sei su un Mac. Ecco!

    Segui questi semplici passaggi:

    1: nello script Rmarkdown esegui Knit (Ctrl + Shift + K) 2: Quindi dopo che il markdown html è stato aperto fai clic su Apri nel browser (in alto a sinistra) e l’html è aperto nel tuo browser 3: Quindi usa Ctrl + P e salva come PDF.