126 votes

Comment convertir R Markdown en PDF ?

J'ai déjà posé des questions sur le Commandes pour convertir le format R Markdown en HTML .

Quel est le bon moyen de convertir des fichiers R Markdown en documents PDF ?

Une bonne solution doit préserver autant que possible le contenu (par exemple, les images, les équations, les tableaux html, etc.) La solution doit pouvoir être exécutée à partir de la ligne de commande. Une bonne solution devrait également être multiplateforme et, idéalement, minimiser les dépendances pour faciliter le partage des fichiers de configuration, etc.

Plus précisément, il y a beaucoup d'options :

  • Que ce soit pour convertir RMD en MD en HTML en PDF ; ou RMD en MD en PDF ; ou RMD en PDF
  • Si vous utilisez le markdown dans R, les options à spécifier
  • S'il faut utiliser pandoc un paquet intégré à R, ou quelque chose d'autre

Voici un exemple fichier rmd qui fournit vraisemblablement un test raisonnable de toute solution proposée. Il a été utilisé comme base pour cet article de blog .

68voto

Jeromy Anglim Points 8325

paquet rmarkdown

mise à jour (10 février 2013) : Il y a maintenant un rmarkdown paquet disponible sur github qui s'interface avec pandoc. Il comprend un render fonction. La documentation explique clairement comment convertir rmarkdown en pdf parmi une série d'autres formats. Cela inclut l'inclusion des formats de sortie dans le fichier rmarkdown ou la fourniture d'un format de sortie à la fonction rend. Par exemple,

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

Ancienne réponse

Ainsi, un certain nombre de personnes ont suggéré que pandoc est la solution à adopter. Voir les notes ci-dessous sur l'importance d'avoir une version à jour de pandoc.

Utilisation de pandoc

J'ai utilisé la commande suivante pour convertir R Markdown en HTML (c'est-à-dire, une variante de ce makefile ), où RMDFILE est le nom du fichier R Markdown sans l'option .rmd (il suppose également que l'extension est .rmd et 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'))"

et ensuite cette commande pour convertir en pdf

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

Quelques remarques à ce sujet :

  • J'ai supprimé la référence dans le fichier d'exemple qui exporte les parcelles vers imgur pour héberger les images.
  • J'ai supprimé une référence à une image qui était hébergée sur imgur. Les chiffres semblent devoir être locaux.
  • Les options de l'onglet markdownToHTML signifie que les références aux images sont des fichiers et non des données stockées dans le fichier HTML (c'est-à-dire que j'ai supprimé la fonction 'base64_images' dans la liste des options).
  • La sortie résultante ressemblait à ce . Il a clairement fait un document de style très LaTeX, contrairement à ce que j'obtiens si j'imprime le fichier HTML en pdf depuis un navigateur.

Obtenir une version à jour de pandoc

Comme mentionné par @daroczig, il est important d'avoir une version à jour de pandoc pour pouvoir sortir des pdfs. Sur Ubuntu, à partir du 15 juin 2012, j'étais coincé avec la version 1.8.1 de pandoc dans le gestionnaire de paquets, mais il semble, d'après le fichier journal des modifications que pour la prise en charge des pdf, il faut au moins la version 1.9+ de pandoc.

Ainsi, j'ai installé caball-install . Et puis il a couru :

cabal update
cabal install pandoc

pandoc a été installé dans ~/.cabal/bin/pandoc Ainsi, lorsque j'ai lancé pandoc il voyait toujours l'ancienne version. Voir ici pour ajouter au chemin .

22voto

daroczig Points 11126

Je pense que vous avez vraiment besoin pandoc Ce logiciel génial a été conçu et construit juste pour cette tâche :) En plus de pdf vous pourriez convertir votre md vers, par exemple, le fichier docx ou odt parmi d'autres.

Bien, installer une version à jour de Pandoc pourrait être difficile sous Linux (car vous auriez besoin de l'ensemble de l'application haskell-platform ˙to build from the sources), mais vraiment facile sur Windows/Mac avec seulement quelques mégaoctets de téléchargement.

Si vous avez le fichier markdown brassé/tricoté vous pouvez juste appeler pandoc en bash, par exemple, ou avec l'option system au sein de R. Une démonstration POC de cette dernière est mise en œuvre dans l'application Ṗandoc.convert fonction de mon petit paquet ( dont vous devez vous ennuyer terriblement car j'essaie d'attirer votre attention sur elle à chaque occasion. ).

14voto

Jot eN Points 422

En ce moment (août 2014), vous pourriez utiliser RStudio pour convertir R Markdown en PDF. Fondamentalement, RStudio utilise pandoc pour convertir Rmd en PDF.

Vous pourriez changer les métadonnées pour :

  1. Ajouter une table des matières
  2. Modifier les options des figures
  3. Modifier le style de la coloration syntaxique
  4. Ajouter des options LaTeX
  5. Et bien d'autres encore...

Pour plus de détails - http://rmarkdown.rstudio.com/pdf_document_format.html enter image description here

10voto

Jeromy Anglim Points 8325

Pour une option qui ressemble davantage à ce que vous obtenez lorsque vous imprimez à partir d'un navigateur, wkhtmltopdf offre une option.

Sur Ubuntu

sudo apt-get install wkhtmltopdf

Et ensuite la même commande que pour l'exemple pandoc pour arriver au 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'))"

et ensuite

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

Le fichier résultant ressemblait à ce . Il n'a pas semblé gérer la fonction MathJax ( cette question est discutée ici ), et les sauts de page sont moches. Cependant, dans certains cas, un tel style peut être préféré à une présentation plus proche du style LaTeX.

9voto

Wei Points 19

Seulement deux étapes :

étape 1 : installez la dernière version de "pandoc" ici :

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

étape 2 : appelez simplement la fonction "pandoc" dans la bibliothèque(knitr)

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

Ainsi, vous pouvez convertir votre "input.md" en "input.pdf".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X