Ustaw rozmiar marginesu podczas konwersji z Markdown do PDF za pomocą pandoc

179

Utworzyłem plik RMarkdown w RStudio i udało mi się go połączyć za pomocą knitr w plik HTML i .md. Następnie użyłem pandoc do konwersji pliku .md do pliku PDF (pojawia się błąd, gdy próbuję konwertować z pliku .html). Jednak utworzony plik PDF ma ogromne marginesy (na przykład http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Jak sprawić, by pandoc wyprodukował coś z mniejszymi marżami? Przejrzałem podręcznik użytkownika pandoc, ale nie znalazłem nic przydatnego.

mchangun
źródło

Odpowiedzi:

241

Najnowsze wersje rmarkdown i pandoc

W nowszych wersjach rmarkdown ustawienia marginesów można wykonać w nagłówku YAML za pośrednictwem elementu najwyższego poziomu geometry. To, co określisz w geometrytagu, zostanie przesłane do szablonu LaTeX, który jest dostarczany z Pandocem za pośrednictwem następującego fragmentu kodu LaTeX

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

Na przykład, aby określić marginesy o szerokości 2 cm, należy uwzględnić

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

Aby uzyskać bardziej złożone specyfikacje, które mają być przekazane do pakietu Geometry LaTeX, opcje łańcuchowe razem, tak jak w przypadku LaTeX:

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

Oryginalna odpowiedź

To jest pytanie LaTeX, ponieważ Pandoc renderuje do pliku PDF za pośrednictwem LaTeX - to, z czym łączysz się, reprezentuje domyślne marginesy w dokumencie LaTeX.

Na przykład pakiet geometry LaTeX może służyć do zmiany marginesów strony. Będziesz jednak potrzebował sposobu, aby powiedzieć Pandocowi, aby użył tego, włączając go do nagłówka LaTeX zastosowanego do przekonwertowanego pliku md.

Sposób, w jaki to robisz, jest udokumentowany w Podręczniku użytkownika Pandoc . Zobacz w szczególności --template=FILEargument wiersza poleceń i sekcję Szablony . Zasadniczo albo znajdź i zmodyfikuj domyślny szablon, aby zawierał instrukcje LaTeX, których chcesz użyć, lub uruchom własny szablon od zera i umieść go w odpowiedniej lokalizacji; zobacz --data-dirargument wiersza poleceń.


Inną alternatywą, jeśli używasz najnowszej wersji Pandoc, jest użycie argumentu zmiennej (ustawionego za pomocą -V KEY[=VAL]lub --variable=KEY[:VAL]). geometryPakiet został dodany do domyślnego szablonu LaTeX w maju 2012 roku (patrz tę dyskusję ). W związku z tym, jeśli chcesz zmienić marginesy strony, możesz użyć:

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

Możesz także określić wiele wartości zmiennych. Na przykład, jeśli chcesz utworzyć plik PDF o wymiarach 4 na 6 cali z półcalowymi marginesami, możesz użyć:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Gavin Simpson
źródło
33
Jeśli korzystasz z najnowszej wersji Pandoc, możesz to również ustawić za pomocą variablepolecenia, zamiast tworzyć szablon od podstaw lub zakodować marginesy w domyślnym szablonie. Na przykład w przypadku marginesów 1-calowych możesz użyć pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@mrdwab Właśnie tego potrzebuję. Wielkie dzięki. Chcesz opublikować to jako odpowiedź, abym mógł to zaakceptować?
mchangun
8
@mchangun, zredagowałem odpowiedź Gavina, dodając mój komentarz, ponieważ jest to poprawny komentarz, który może być przydatny dla użytkowników, którzy chcą używać innych niestandardowych pakietów LaTeX, które nie są zawarte w domyślnych szablonach Pandoc.
A5C1D2H2I1M1N2O1R2T1
1
Bardzo nowy w pandoc. Przekonałem się, że ta -V geometry:margin=1inopcja nie daje żadnego efektu. Poprzez googlowanie znalazłem gdzieś (przepraszam, zgubiłem link) dokumentację mówiącą, że ta opcja nie ma wpływu, jeśli używam domyślnego szablonu. Chcę tylko przekonwertować jednostronicowy plik przeceny na plik PDF, aby wysłać go komuś jako ulotkę. Moje szybkie rozwiązanie: Edytuj plik szablonu bezpośrednio i dodaj wiersz \usepackage[margin=1.0in]{geometry}. Podczas mojej instalacji plik znajduje się w:/usr/share/pandoc-1.9.1.1/templates
Steve Koch
Czy jest sposób, aby z wiersza poleceń wpłynąć tylko na jeden z marginesów? Cała moja książka ma ogromną lukę na dole i chcę tylko wpłynąć na ten margines. -V geometria: margines: dół nie działa.
Austin Fatheree
105

W nowszych wersjach pandoc możesz ustawić szereg parametrów w nagłówku YAML . Możesz tutaj ustawić geometrię, na przykład:

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

body text of document

Kiedy pandoc konwertuje go do formatu PDF, powinien mieć prawidłowe marginesy.

naught101
źródło
To znacznie lepsze rozwiązanie! Jest to bardzo przydatne, gdy automatycznie budujesz dokument w edytorze, takim jak Kilelub, Sublime Text 2/3a zmiana argumentów wiersza poleceń byłaby uciążliwa.
Abhinav,