85 votos

¿Cómo convertir R Markdown a PDF?

He preguntado anteriormente acerca de la comandos para convertir R Markdown a HTML .

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

Una buena solución sería preservar lo más posible el contenido (por ejemplo, imágenes, ecuaciones, tablas html, etc.). La solución debe ser capaz de ser ejecutada 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 makefiles 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 se utiliza el markdown paquete en R, qué opciones especificar
  • Si usar o no pandoc un paquete integrado en R, o algo más

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

47voto

Jeromy Anglim Puntos 8325

paquete rmarkdown

actualización (10 Feb 2013) : Ahora hay un rmarkdown paquete disponible en github que interactúa con Pandoc. Incluye un render función. La documentación deja bastante claro cómo convertir rmarkdown a pdf entre una serie de otros formatos. Esto incluye la inclusión de formatos de salida en el archivo de rmarkdown o la ejecución del suministro de un formato de salida a la función de rasgado. Por ejemplo..,

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

Respuesta antigua

Por lo tanto, un número de personas han sugerido que Pandoc es el camino a seguir. Ver notas más abajo sobre la importancia de tener una versión actualizada de pandoc.

Usando el pandoc

Utilicé el siguiente comando para convertir R Markdown a HTML (es decir.., una variante de este expediente ), donde RMDFILE es el nombre del archivo R Markdown sin el .rmd componente (también asume 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

Unas notas sobre esto:

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

Obteniendo la versión actualizada de pandoc

Como mencionó @daroczig, es importante tener una versión actualizada de pandoc para poder producir pdfs. En Ubuntu, a partir del 15 de junio de 2012, estaba atascado con la versión 1.8.1 de pandoc en el gestor de paquetes, pero parece que desde el registro de cambios que para el soporte de pdf necesitas al menos la versión 1.9+ de pandoc.

Así, instalé caball-install . Y luego corrió:

cabal update
cabal install pandoc

pandoc se instaló en ~/.cabal/bin/pandoc Así, cuando corrí pandoc todavía estaba viendo la versión antigua. Vea aquí para añadiendo al camino .

17voto

daroczig Puntos 11126

Creo que realmente necesitas pandoc que un gran software fue diseñado y construido sólo para esta tarea :) Además de pdf podrías convertir tu md archivo a, por ejemplo. docx o odt entre otros.

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

Si tienes el archivo de la rebaja de la cerveza/tejido, puedes llamar pandoc en, por ejemplo, un golpe o con el system dentro de R. Una demostración de POC de este último se implementa en el Ṗandoc.convert función de mi pequeño paquete ( de lo cual debe estar terriblemente aburrido mientras trato de dirigir su atención allí en cada oportunidad ).

7voto

Jeromy Anglim Puntos 8325

Para una opción que se parece más a lo que obtienes cuando imprimes desde un navegador, wkhtmltopdf proporciona 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 luego

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

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

6voto

Jot eN Puntos 422

Ahora mismo (agosto de 2014) Podrías usar RStudio para convertir R Markdown a PDF. Básicamente, RStudio utiliza pandoc para convertir Rmd a PDF.

Podrías cambiar los metadatos a:

  1. Añadir el índice
  2. Cambiar las opciones de la figura
  3. Cambiar el estilo de resaltado de la sintaxis
  4. Agregar opciones de LaTeX
  5. Y muchos más...

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

4voto

Wei Puntos 19

Sólo dos pasos:

paso 1: instalar la última versión de "pandoc" aquí:

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

paso 2: simplemente llama a la función "pandoc" en la biblioteca (knitr)

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

Así, puede convertir su "input.md" en "input.pdf".

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X