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

Posted

技术标签:

【中文标题】使用 pandoc 从 Markdown 转换为 PDF 时设置边距大小【英文标题】:Set margin size when converting from Markdown to PDF with pandoc 【发布时间】:2012-11-11 00:57:42 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

rmarkdown 和 pandoc 的最新版本

rmarkdown 的更新版本中,可以通过***元素 geometry 在 YAML 标头中设置边距。您在geometry 标签中指定的内容将通过以下 LaTeX sn-p 传递到 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 文档的默认边距。

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

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


如果您使用的是最新版本的 Pandoc,另一种选择是使用变量参数(使用 -V KEY[=VAL]--variable=KEY[:VAL] 设置)。 geometry 包已于 2012 年 5 月添加到默认 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

【讨论】:

如果您使用的是最新版本的 Pandoc,您也可以使用 variable 命令进行设置,而不必从头开始制作模板或在默认模板中硬编码边距。例如,对于 1 英寸的边距,您可以使用 pandoc -V geometry:margin=1in -o output.pdf input.md @mrdwab 这正是我所需要的。非常感谢。想要将其发布为答案以便我接受? @mchangun,我已经编辑了 Gavin 的答案以包含我的评论,因为它是一个有效的答案,可能对想要使用默认 Pandoc 模板中未包含的其他自定义 LaTeX 包的用户有用。 对 pandoc 非常陌生。我发现-V geometry:margin=1in 选项没有效果。通过谷歌搜索,我发现某处(抱歉丢失了链接)文档说如果使用默认模板,此选项无效。我只想将一页降价文件转换为 PDF 以作为传单发送给某人。我的快速解决方案:直接编辑模板文件并添加行\usepackage[margin=1.0in]geometry。在我的安装中,文件位于:/usr/share/pandoc-1.9.1.1/templates 有没有办法从命令行只影响一个边距?我整本书的底部有一个巨大的空白,我只想影响那个空白。 -V geometry:margin:bottom 似乎不起作用。【参考方案3】:

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

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

body text of document

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

【讨论】:

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

以上是关于使用 pandoc 从 Markdown 转换为 PDF 时设置边距大小的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandoc 进行文档转换(markdown转word)

从 Markdown 到 PDF:如何使用 Pandoc 更改字体大小?

使用knitr和pandoc转换为PDF时markdown中的图形位置

sh 使用Pandoc将RST转换为Markdown

windows使用Pandoc将Markdown转换为PDF文件

如何把 Markdown 文件转化为 PDF