使用Rmd pdf的自定义模板而不更改当前设置

sin*_*dur 8 r pandoc knitr r-markdown

我最近了解到,修改Rmdpdf报告的默认(Pandoc?)模板可以访问一些简洁的自定义.

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

file.copy(system.file("rmd/latex/default-1.17.0.2.tex", package ="rmarkdown"), "template.tex")
Run Code Online (Sandbox Code Playgroud)

接下来我输入我的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.
Run Code Online (Sandbox Code Playgroud)

其中in_header.tex只包含一行

\geometry{a4paper, top=38mm, left=45mm, right=45mm}
Run Code Online (Sandbox Code Playgroud)

我首先只是希望Rmd使用模板运行该文件(期望没有更改)但是当且仅当我包含模板时报告无法编译- 否则它运行没有问题.

错误是

! Undefined control sequence.
l.58 \geometry
[...]
Run Code Online (Sandbox Code Playgroud)

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

信息

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

Dir*_*tel 8

由于您已经从R驱动这个,您可以使用rticles包设置的(优秀)示例,该示例为(学术)论文提供大量的LaTeX自定义.

然后你可以运行它们.例如,在过去的两年里,我添加了这些包:

  • 现代'Tufte-alike'写作的色彩
  • pinp非常漂亮的两列pdf小插曲
  • 链接为LaTeX字母和一些额外的
  • binb for beaner packages的变种

这允许你

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

我发现这比我之前复制的节更好(例如幻灯片).


Ral*_*ner 5

使用模板rmarkdown::pdf_output时,该函数似乎做了一些不同的事情default。例如,它设置变量graphics=yes。我怀疑它也会设置geometry,但我还没有看到它在哪里这样做。无论如何,如果您想使用基于默认模板的自定义模板,您将与模板中的此块“战斗”:

$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

有了这个,您可以\geometry{...}in_header.tex.