224

我在 RStudio 中创建了一个 RMarkdown 文件,并设法用 knitr 将它编织成一个 HTML 和 .md 文件。接下来,我使用 pandoc 将 .md 文件转换为 PDF 文件(如果我尝试从 .html 文件进行转换,则会收到错误消息)。但是,生成的 PDF 有很大的边距(如http://johnmacfarlane.net/pandoc/demo/example13.pdf)。我怎样才能让 pandoc 生产利润较小的东西?我浏览了 pandoc 用户指南,但没有发现任何有用的东西。

4

3 回答 3

318

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 通过 LaTeX 呈现为 PDF - 您链接到的内容代表 LaTeX 文档的默认边距。

例如,几何LaTeX 包可用于更改页面的边距。但是,您需要一种方法来告诉 Pandoc 使用它,方法是将其包含在应用于转换后的 md 文件的 LaTeX 标头中。

Pandoc 用户指南中记录了如何执行此操作。请特别参阅--template=FILE命令行参数和模板部分。本质上,要么找到并修改默认模板以包含您要使用的 LaTeX 指令,要么从头开始创建自己的模板并将其放置在适当的位置;请参阅--data-dir命令行参数。


如果您使用的是最新版本的 Pandoc,另一种选择是使用变量参数(使用-V KEY[=VAL]或设置--variable=KEY[:VAL])。该geometry包于 2012 年 5 月添加到默认的 LaTeX 模板中(请参阅此讨论)。因此,如果您想更改页边距,您可以使用:

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

您也可以指定多个变量值。例如,如果您想创建一个 4 x 6 英寸、边距为半英寸的 pdf,您可以使用:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
于 2012-11-22T15:40:51.943 回答
113

在更新版本的 pandoc 中,您可以在YAML 标头中设置许多参数。您可以在此处设置几何图形,例如:

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

body text of document

当 pandoc 将其转换为 pdf 时,它应该具有正确的边距。

于 2014-10-15T00:14:05.910 回答
2

FTR:上面的“最新版本”似乎包括 Knitr 1.30,在我需要以下标题之前:

---
  pdf_document: null
  geometry: margin=1cm
  output: pdf_document
---

没有额外pdf_document: null的几何设置没有效果。有了它,来自https://bookdown.org/yihui/rmarkdown-cookbook/latex-variables.html的设置就起作用了。

于 2020-11-26T09:46:50.783 回答