J'ai déjà posé des questions sur les commandes permettant de convertir R Markdown en HTML .
Quel est le bon moyen de convertir des fichiers R Markdown en PDF?
Une bonne solution permettrait de préserver autant que possible le contenu (images, équations, tableaux html, etc.). La solution doit pouvoir être exécutée à partir de la ligne de commande. Une bonne solution serait également multiplate-forme et minimiserait idéalement les dépendances afin de faciliter le partage de fichiers Make, etc.
Plus précisément, il y a beaucoup d'options:
markdown
dans R, quelles options spécifier?pandoc
, un paquet intégré à R ou autre choseVoici 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 .
rmarkdown package: Il existe maintenant un paquet rmarkdown
disponible sur github qui s'interface avec Pandoc. Il inclut une fonction render
. La documentation explique clairement comment convertir rmarkdown en pdf parmi une gamme d'autres formats. Cela inclut l'inclusion de formats de sortie dans le fichier rmarkdown ou l'exécution en fournissant un format de sortie à la fonction rend. Par exemple.,
render("input.Rmd", "pdf_document")
Ligne de commande: Lorsque j'exécute render
à partir de la ligne de commande (par exemple, à l'aide d'un fichier Make), j'ai parfois des problèmes avec l'absence de recherche de pandoc. Vraisemblablement, ce n’est pas sur le chemin de recherche .. La réponse suivante explique comment ajouter pandoc à l’environnement R .
Ainsi, par exemple, sur mon ordinateur fonctionnant sous OSX, où je possède une copie de pandoc via RStudio, je peux utiliser les éléments suivants:
Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/pandoc');library(rmarkdown); library(utils); render('input.Rmd', 'pdf_document')"
Ainsi, un certain nombre de personnes ont suggéré que Pandoc était la voie à suivre. Voir les notes ci-dessous sur l’importance de disposer d’une version à jour 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 le composant .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'))"
puis cette commande pour convertir en pdf
Pandoc -s example-r-markdown.html -o example-r-markdown.pdf
markdownToHTML
signifiaient que les références d’image concernaient des fichiers et non des données stockées dans le fichier HTML (c’est-à-dire que j’ai supprimé 'base64_images'
de la liste des options).Comme mentionné par @daroczig, il est important de disposer d'une version à jour de Pandoc afin de générer des fichiers PDF. À compter du 15 juin 2012, sur Ubuntu, la version 1.8.1 de Pandoc s’est retrouvée coincée dans le gestionnaire de paquets, mais il semble, d'après le change log que, pour le support PDF, vous avez besoin de la version 1.9+ ou supérieure de Pandoc.
Ainsi, j'ai installé caball-install
. Et ensuite couru:
cabal update
cabal install pandoc
Pandoc a été installé dans ~/.cabal/bin/pandoc
Ainsi, lorsque j’ai exécuté pandoc
, il voyait toujours l’ancienne version . Voir ici pour ajout au chemin .
Je pense que vous avez vraiment besoin de pandoc , logiciel génial conçu et construit spécialement pour cette tâche :) Outre pdf, vous pouvez convertir votre fichier md en fichier, par exemple. docx ou odt entre autres.
Bien, installer une version mise à jour de Pandoc pourrait être un défi pour Linux (comme vous auriez besoin de tout le haskell-platform
˙ pour construire à partir des sources), mais très facile sous Windows/Mac avec seulement quelques mégaoctets de Télécharger.
Si vous avez le fichier de brassage tricoté/tricoté, vous pouvez simplement appeler pandoc
dans par exemple bash ou avec la fonction system
dans R. Une démonstration POC de ce dernier est implémentée dans la fonction Ṗandoc.convert
de mon petit paquet (que vous doit être terriblement ennuyé car j'essaie d'attirer votre attention là-bas à chaque occasion).
En ce moment (août 2014), vous pouvez utiliser RStudio pour convertir R Markdown en PDF. En gros, RStudio utilise pandoc pour convertir Rmd en PDF.
Vous pouvez changer les métadonnées en:
Pour plus de détails - http://rmarkdown.rstudio.com/pdf_document_format.html
Pour une option qui ressemble davantage à ce que vous obtenez lorsque vous imprimez à partir d'un navigateur, wkhtmltopdf
fournit une option.
Sur Ubuntu
Sudo apt-get install wkhtmltopdf
Et ensuite, la même commande que pour l'exemple de pandoc pour obtenir le code 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 alors
wkhtmltopdf example-r-markdown.html example-r-markdown.pdf
Le fichier résultant ressemblait à ceci . Il ne semblait pas gérer le MathJax ( cette question est discutée ici ), et les sauts de page sont laids. Toutefois, dans certains cas, un tel style peut être préféré à une présentation de style plus LaTeX.
Seulement deux étapes:
Installez la dernière version "pandoc" à partir d'ici:
Appelez la fonction pandoc
dans la library(knitr)
library(knitr)
pandoc('input.md', format = 'latex')
Ainsi, vous pouvez convertir votre "input.md" en "input.pdf".
J'ai trouvé le moyen le plus simple d'utiliser R studio, mais si vous souhaitez contrôler à partir de la ligne de commande, vous pouvez utiliser un simple script R à l'aide de la commande rmarkdown render (comme mentionné ci-dessus). Détails complets du script ici
#!/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))
}
}
}
Suivez ces étapes simples:
1: Dans le script Rmarkdown, exécutez Knit (Ctrl + Maj + K) 2: Ensuite, une fois le marquage HTML ouvert, cliquez sur Ouvrir dans le navigateur (en haut à gauche) et sur le html est ouvert dans votre navigateur web 3: utilisez ensuite Ctrl + P et enregistrez sous PDF.
Si vous ne souhaitez rien installer, vous pouvez générer du code HTML. Ensuite, ouvrez le fichier html - il devrait s’ouvrir dans une fenêtre de navigateur, puis cliquer avec le bouton droit de la souris pour imprimer. Si vous utilisez un Mac, sélectionnez "enregistrer en tant que PDF" dans le coin inférieur droit de la fenêtre. Voila!