在不更改当前设置的情况下使用 Rmd pdf 的自定义模板
Using a custom template for Rmd pdf without changing current setup
我最近了解到修改 Rmd
pdf 报告的默认 (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’
当使用 default
模板时,rmarkdown::pdf_output
函数似乎做了一些不同的事情。例如,它设置变量 graphics=yes
。我怀疑它也设置了 geometry
,但我没有看到它在哪里设置。无论如何,如果您想使用基于默认模板的自定义模板,您可以 "fighting" 使用模板中的此块:
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
仅在定义几何 header 时加载 geometry
包。解决您的问题的一个简单方法是将几何定义从 header 包含移动到 YAML header:
---
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{...}
。
由于您已经从 R 驱动它,您也可以使用 rticles 包设置的(优秀)示例,它为(学术)论文提供了大量的 LaTeX 定制。
然后您可以 运行 与他们交流。例如,在过去的两年里,我添加了这些包:
这让您可以
- 设置自定义
template.tex
- 包含您需要的任何 LaTeX class 文件/样式文件
- 以编程方式设置选项
我发现这比复制我之前所做的节(例如幻灯片)更可取。
我最近了解到修改 Rmd
pdf 报告的默认 (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’
当使用 default
模板时,rmarkdown::pdf_output
函数似乎做了一些不同的事情。例如,它设置变量 graphics=yes
。我怀疑它也设置了 geometry
,但我没有看到它在哪里设置。无论如何,如果您想使用基于默认模板的自定义模板,您可以 "fighting" 使用模板中的此块:
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
仅在定义几何 header 时加载 geometry
包。解决您的问题的一个简单方法是将几何定义从 header 包含移动到 YAML header:
---
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{...}
。
由于您已经从 R 驱动它,您也可以使用 rticles 包设置的(优秀)示例,它为(学术)论文提供了大量的 LaTeX 定制。
然后您可以 运行 与他们交流。例如,在过去的两年里,我添加了这些包:
这让您可以
- 设置自定义
template.tex
- 包含您需要的任何 LaTeX class 文件/样式文件
- 以编程方式设置选项
我发现这比复制我之前所做的节(例如幻灯片)更可取。