web-dev-qa-db-fra.com

Comment convertir un markdown en fichier PDF?

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:

  • S'il faut convertir RMD en MD en HTML en PDF; ou RMD to MD to PDF; ou RMD au format PDF
  • Si vous utilisez le package markdown dans R, quelles options spécifier?
  • S'il faut utiliser pandoc, un paquet intégré à R ou autre chose

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 .

123
Jeromy Anglim

Réponse mise à jour (10 février 2013)

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')"

Ancienne réponse (circa 2012)

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.

Utiliser 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


Quelques notes à ce sujet:

  • J'ai supprimé la référence dans le fichier d'exemple qui exporte des tracés pour imgur to Host images.
  • J'ai supprimé une référence à une image hébergée sur imgur. Les chiffres semblent avoir besoin d'être local.
  • Les options de la fonction 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).
  • La sortie résultante ressemblait à ceci . Cela a clairement fait un document très au style LaTeX contrairement à ce que je reçois si j'imprime le fichier HTML au format PDF à partir d'un navigateur.

Mise à jour de la version de Pandoc

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 .

67
Jeromy Anglim

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).

22
daroczig

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:

  1. Ajouter une table des matières 
  2. Changer les options de figure
  3. Changer le style de mise en évidence de la syntaxe
  4. Ajouter des options LaTeX
  5. Et beaucoup plus... 

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

13
Jot eN

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.

10
Jeromy Anglim

Seulement deux étapes:

  1. Installez la dernière version "pandoc" à partir d'ici:

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

  2. 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".

9
Wei

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))
        }
    }
}
3
Frank Jung

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.

0
Ankit Kamboj

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!

0
Mariah Akinbi