使用pandoc从Markdown转换为PDF时设置边距大小

时间:2012-11-22 15:31:32

标签: r latex markdown knitr pandoc

我在RStudio中创建了一个RMarkdown文件,并设法用knitr将其编织成HTML和.md文件。接下来,我使用pandoc将.md文件转换为PDF文件(如果我尝试从.html文件转换,我会收到错误)。但是,生成的PDF具有大量边距(如http://johnmacfarlane.net/pandoc/demo/example13.pdf)。如何让pandoc生成边距较小的东西?我查看了pandoc用户指南,但没有找到任何有用的东西。

3 个答案:

答案 0 :(得分:189)

最新版本的rmarkdown和pandoc

rmarkdown 的更新版本中,边距设置可以通过顶级元素geometry在YAML标头中完成。您在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使用它,方法是将LaTeX标头应用于转换的md文件。

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


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

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

答案 1 :(得分:93)

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

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

body text of document

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

答案 2 :(得分:0)

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中的设置就起作用了。