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

261

我在RStudio里创建了一个RMarkdown文件,并使用knitr将其编织成HTML和.md文件。接着,我使用pandoc将.md文件转换为PDF文件(如果我尝试从.html文件转换会出现错误)。但是生成的PDF文件有巨大的边距(类似于这个)。我该如何让pandoc生成带有更小边距的内容?我已经浏览了pandoc用户指南,但没有找到任何有用的信息。

3个回答

365

最新版本的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
---

如果需要将更复杂的规格传递给 geometry 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软件包geometry来改变页面的边距。但是您需要一种方法告诉Pandoc在转换的md文件中应用它,这可以通过在其中包含LaTeX标头来实现。
如何实现这一点已在Pandoc用户指南中有所说明。请特别注意--template=FILE命令行参数和Templates section。基本上,您可以找到并修改默认模板以包含要使用的LaTeX指令,或者从头开始创建自己的模板并将其放置在适当的位置; 可以查看--data-dir命令行参数。
如果您正在使用最新版本的Pandoc,另一种选择是使用可变参数(使用-V KEY[=VAL]--variable=KEY[:VAL]设置)。`geometry`包已添加到默认的LaTeX模板中,发布于2012年5月(请参见此讨论)。因此,如果您想更改页面边距,可以使用以下命令:
pandoc -V geometry:margin=1in -o output.pdf input.md

你也可以指定多个变量值。例如,如果您想要创建一个4乘6英寸的PDF文件,并带有半英寸的页边距,您可以使用以下代码:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md

47
如果你正在使用最新版本的 Pandoc,你也可以使用 variable 命令来设置页面边距,而不必从头开始制作模板或在默认模板中硬编码边距。例如,要设置 1 英寸的边距,可以使用 pandoc -V geometry:margin=1in -o output.pdf input.md - A5C1D2H2I1M1N2O1R2T1
10
@mchangun,我已编辑了Gavin的答案,包括了我的评论,因为这是一个有效的评论,可能对想要使用默认Pandoc模板未包含的其他自定义LaTeX包的用户有用。 - A5C1D2H2I1M1N2O1R2T1
2
对 pandoc 十分陌生。我发现使用 -V geometry:margin=1in 选项没有效果。在通过谷歌搜索时,我找到了某个(抱歉,我丢失了链接)文档,说明如果使用默认模板,则此选项无效。我只想将一个一页的 markdown 文件转换为 PDF 以便向某人发送宣传单。我的快速解决方案:直接编辑模板文件并添加行 \usepackage[margin=1.0in]{geometry}。在我的安装中,该文件位于 /usr/share/pandoc-1.9.1.1/templates - Steve Koch
1
当使用 --pdf-engine=wkhtmltopdf 时,似乎不适用于 pandoc 2.9.2.1 - twitu
1
这是对我最终起作用的解决方案,https://dev59.com/O6Tja4cB1Zd3GeqPI-Qw#54584490 - twitu
显示剩余6条评论

121

在更新版本的 Pandoc 中,你可以在YAML 头部中设置一些参数。你可以在这里设置页面布局,例如:

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

body text of document

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


这是一个更好的解决方案!当您在像KileSublime Text 2/3这样的编辑器中自动构建文档并且更改命令行参数会很麻烦时,它非常有用。 - Abhinav

3

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 的设置可以生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接