Cómo convertir R Markdown a PDF?

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

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

Una buena solución preservaría la mayor cantidad posible del 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 y demás.

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 paquete de markdown en R, qué opciones especificar
  • Ya sea para usar pandoc , un paquete integrado en R o algo más

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

Respuesta actualizada (10 de febrero de 2013)

paquete rmarkdown : ahora hay un paquete rmarkdown disponible en github que interactúa con Pandoc. Incluye una función de render . La documentación deja bastante claro cómo convertir rmarkdown a pdf entre una gama 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 el render desde la línea de comandos (por ejemplo, usando un archivo MAKE), a veces tengo problemas con la búsqueda de pandoc. Presumiblemente, no está en la ruta de búsqueda. La siguiente respuesta explica cómo agregar Pandoc al entorno R.

Entonces, por ejemplo, en mi computadora que ejecuta 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

Utilicé el siguiente comando para convertir R Markdown a HTML (es decir, una variante de este archivo MAKE ), donde RMDFILE es el nombre del archivo R Markdown sin el componente .rmd (también supone que la extensión es .rmd y 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 gráficos para imgur para alojar imágenes.
  • Eliminé una referencia a una imagen alojada en imgur. Las figuras parecen necesitar ser locales.
  • Las opciones en la función markdownToHTML significaban que las referencias de imágenes son a archivos y no a datos almacenados en el archivo HTML (es decir, 'base64_images' de la lista de opciones).
  • El resultado resultante se veía así. Claramente ha hecho un documento de estilo muy 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 lo menciona @daroczig, es importante tener una versión actualizada de Pandoc para generar pdfs. En Ubuntu, a partir del 15 de junio de 2012, me quedé con la versión 1.8.1 de Pandoc en el administrador de paquetes, pero parece que desde el registro de cambios, para soporte de PDF necesita al menos la versión 1.9+ de Pandoc.

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

 cabal update cabal install pandoc 

Pandoc se instaló en ~/.cabal/bin/pandoc Por ~/.cabal/bin/pandoc tanto, cuando ejecuté pandoc todavía estaba viendo la versión anterior. Vea aquí para agregar a la ruta .

Creo que realmente necesitas Pandoc , que fue diseñado y construido para esta tarea. Además de PDF , podrías convertir tu archivo md a, por ejemplo, docx u odt entre otros.

Bueno, la instalación de una versión actualizada de Pandoc puede ser un reto para Linux (ya que necesitaría toda haskell-platform haskell ˙ para comstackr desde las fonts), pero realmente fácil en Windows / Mac con solo unos pocos megabytes de descarga.

Si tiene el archivo de descuento fabricado / tejido, puede simplemente llamar a pandoc en eg bash o con la función del system dentro de R. Una demo POC de este último se implementa en la función Ṗandoc.convert de mi pequeño paquete ( que debe estar terriblemente aburrido) de como bash señalar su atención allí en cada oportunidad ).

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

Podrías cambiar los metadatos a:

  1. Añadir tabla de contenido
  2. Cambiar las opciones de figura
  3. Cambiar estilo de resaltado de syntax
  4. Agregue opciones de LaTeX
  5. Y muchos más…

Para más detalles: http://rmarkdown.rstudio.com/pdf_document_format.html enter image description here

Para una opción que se parece más a lo que obtiene cuando imprime desde un navegador, wkhtmltopdf ofrece 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 veía así. 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 a una presentación de estilo más LaTeX.

Solo dos pasos:

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

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

  2. Llame a la función pandoc en la library(knitr)

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

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

Encontré usar R studio de la manera más fácil, pero si quiero controlar desde la línea de comando, entonces un simple guión R puede hacer el truco usando el comando de renderización rmarkdown (como se mencionó anteriormente). Detalles completos de la secuencia de comandos 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)) } } } 

Si no desea instalar nada, puede generar html. A continuación, abra el archivo html: debería abrirse en una ventana del navegador y luego hacer clic con el botón derecho para imprimir. En la ventana de impresión, seleccione “guardar como PDF” en la esquina inferior derecha si está en una Mac. Voila!

Sigue estos simples pasos:

1: En la secuencia de comandos de Rmarkdown, ejecute Knit (Ctrl + Shift + K) 2: Luego, después de abrir la marca html, haga clic en Abrir en el navegador (parte superior izquierda) y se abrirá el html en su navegador web 3: Luego, use Ctrl + P y Guardar como pdf .