Stellen Sie die Randgröße ein, wenn Sie mit Pandoc von Markdown nach PDF konvertieren

178

Ich habe eine RMarkdown-Datei in RStudio erstellt und es geschafft, sie mit knitr in eine HTML- und .md-Datei zu stricken. Als nächstes habe ich pandoc verwendet, um die .md-Datei in eine PDF-Datei zu konvertieren (ich erhalte eine Fehlermeldung, wenn ich versuche, aus der .html-Datei zu konvertieren). Das erstellte PDF hat jedoch massive Ränder (wie dieses http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Wie kann ich Pandoc dazu bringen, etwas mit kleineren Rändern zu produzieren? Ich habe die Pandoc-Bedienungsanleitung durchgesehen, aber nichts Nützliches gefunden.

mchangun
quelle

Antworten:

239

Aktuelle Versionen von rmarkdown und pandoc

In neueren Versionen von rmarkdown können die Einstellungen der Ränder im YAML-Header über das Element der obersten Ebene vorgenommen werden geometry. Was Sie im geometryTag angeben, wird über das folgende LaTeX-Snippet in die mit Pandoc gelieferte LaTeX-Vorlage weitergeleitet

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

Um beispielsweise Ränder mit einer Breite von 2 cm anzugeben, würde man Folgendes einschließen

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

Damit komplexere Spezifikationen an das Geometrie- LaTeX-Paket übergeben werden können, müssen Sie die Zeichenfolgenoptionen wie bei LaTeX miteinander verbinden:

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

Ursprüngliche Antwort

Dies ist eine LaTeX-Frage, da Pandoc über LaTeX in PDF gerendert wird. Was Sie verlinkt haben, repräsentiert die Standardränder in einem LaTeX-Dokument.

Mit dem Geometrie- LaTeX-Paket können beispielsweise die Seitenränder geändert werden. Sie müssen Pandoc jedoch anweisen, dies zu verwenden, indem Sie es in den LaTeX-Header aufnehmen, der auf die konvertierte MD-Datei angewendet wird.

Wie Sie dies tun, ist im Pandoc-Benutzerhandbuch dokumentiert . Siehe insbesondere das --template=FILEBefehlszeilenargument und den Abschnitt Vorlagen . Suchen und ändern Sie im Wesentlichen entweder die Standardvorlage, um die gewünschten LaTeX-Anweisungen einzuschließen, oder starten Sie Ihre eigene Vorlage von Grund auf neu und platzieren Sie sie an der entsprechenden Stelle. Siehe das --data-dirBefehlszeilenargument.


Eine andere Alternative, wenn Sie eine neuere Version von Pandoc verwenden, ist die Verwendung des Variablenarguments (entweder mit -V KEY[=VAL]oder festgelegt --variable=KEY[:VAL]). Das geometryPaket wurde im Mai 2012 zur Standard-LaTeX-Vorlage hinzugefügt (siehe diese Diskussion ). Wenn Sie die Seitenränder ändern möchten, können Sie Folgendes verwenden:

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

Sie können auch mehrere Variablenwerte angeben. Wenn Sie beispielsweise ein 4 x 6 Zoll großes PDF mit einem halben Zoll Rand erstellen möchten, können Sie Folgendes verwenden:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Gavin Simpson
quelle
33
Wenn Sie die neueste Version von Pandoc verwenden, können Sie dies auch mit dem variableBefehl festlegen, anstatt eine Vorlage von Grund auf neu erstellen oder die Ränder in der Standardvorlage fest codieren zu müssen. Beispielsweise können Sie für 1-Zoll-Ränder verwenden pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@mrdwab Genau das brauche ich. Vielen Dank. Möchten Sie das als Antwort posten, damit ich es akzeptieren kann?
Mchangun
8
@mchangun, ich habe Gavins Antwort so bearbeitet, dass sie meinen Kommentar enthält, da es sich um eine gültige Antwort handelt, die für Benutzer nützlich sein kann, die andere benutzerdefinierte LaTeX-Pakete verwenden möchten, die nicht in den Standard-Pandoc-Vorlagen enthalten sind.
A5C1D2H2I1M1N2O1R2T1
1
Sehr neu bei Pandoc. Ich stellte fest, dass die -V geometry:margin=1inOption keine Wirkung hatte. Durch Googeln habe ich irgendwo (leider den Link verloren) eine Dokumentation gefunden, die besagt, dass diese Option keine Auswirkung hat, wenn die Standardvorlage verwendet wird. Ich möchte nur eine einseitige Markdown-Datei in eine PDF-Datei konvertieren, um sie als Flyer an jemanden zu senden. Meine schnelle Lösung: Bearbeiten Sie die Vorlagendatei direkt und fügen Sie die Zeile hinzu \usepackage[margin=1.0in]{geometry}. Bei meiner Installation befindet sich die Datei in:/usr/share/pandoc-1.9.1.1/templates
Steve Koch
Gibt es eine Möglichkeit, über die Befehlszeile nur einen der Ränder zu beeinflussen? Mein gesamtes Buch hat unten eine riesige Lücke und ich möchte nur diesen Rand beeinflussen. -V Geometrie: Rand: Boden scheint nicht zu funktionieren.
Austin Fatheree
104

In neueren Versionen von pandoc können Sie eine Reihe von Parametern im YAML-Header festlegen . Hier können Sie die Geometrie einstellen, zum Beispiel:

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

body text of document

Wenn Pandoc es in ein PDF konvertiert, sollte es korrekte Ränder haben.

naught101
quelle
Dies ist eine viel bessere Lösung! Dies ist sehr nützlich, wenn Sie das Dokument automatisch in einem Editor wie Kileoder Sublime Text 2/3erstellen und das Ändern von Befehlszeilenargumenten schmerzhaft wäre.
Abhinav