251 votes

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

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

351voto

Gavin Simpson Points 72349

Dernières versions 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 balise geometry sera injecté dans le modèle LaTeX fourni avec Pandoc via l'extrait LaTeX suivant

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

Par exemple, pour spécifier des marges de 2 cm de largeur, on inclurait

---
title: "Habitudes"
author: John Doe
date: 22 mars 2005
geometry: margin=2cm
output: document pdf
---

Pour des spécifications plus complexes à transmettre au package geometry LaTeX, attachez des options de chaîne ensemble comme vous le feriez avec LaTeX:

---
title: "Habitudes"
author: John Doe
date: 22 mars 2005
geometry: "left=3cm,right=3cm,top=2cm,bottom=2cm"
output: document pdf
---

Réponse originale

Il s'agit d'une question LaTeX car Pandoc génère un PDF via LaTeX - ce que vous avez lié représente les marges par défaut sur un document LaTeX.

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

La manière de faire cela est documentée dans le Guide de l'utilisateur de Pandoc. Consultez en particulier l'argument en ligne de commande --template=FILE et la section modèles. Essentiellement, soit trouvez et modifiez le modèle par défaut pour inclure les instructions LaTeX que vous souhaitez utiliser, soit commencez votre propre modèle à partir de zéro et placez-le à l'endroit approprié; voir l'argument en ligne de commande --data-dir.


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 package geometry a été ajouté au modèle LaTeX par défaut en mai 2012 (voir cette discussion). Ainsi, si vous voulez changer 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 variables. Par exemple, si vous voulez créer un pdf de 4 par 6 pouces avec des marges de demi-pouce, vous pouvez utiliser :

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md

46 votes

Si vous utilisez la dernière version de Pandoc, vous pouvez également le configurer en utilisant la commande variable au lieu de devoir créer un modèle à partir de zéro ou coder les marges dans le modèle par défaut. Par exemple, pour des marges de 1 pouce, vous pouvez utiliser pandoc -V geometry:margin=1in -o output.pdf input.md.

0 votes

@mrdwab C'est exactement ce dont j'ai besoin. Merci beaucoup. Vous voulez le poster en tant que réponse pour que je puisse l'accepter?

9 votes

@mchangun, J'ai édité la réponse de Gavin pour inclure mon commentaire car il est valable et pourrait être utile pour les utilisateurs qui veulent utiliser d'autres packages LaTeX personnalisés non inclus dans les modèles par défaut de Pandoc.

120voto

naught101 Points 2023

Dans les versions les 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:  Exemple de beaux marges Pandoc
author: naught101
geometry: margin=3cm
---

texte du corps du document

Lorsque pandoc le convertit en pdf, il doit avoir les marges correctes.

0 votes

Il s'agit d'une solution bien meilleure! C'est assez utile lorsque vous construisez automatiquement le document dans un éditeur comme Kile ou Sublime Text 2/3 et modifier les arguments de la ligne de commande serait pénible.

2voto

Jaleks Points 330

FTR : "la version récente" ci-dessus semble inclure Knitr 1.30, avant j'avais besoin de l'en-tête suivant :

---
  pdf_document: null
  geometry: margin=1cm
  output: pdf_document
---

Sans l'ajout de pdf_document: null, le paramètre de géométrie n'avait aucun effet. Avec cela, les paramètres de https://bookdown.org/yihui/rmarkdown-cookbook/latex-variables.html ont fonctionné.

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