在不更改当前设置的情况下为Rmd pdf使用自定义模板

时间:2018-10-18 14:52:27

标签: r r-markdown knitr pandoc

我最近了解到,为Rmd PDF报告gives access to some neat customisation修改默认(Pandoc?)模板。

因此,为了修改默认模板,我首先使用以下命令将其移动到工作目录中:

file.copy(system.file("rmd/latex/default-1.17.0.2.tex", package ="rmarkdown"), "template.tex")

接下来,我键入我的Rmd文件:

---
output:
  pdf_document:
    template: template.tex
    keep_tex: true
    latex_engine: xelatex
    includes:
      in_header: in_header.tex
    number_sections: true
---

This is a rmd kind of document.

in_header.tex仅包含一行

\geometry{a4paper, top=38mm, left=45mm, right=45mm}

我首先只想按原样使用模板运行Rmd文件(希望没有更改),但是如果且仅当我包括模板时,报表无法编译-否则,运行没有问题。

错误是

! Undefined control sequence.
l.58 \geometry
[...]

问题

如何使用template参数在工作文件夹中的可编辑模板上构建,而不会对当前设置进行任何其他更改。

信息

> R.Version()[["version.string"]]
[1] "R version 3.5.1 (2018-07-02)"
> packageVersion("rmarkdown")
[1] ‘1.10’
> packageVersion("knitr")
[1] ‘1.20’

2 个答案:

答案 0 :(得分:7)

由于您已经从R中获得了成功,因此您也可以使用rticles软件包设置的(优秀)示例,该软件包为(学术)论文提供了大量的LaTeX自定义。

然后您就可以运行它们了。例如,在过去两年中,我添加了以下软件包:

  • tint进行现代的“类似Tufte”书写
  • pinp获得非常好的两列pdf插图
  • link用于LaTeX字母和其他一些
  • binb用于beaner软件包的变体

这允许您

  • 设置自定义template.tex
  • 包括所需的任何LaTeX类文件/样式文件
  • 以编程方式设置选项

我发现这比复制我以前做过的节(例如幻灯片)更好。

答案 1 :(得分:4)

使用rmarkdown::pdf_output模板时,default函数的功能似乎有所不同。例如,它设置变量graphics=yes。我怀疑它也设置了geometry,但是我还没有看到它在哪里设置。无论如何,如果您要使用基于默认模板的自定义模板,那么您将与模板中的该块“打架”:

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

仅在定义几何头时才装入geometry包。一种简单的解决方案是将几何图形定义从标头包含移动到YAML标头:

---
geometry:
  - a4paper
  - top=38mm
  - left=45mm
  - right=45mm
output:
  pdf_document:
    template: template.tex
    keep_tex: true
    latex_engine: xelatex
    includes:
      in_header: in_header.tex
    number_sections: true
---

This is a rmd kind of document.

您可以从\geometry{...}中删除in_header.tex