¿Cómo convertir R Markdown a PDF?

127

Anteriormente pregunté sobre los comandos para convertir R Markdown a HTML .

¿Cuál es una buena manera de convertir archivos R Markdown a documentos PDF?

Una buena solución preservaría tanto como sea posible el contenido (por ejemplo, imágenes, ecuaciones, tablas html, etc.). La solución debe poder ejecutarse desde la línea de comandos. Una buena solución también sería multiplataforma e idealmente minimizaría las dependencias para facilitar el intercambio de archivos MAKE, etc.

Específicamente, hay muchas opciones:

  • Si convertir RMD a MD a HTML a PDF; o RMD a MD a PDF; o RMD a PDF
  • Si usa el markdownpaquete en R, qué opciones especificar
  • Ya sea para usar pandoc, un paquete integrado en R u otra cosa

Aquí hay un archivo rmd de ejemplo que presumiblemente proporciona una prueba razonable de cualquier solución propuesta. Se utilizó como base para esta publicación de blog .

Jeromy Anglim
fuente
77
Creo que Pandoc debería ser el mejor camino a seguir. No tiene mucho sentido para mí construirlo en R, y tampoco creo que sea posible (está escrito en Haskell). Tengo un trabajo muy temprano aquí: github.com/yihui/knitr-book (ver dos scripts de shell knity mdconvert.sh). Puede ser difícil presentar un enfoque general ya que LaTeX es demasiado flexible; Puedes usar todo tipo de plantillas para pandoc.
Yihui Xie
¿Qué es 'R Markdown *? rstudio.com/ide/docs/r_markdown
Coronel Panic el
markdowntopdf.com este sitio es bastante bueno, en realidad. Sin embargo, no hay soporte de látex
padawan
¿Podemos actualizar esta respuesta para RStudio v1.0?
Adam_G

Respuestas:

69

Respuesta actualizada (10 de febrero de 2013)

Paquete rmarkdown : ahora hay un rmarkdownpaquete disponible en github que interactúa con Pandoc. Incluye una renderfunción. La documentación deja bastante claro cómo convertir rmarkdown a pdf entre una variedad de otros formatos. Esto incluye incluir formatos de salida en el archivo rmarkdown o ejecutar el suministro de un formato de salida a la función rend. P.ej,

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

Línea de comando: cuando ejecuto renderdesde la línea de comando (p. Ej., Usando un archivo MAKE), a veces tengo problemas con la búsqueda de pandoc. Presumiblemente, no está en la ruta de búsqueda. La respuesta siguiente explica cómo añadir Pandoc al medio ambiente: R .

Entonces, por ejemplo, en mi computadora con OSX, donde tengo una copia de pandoc a través de RStudio, puedo usar lo siguiente:

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

Respuesta anterior (circa 2012)

Entonces, varias personas han sugerido que Pandoc es el camino a seguir. Consulte las notas a continuación sobre la importancia de tener una versión actualizada de Pandoc.

Usando Pandoc

Usé el siguiente comando para convertir R Markdown a HTML (es decir, una variante de este archivo MAKE ), donde RMDFILEestá el nombre del archivo R Markdown sin el .rmdcomponente (también se supone que la extensión es .rmdy no .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'))"

y luego este comando para convertir a pdf

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


Algunas notas sobre esto:

  • Eliminé la referencia en el archivo de ejemplo que exporta tramas para imgur a imágenes de host.
  • Eliminé una referencia a una imagen que estaba alojada en imgur. Las cifras parecen ser locales.
  • Las opciones en la markdownToHTMLfunción significaban que las referencias de imágenes son a archivos y no a datos almacenados en el archivo HTML (es decir, los eliminé 'base64_images'de la lista de opciones).
  • La salida resultante parecía este . Claramente ha hecho un documento muy estilo LaTeX en contraste con lo que obtengo si imprimo el archivo HTML a PDF desde un navegador.

Obtener la versión actualizada de Pandoc

Como mencionó @daroczig, es importante tener una versión actualizada de Pandoc para generar archivos PDF. En Ubuntu a partir del 15 de junio de 2012, estaba atascado con la versión 1.8.1 de Pandoc en el administrador de paquetes, pero según el registro de cambios, para la compatibilidad con PDF necesita al menos la versión 1.9+ de Pandoc.

Por lo tanto, lo instalé caball-install. Y luego corrió:

cabal update
cabal install pandoc

Pandoc se instaló en ~/.cabal/bin/pandoc Así, cuando lo ejecuté pandoc, todavía veía la versión anterior. Vea aquí para agregar a la ruta .

Jeromy Anglim
fuente
55
Gracias por esta respuesta Solo quiero comentar que mi experiencia fue que dar el archivo .md a pandoc , en lugar del archivo .html, dio un mejor resultado. Entonces vale la pena experimentar.
yoavram
Esto es lo más cerca que he llegado a un buen proceso también. ¿Hay alguna forma de cambiar el texto de la figura de "trama de ..." a otra?
svenski
1
pandocestá en la versión 1.12 incluso en mi Ubuntu 13.04 ahora desactualizado.
krlmlr
22

Creo que realmente necesita Pandoc , que gran software fue diseñado y construido solo para esta tarea :) Además de PDF , puede convertir su archivo md a, por ejemplo, docx o odt, entre otros.

