Imposta la dimensione del margine durante la conversione da Markdown a PDF con pandoc


179

Ho creato un file RMarkdown in RStudio e sono riuscito a inserirlo con knitr in un file HTML e .md. Successivamente, ho usato pandoc per convertire il file .md in un file PDF (ricevo un errore se provo a convertire dal file .html). Tuttavia, il PDF prodotto ha margini enormi (come questo http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Come posso ottenere pandoc per produrre qualcosa con margini più piccoli? Ho consultato la guida per l'utente pandoc, ma non ho trovato nulla di utile.

Risposte:


241

Versioni recenti di rmarkdown e pandoc

Nelle versioni più recenti di rmarkdown , le impostazioni dei margini possono essere eseguite nell'intestazione YAML tramite l'elemento di livello superiore geometry. Ciò che specifichi nel geometrytag verrà reindirizzato nel modello LaTeX fornito con Pandoc tramite il seguente frammento LaTeX

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

Ad esempio, per specificare margini di 2 cm di larghezza si dovrebbe includere uno

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

Per le specifiche più complesse da passare al pacchetto LaTeX della geometria , le opzioni di stringa insieme come fareste con LaTeX:

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

Risposta originale

Questa è una domanda di LaTeX mentre Pandoc esegue il rendering in PDF tramite LaTeX: ciò a cui si è collegati rappresenta i margini predefiniti in un documento LaTeX.

Il pacchetto LaTeX della geometria , ad esempio, può essere utilizzato per modificare i margini della pagina. Tuttavia, avrai bisogno di un modo per dire a Pandoc di usarlo includendolo nell'intestazione LaTeX applicata al file md convertito.

Come si fa è documentato nella Guida per l'utente di Pandoc . Vedi in particolare l' --template=FILEargomento della riga di comando e la sezione Modelli . In sostanza, trova e modifica il modello predefinito per includere le istruzioni LaTeX che desideri utilizzare o avvia il tuo modello da zero e posizionalo nella posizione appropriata; vedere l' --data-dirargomento della riga di comando.


Un'altra alternativa se si utilizza una versione recente di Pandoc è utilizzare l'argomento variabile (impostato con -V KEY[=VAL]o--variable=KEY[:VAL] ). Il geometrypacchetto è stato aggiunto al modello LaTeX predefinito a maggio 2012 (vedere questa discussione ). Pertanto, se si desidera modificare i margini della pagina, è possibile utilizzare:

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

Puoi anche specificare più valori variabili. Ad esempio, se si desidera creare un pdf da 4 per 6 pollici con margini di mezzo pollice, è possibile utilizzare:

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

34
Se stai usando l'ultima versione di Pandoc, puoi anche impostarla usando il variablecomando invece di dover creare un modello da zero o codificare i margini nel modello predefinito. Ad esempio, per i margini di 1 pollice, è possibile utilizzare pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1

@mrdwab Questo è esattamente ciò di cui ho bisogno. Molte grazie. Vuoi pubblicarlo come risposta in modo che io possa accettarlo?
mchangun,

8
@mchangun, ho modificato la risposta di Gavin per includere il mio commento poiché è valido e potrebbe essere utile per gli utenti che desiderano utilizzare altri pacchetti LaTeX personalizzati non inclusi nei modelli Pandoc predefiniti.
A5C1D2H2I1M1N2O1R2T1

1
Nuovissimo da pandoc. Stavo scoprendo che l' -V geometry:margin=1inopzione non aveva alcun effetto. Tramite google, ho trovato da qualche parte (mi dispiace aver perso il collegamento) la documentazione che dice che questa opzione non ha alcun effetto se si utilizza il modello predefinito. Voglio solo convertire un file di markdown di una pagina in un PDF da inviare a qualcuno come volantino. La mia soluzione rapida: modifica direttamente il file modello e aggiungi la riga \usepackage[margin=1.0in]{geometry}. Sulla mia installazione, il file è in:/usr/share/pandoc-1.9.1.1/templates
Steve Koch,

C'è un modo, dalla riga di comando, di influenzare solo uno dei margini? Tutto il mio libro ha un divario enorme in fondo e voglio solo influenzare quel margine. -V geometria: margine: il fondo non sembra funzionare.
Austin Fatheree,

105

Nelle versioni più recenti di pandoc, è possibile impostare un numero di parametri nell'intestazione YAML . Qui puoi impostare la geometria, ad esempio:

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

body text of document

Quando pandoc lo converte in pdf, dovrebbe avere margini corretti.


Questa è una soluzione molto migliore! È abbastanza utile quando si crea automaticamente il documento in un editor come Kileo Sublime Text 2/3e modificare gli argomenti della riga di comando sarebbe una seccatura.
Abhinav,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.