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


178

我已经在RStudio中创建了一个RMarkdown文件,并设法使用knitr将其编织为HTML和.md文件。接下来,我使用pandoc将.md文件转换为PDF文件(如果尝试从.html文件转换,则会出现错误)。但是,生成的PDF的边距很大(例如http://johnmacfarlane.net/pandoc/demo/example13.pdf)。如何让Pandoc生产出利润更小的产品?我浏览了Pandoc用户指南,但没有发现任何有用的信息。

Answers:


239

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使用此方法。

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

33
如果您使用的是最新版本的Pandoc,则也可以使用variable命令进行设置,而不必从头开始制作模板或对默认模板中的边距进行硬编码。例如,对于1英寸的页边距,可以使用pandoc -V geometry:margin=1in -o output.pdf input.md
2012年

@mrdwab那正是我所需要的。非常感谢。想要将其发布为答案,以便我接受吗?
mchangun 2012年

8
@mchangun,我编辑了加文(Gavin)的答案以包含我的评论,因为它是一个有效的建议,对于希望使用默认Pandoc模板中未包含的其他自定义LaTeX软件包的用户而言可能很有用。
2012年

1
Pandoc的新手。我发现该-V geometry:margin=1in选项没有效果。通过谷歌搜索,我发现某个地方的文档(对不起,链接丢失了)说该选项如果使用默认模板无效。我只想将一页markdown文件转换为PDF,然后以传单形式发送给某人。我的快速解决方案:直接编辑模板文件并添加\usepackage[margin=1.0in]{geometry}。在我的安装文件中,该文件位于:/usr/share/pandoc-1.9.1.1/templates
Steve Koch

有没有一种方法可以从命令行影响仅一个边距?我的整本书底部都有一个巨大的空白,我只想影响这个余量。-V geometry:margin:bottom似乎不起作用。
奥斯汀·弗朗德

104

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

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

body text of document

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


这是一个更好的解决方案!当您像Kile或那样在编辑器中自动构建文档时Sublime Text 2/3,更改命令行参数会很麻烦,这非常有用。
Abhinav
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.