Bueno, instalar una versión actualizada de Pandoc podría ser un desafío en Linux (ya que necesitaría todo haskell-platform˙ para construir desde las fuentes), pero realmente fácil en Windows / Mac con solo unos pocos megabytes de descarga.

Si tiene el archivo de reducción preparado / tejido, simplemente puede llamar, pandocpor ejemplo, bash o con la systemfunción dentro de R. Una demostración POC de este último se implementa en la Ṗandoc.convertfunción de mi pequeño paquete ( que debe aburrir terriblemente cuando intento señale su atención allí en cada oportunidad ).

daroczig
fuente
+1 La función se ve bien; ¿Tiene un comando pandoc de una línea recomendado para convertir R Markdown a PDF?
Jeromy Anglim
1
Agregar --tocsería útil en la línea de comandos (lo que da como resultado una tabla de contenido basada en sus encabezados) y también personalizar la plantilla LaTeX para sus necesidades (como agregar allí \listoffiguresy / o \listoftablesetc.) podría generar documentos maravillosos.
daroczig
3
¿Sobre qué desafiante apt-get install pandoc?
Sumid
@sumid, es posible que se haya perdido la parte actualizada (bueno, si no está utilizando las pruebas).
Daroczig
Sí, tienes razón, dos veces. Me lo perdí y también estoy usando las pruebas ;-) Entonces percibo que es más fácil permitir temporalmente la prueba sources.listy apt-get install -t testing pandocluego la instalación haskell-platformy la compilación. (Por lo general, hago esto con experimental. Espero que funcione de la misma manera en las pruebas.)
Sumid
14

En este momento (agosto de 2014) Podría usar RStudio para convertir R Markdown a PDF. Básicamente, RStudio usa pandoc para convertir Rmd a PDF.

Puede cambiar los metadatos a:

  1. Agregar tabla de contenido
  2. Cambiar opciones de figura
  3. Cambiar el estilo de resaltado de sintaxis
  4. Agregar opciones de LaTeX
  5. Y muchos más...

Para más detalles: http://rmarkdown.rstudio.com/pdf_document_format.htmlingrese la descripción de la imagen aquí

Jot eN
fuente
1
La opción 'knit PDF' no está disponible en Ubuntu 14.04, pandoc v1.17.1. ¿Hay que hacer alguna configuración?
Prradep
¿Qué versión de RStudio tienes? ¿Creó un nuevo archivo rmarkdown?
Jot eN
Rstudio - v 0.98.507
Prradep
Continuemos esta discusión en el chat .
Prradep
@Prradep ¿Cuál fue el resultado de la conversación?
nealmcb
10

Para una opción que se parece más a lo que obtienes cuando imprimes desde un navegador, wkhtmltopdfofrece una opción.

En Ubuntu

sudo apt-get install wkhtmltopdf

Y luego el mismo comando que para el ejemplo de pandoc para llegar al 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'))"

y entonces

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

El archivo resultante se parecía a esto . No parecía manejar MathJax ( este tema se trata aquí ), y los saltos de página son feos. Sin embargo, en algunos casos, tal estilo podría preferirse sobre una presentación más de estilo LaTeX.

Jeromy Anglim
fuente
No puedo ejecutar el último comando en RStudio. He intentado system("wkhtmltopdf temp.html temp.pdf") cualquier idea de cómo solucionar eso
Urvah Shabbir
9

Solo dos pasos:

  1. Instale la última versión "pandoc" desde aquí:

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

  2. Llame a la función pandocen ellibrary(knitr)

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

Por lo tanto, puede convertir su "input.md" en "input.pdf".

Wei
fuente
3

Encontré que usar R studio es la forma más fácil, pero si quiero controlar desde la línea de comandos, entonces un simple script R puede hacer el truco usando el comando rmarkdown render (como se mencionó anteriormente). Detalles completos del guión aquí

#!/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
fuente
0

Si no desea instalar nada, puede generar html. Luego abra el archivo html; debe abrirse en una ventana del navegador, luego haga clic derecho para imprimir. En la ventana de impresión, seleccione "guardar como pdf" en la esquina inferior derecha si está en una Mac. Voila!

Mariah Akinbi
fuente
0

Sigue estos sencillos pasos:

1: En la secuencia de comandos Rmarkdown, ejecute Knit (Ctrl + Shift + K) 2: Luego, una vez que se abra la marcación html, haga clic en Abrir en el navegador (parte superior izquierda) y el html se abrirá en su navegador web 3: Luego use Ctrl + P y Guardar como pdf .

Ankit Kamboj
fuente