Définir la taille de la marge lors de la conversion de Markdown en PDF avec Pandoc

179

J'ai créé un fichier RMarkdown dans RStudio et j'ai réussi à le tricoter avec knitr dans un fichier HTML et .md. Ensuite, j'ai utilisé pandoc pour convertir le fichier .md en fichier PDF (j'obtiens une erreur si j'essaie de convertir à partir du fichier .html). Cependant, le PDF produit a des marges massives (comme ceci http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Comment puis-je amener Pandoc à produire quelque chose avec des marges plus petites? J'ai parcouru le guide de l'utilisateur de pandoc, mais je n'ai rien trouvé d'utile.

mchangun
la source

Réponses:

241

Versions récentes de rmarkdown et pandoc

Dans les versions plus récentes de rmarkdown , les réglages des marges peuvent être effectués dans l'en-tête YAML via l'élément de niveau supérieur geometry. Ce que vous spécifiez dans la geometrybalise sera redirigé vers le modèle LaTeX fourni avec Pandoc via l'extrait de code LaTeX suivant

$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$

Par exemple, pour spécifier des marges de 2 cm de largeur, il faudrait inclure

---
title: "Habits"
author: John Doe
date: March 22, 2005
geometry: margin=2cm
output: pdf_document
---

Pour des spécifications plus complexes à transmettre au package geometry LaTeX, enchaînez les options comme vous le feriez avec LaTeX:

---
title: "Habits"
author: John Doe
date: March 22, 2005
geometry: "left=3cm,right=3cm,top=2cm,bottom=2cm"
output: pdf_document
---

Réponse originale

C'est une question LaTeX car Pandoc est rendu au format PDF via LaTeX - ce que vous avez lié représente les marges par défaut sur un document LaTeX.

Le package geometry LaTeX par exemple peut être utilisé pour modifier les marges de la page. Cependant, vous aurez besoin d'un moyen d'indiquer à Pandoc de l'utiliser en l'incluant dans l'en-tête LaTeX appliqué au fichier md converti.

La procédure à suivre est documentée dans le Guide de l'utilisateur Pandoc . Voir en particulier l' --template=FILEargument de ligne de commande et la section Modèles . Essentiellement, recherchez et modifiez le modèle par défaut pour inclure les instructions LaTeX que vous souhaitez utiliser ou démarrez votre propre modèle à partir de zéro et placez-le à l'emplacement approprié; voir l' --data-dirargument de ligne de commande.


Une autre alternative si vous utilisez une version récente de Pandoc est d'utiliser l'argument variable (défini avec -V KEY[=VAL]ou --variable=KEY[:VAL]). Le geometrypackage a été ajouté au modèle LaTeX par défaut en mai 2012 (voir cette discussion ). En tant que tel, si vous souhaitez modifier les marges de la page, vous pouvez utiliser:

pandoc -V geometry:margin=1in -o output.pdf input.md

Vous pouvez également spécifier plusieurs valeurs de variable. Par exemple, si vous souhaitez créer un pdf de 4 sur 6 pouces avec des marges d'un demi-pouce, vous pouvez utiliser:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Gavin Simpson
la source
34
Si vous utilisez la dernière version de Pandoc, vous pouvez également définir cela à l'aide de la variablecommande au lieu d'avoir à créer un modèle à partir de zéro ou à coder en dur les marges dans le modèle par défaut. Par exemple, pour les marges de 1 pouce, vous pouvez utiliser pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@mrdwab C'est exactement ce dont j'ai besoin. Merci beaucoup. Voulez-vous poster cela comme réponse afin que je puisse l'accepter?
mchangun
8
@mchangun, j'ai édité la réponse de Gavin pour inclure mon commentaire car il s'agit d'un commentaire valide qui pourrait être utile pour les utilisateurs qui souhaitent utiliser d'autres packages LaTeX personnalisés non inclus dans les modèles Pandoc par défaut.
A5C1D2H2I1M1N2O1R2T1
1
Très nouveau sur pandoc. Je trouvais que l' -V geometry:margin=1inoption n'avait aucun effet. Via googler, j'ai trouvé quelque part (désolé j'ai perdu le lien) de la documentation disant que cette option n'a aucun effet si vous utilisez le modèle par défaut. Je veux juste convertir un fichier de démarquage d'une page en PDF pour l'envoyer à quelqu'un sous forme de dépliant. Ma solution rapide: éditez directement le fichier modèle et ajoutez la ligne \usepackage[margin=1.0in]{geometry}. Sur mon installation, le fichier est dans:/usr/share/pandoc-1.9.1.1/templates
Steve Koch
Existe-t-il un moyen, à partir de la ligne de commande, d'affecter une seule des marges? Mon livre entier a un énorme écart en bas et je veux juste affecter cette marge. -V geometry: margin: bottom ne semble pas fonctionner.
Austin Fatheree
105

Dans les versions plus récentes de pandoc, vous pouvez définir un certain nombre de paramètres dans l'en- tête YAML . Vous pouvez définir la géométrie ici, par exemple:

---
title:  Pandoc nice margins example
author: naught101
geometry: margin=3cm
---

body text of document

Lorsque pandoc le convertit en pdf, les marges doivent être correctes.

rien101
la source
C'est une bien meilleure solution! C'est très utile lorsque vous construisez automatiquement le document dans un éditeur comme Kileou Sublime Text 2/3et que changer les arguments de la ligne de commande serait pénible.
Abhinav