Establezca el tamaño del margen al convertir de Markdown a PDF con pandoc

179

Creé un archivo RMarkdown en RStudio y logré tejerlo con knitr en un archivo HTML y .md. A continuación, utilicé pandoc para convertir el archivo .md en un archivo PDF (obtengo un error si intento convertir desde el archivo .html). Sin embargo, el PDF que se produce tiene márgenes masivos (como este http://johnmacfarlane.net/pandoc/demo/example13.pdf ). ¿Cómo puedo hacer que Pandoc produzca algo con márgenes más pequeños? He leído la guía del usuario de pandoc, pero no he encontrado nada útil.

mchangun
fuente

Respuestas:

241

Versiones recientes de rmarkdown y pandoc

En versiones más recientes de rmarkdown , la configuración de los márgenes se puede realizar en el encabezado YAML a través del elemento de nivel superior geometry. Lo que especifique en la geometryetiqueta se canalizará a la plantilla de LaTeX que se envía con Pandoc a través del siguiente fragmento de LaTeX

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

Por ejemplo, para especificar márgenes de 2 cm de ancho, uno incluiría

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

Para que se pasen especificaciones más complejas al paquete de geometría de LaTeX, combine las opciones de cadena como lo haría con LaTeX:

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

Respuesta original

Esta es una pregunta de LaTeX, ya que Pandoc está procesando en PDF a través de LaTeX: lo que vinculó representa los márgenes predeterminados en un documento de LaTeX.

El paquete de geometría LaTeX, por ejemplo, se puede utilizar para alterar los márgenes de la página. Sin embargo, necesitará una manera de decirle a Pandoc que use esto incluyéndolo en el encabezado LaTeX aplicado al archivo md convertido.

Cómo hacer esto está documentado en la Guía del usuario de Pandoc . Vea en particular el --template=FILEargumento de la línea de comando y la sección de Plantillas . Esencialmente, busque y modifique la plantilla predeterminada para incluir las instrucciones de LaTeX que desea usar o inicie su propia plantilla desde cero y colóquela en la ubicación adecuada; ver el --data-dirargumento de la línea de comando.


Otra alternativa si está utilizando una versión reciente de Pandoc es utilizar el argumento variable (establecido con -V KEY[=VAL]o --variable=KEY[:VAL]). El geometrypaquete se agregó a la plantilla predeterminada de LaTeX en mayo de 2012 (consulte esta discusión ). Como tal, si desea cambiar los márgenes de la página, puede usar:

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

También puede especificar múltiples valores de variables. Por ejemplo, si desea crear un pdf de 4 por 6 pulgadas con márgenes de media pulgada, puede usar:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Gavin Simpson
fuente
33
Si está utilizando la última versión de Pandoc, también puede configurarlo utilizando el variablecomando en lugar de tener que hacer una plantilla desde cero o codificar los márgenes en la plantilla predeterminada. Por ejemplo, para márgenes de 1 pulgada, puede usar pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@mrdwab Eso es exactamente lo que necesito. Muchas gracias. ¿Quieres publicar eso como respuesta para que pueda aceptarlo?
mchangun
8
@mchangun, he editado la respuesta de Gavin para incluir mi comentario, ya que es válida y podría ser útil para los usuarios que desean utilizar otros paquetes personalizados de LaTeX no incluidos en las plantillas predeterminadas de Pandoc.
A5C1D2H2I1M1N2O1R2T1
1
Muy nuevo para pandoc. Estaba descubriendo que la -V geometry:margin=1inopción no estaba teniendo efecto. A través de Google, encontré en algún lugar (perdón el enlace perdido) documentación que dice que esta opción no tiene ningún efecto si se usa la plantilla predeterminada. Solo quiero convertir un archivo de marcado de una página a un PDF para enviarlo a alguien como volante. Mi solución rápida: edite el archivo de plantilla directamente y agregue la línea \usepackage[margin=1.0in]{geometry}. En mi instalación, el archivo está en:/usr/share/pandoc-1.9.1.1/templates
Steve Koch
¿Hay alguna forma, desde la línea de comando, de afectar solo uno de los márgenes? Todo mi libro tiene una brecha gigante en la parte inferior y solo quiero afectar ese margen. -V geometría: margen: el fondo no parece funcionar.
Austin Fatheree
105

En versiones más recientes de pandoc, puede establecer una serie de parámetros en el encabezado YAML . Puede configurar la geometría aquí, por ejemplo:

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

body text of document

Cuando pandoc lo convierte a un pdf, debe tener márgenes correctos.

nada101
fuente
¡Esta es una solución mucho mejor! Es bastante útil cuando está creando automáticamente el documento en un editor como Kileo Sublime Text 2/3y cambiar los argumentos de la línea de comandos sería un dolor.
Abhinav