使用pandoc从Markdown转换为PDF时设置空白大小

我已经在RStudio中创建了一个RMarkdown文件,并设法用knitr将其编织成HTML和.md文件。接下来,我使用pandoc将.md文件转换为PDF文件(如果我尝试从.html文件转换,我会得到一个错误)。然而,生成的PDF有大量的空白(就像这个http://johnmacfarlane.net/pandoc/demo/example13.pdf)。我怎样才能让pandoc生产利润率更低的产品呢?我已经浏览了pandoc用户指南,但没有发现任何有用的东西。

135630 次浏览

rmarkdown和pandoc的最新版本

在最近版本的rmarkdown中,页边距的设置可以通过顶层元素geometry在YAML头文件中完成。你在geometry标签中指定的内容将通过下面的LaTeX片段被导入到随Pandoc一起发布的LaTeX模板中

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

例如,如果要指定宽度为2cm的边距,则包含

---
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乘6英寸的pdf,边距为半英寸,你可以使用:

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

在最近的pandoc版本中,你可以在YAML头中设置一些参数。你可以在这里设置几何图形,例如:

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


body text of document

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

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中的设置可以工作。