【问题标题】:Using a custom template for Rmd pdf without changing current setup在不更改当前设置的情况下为 Rmd pdf 使用自定义模板
【发布时间】:2018-10-18 14:52:26
【问题描述】:

我最近了解到为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
[...]

问题

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

信息

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

【问题讨论】:

  • 注意:现在加载的几何包只是我添加模板时对我当前的事情顺序的一个(很容易重现的)例子。
  • 你有机会看到这个吗? tex.stackexchange.com/questions/139139/…
  • @Naveen 谢谢,但我看不到连接。我想添加一个完全不影响当前设置的模板 - 因为我已经非常想构建我的报告了。

标签: r r-markdown knitr pandoc


【解决方案1】:

由于您已经从 R 驱动它,您不妨使用由 rticles 包设置的(优秀)示例,它为(学术)论文提供了大量的 LaTeX 自定义。

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

  • tint 用于现代“类似 Tufte”的文章
  • pinp 非常漂亮的两栏 pdf 小插图
  • link 用于 LaTeX 字母和一些额外的
  • binb 用于 beaner 包的变体

这可以让你

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

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

【讨论】:

  • 我想如果我有一个我正在遵循的预定义样式,这非常很有用。但我正在发展自己的风格。当前设置确实允许我设置自定义template.tex,但是当我添加template: template.tex(不限于几何包)时,与之前的设置相比有一些变化。
  • 是的,然后您可以将它们包装在您的包中以供您的项目使用。去过那里,做到了....
  • 没有得到我希望通过赏金获得的新答案,所以我将把奖金留给投票最多的答案。
【解决方案2】:

当使用default 模板时,rmarkdown::pdf_output 函数似乎做了一些不同的事情。例如,它设置变量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.

有了这个你可以从in_header.tex中删除\geometry{...}

【讨论】:

  • 我希望它不会做一些不同的事情。我想知道是否有一个列表说明它的不同之处。
  • @snoram 我不知道这样的名单。我使用了函数的源代码,并比较了使用和不使用自定义模板生成的 .tex 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2020-06-09
  • 2019-11-11
相关资源
最近更新 更多