Установить размер поля при конвертации из Markdown в PDF с помощью pandoc

179

Я создал файл RMarkdown в RStudio и сумел связать его с knitr в файл HTML и .md. Затем я использовал pandoc для преобразования файла .md в файл PDF (я получаю сообщение об ошибке, если пытаюсь выполнить преобразование из файла .html). Однако создаваемый PDF-файл имеет огромные поля (например, http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Как я могу заставить pandoc производить что-то с меньшими наценками? Я просмотрел руководство пользователя pandoc, но не нашел ничего полезного.

mchangun
источник

Ответы:

241

Последние версии rmarkdown и pandoc

В более поздних версиях rmarkdown настройки полей могут быть выполнены в заголовке YAML через элемент верхнего уровня geometry. То, что вы указываете в geometryтеге, будет передано в шаблон LaTeX, который поставляется с Pandoc через следующий фрагмент LaTeX

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

Например, чтобы указать поля шириной 2 см, можно добавить

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

Для более сложных спецификаций, передаваемых в пакет геометрии LaTeX, объедините параметры в строку, как если бы вы использовали LaTeX:

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

Оригинальный ответ

Это вопрос LaTeX, поскольку Pandoc выполняет рендеринг в PDF через LaTeX - то, на что вы ссылаетесь, представляет поля по умолчанию для документа LaTeX.

Геометрия Латекс пакет, например , может быть использован для изменения полех страниц. Однако вам понадобится указать Pandoc, чтобы он использовал это, включив в него заголовок LaTeX, примененный к преобразованному файлу md.

Как это сделать, описано в Руководстве пользователя Pandoc . Смотрите, в частности, --template=FILEаргумент командной строки и раздел Шаблоны . По сути, либо найдите и измените шаблон по умолчанию, включив в него инструкции LaTeX, которые вы хотите использовать, либо запустите свой собственный шаблон с нуля и разместите его в соответствующем месте; см. --data-dirаргумент командной строки.


Другой альтернативой, если вы используете последнюю версию Pandoc, является использование аргумента переменной (устанавливается с помощью -V KEY[=VAL]или --variable=KEY[:VAL]). geometryПакет был добавлен в шаблон LaTeX по умолчанию в мае 2012 года (см этого обсуждения ). Таким образом, если вы хотите изменить поля страницы, вы можете использовать:

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

Вы также можете указать несколько значений переменных. Например, если вы хотите создать PDF-файл 4 на 6 дюймов с полудюймовыми полями, вы можете использовать:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Гэвин Симпсон
источник
34
Если вы используете последнюю версию Pandoc, вы также можете установить ее с помощью variableкоманды, вместо того чтобы создавать шаблон с нуля или жестко кодировать поля в шаблоне по умолчанию. Например, для полей в 1 дюйм вы можете использовать pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@ mrdwab Это именно то, что мне нужно. Большое спасибо. Хотите опубликовать это как ответ, чтобы я мог принять его?
Мчангун
8
@mchangun, я отредактировал ответ Гэвина, включив в него мой комментарий, поскольку он является действительным и может быть полезен для пользователей, которые хотят использовать другие пользовательские пакеты LaTeX, не включенные в стандартные шаблоны Pandoc.
A5C1D2H2I1M1N2O1R2T1
1
Очень новый для Пандока. Я обнаружил, что этот -V geometry:margin=1inвариант не имеет никакого эффекта. Через поиск в Google я нашел где-то (извините, потерял ссылку) документацию, в которой говорится, что эта опция не действует, если используется шаблон по умолчанию. Я просто хочу преобразовать одностраничный файл уценки в PDF, чтобы отправить кому-то в качестве листовки. Мое быстрое решение: отредактируйте файл шаблона напрямую и добавьте строку \usepackage[margin=1.0in]{geometry}. На моей установке файл находится в:/usr/share/pandoc-1.9.1.1/templates
Стив Кох
Есть ли способ из командной строки повлиять только на один из полей? У всей моей книги гигантский пробел внизу, и я просто хочу повлиять на это поле. -V геометрия: поле: дно, кажется, не работает.
Остин Фатери
105

В более поздних версиях pandoc вы можете установить ряд параметров в заголовке YAML . Вы можете установить геометрию здесь, например:

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

body text of document

Когда Pandoc преобразует его в PDF, он должен иметь правильные поля.

naught101
источник
Это гораздо лучшее решение! Это очень полезно, когда вы автоматически создаете документ в редакторе, подобном Kileили, Sublime Text 2/3и изменение аргументов командной строки будет проблемой.
Абхинав