在外部LaTeX文件中将YAML参数作为宏访问

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

我正在寻找方法将变量(或LaTeX宏)添加到YAML标头或不久后,以便它们可以用在.tex作为我的(模块化的)报告的一部分的外部文件中.

我的.rmd档案

---
output:
  pdf_document:
    latex_engine: xelatex
    includes:
      before_body: some.tex
params:
  cat: "Felix"
  numb: 14
---

# chapter
Oh my \textbf{`r params$cat`}. 
$x = `r 2*params$numb`^2$

<!-- Trying again to get the parameter -->
\input{some.tex}
Run Code Online (Sandbox Code Playgroud)

我的some.tex档案:

`r params\$cat`
Run Code Online (Sandbox Code Playgroud)

产量

在此输入图像描述

希望输出

我希望能够以某种方式传递来自YAML标头(或者甚至在它下面)的变量以供LaTeX使用,以便可以在一个地方查看和更改所有重要且定期更新的参数.

Wim*_*pel 6

这只是中途.仍然没有文件作为标题输入...

也许这个答案会让别人有一个想法来建立......

---
output:
  pdf_document:
    latex_engine: xelatex
params:
  cat: "Felix"
  numb: 14
header-includes:
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \fancyhead[CO,CE]{`r params$cat`}
---

# CHAPTER 1
Oh my \textbf{`r params$cat`}. 
$x = `r 2*params$numb`^2$

```{r child = 'some.tex'}
```
Run Code Online (Sandbox Code Playgroud)

截图pdf

在此输入图像描述


Mic*_*per 6

如果您正在寻找最与R Markdown工作流程保持一致的内容,则可以自定义用于构建LaTeX输出的模板,并将所有其他LaTeX代码直接添加到其中。

1.复制模板

首先,我们必须复制R Markdown使用模板。以下代码将在您当前的工作目录中创建该代码:

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

2.添加变量

使用我们的副本,我们可以定义自己的pandoc变量,这些变量将插入到输出文档中。这使我们可以在文档的YAML部分中指定参数,它们将以输出格式进行更新。它是完全一样的机制,使我们能够增加titleauthordate并为他们添加到输出格式。

我在第253-255行的文档的开头添加了一些代码。确切的位置无关紧要,但是我也倾向于将自定义项放在\begin{document}参数之前:

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[LO, LE]{$params.value$}
\fancyhead[RO, RE]{$yourParam$}
Run Code Online (Sandbox Code Playgroud)

3.从R Markdown调用模板

我们可以将自定义模板引用到我们的R Markdown文档中,如此处所述。这是我的最小示例:

---
output:
  pdf_document:
    template: template.tex
params:
  value: Text
yourParam: "`r Sys.Date()`"
---

`r params$value`
Run Code Online (Sandbox Code Playgroud)

这两个参数将代替$params.value$和和添加到输出中$yourParam$,并导致以下输出:

在此处输入图片说明

该示例着重说明了YAML参数不必params像原始问题中指定的那样嵌套在参数中。如果要构建参数化的报告,则在参数中指定它们主要有好处

注意:$variable$仅在template选项下定义的主模板文件中才可以使用pandoc表示法替换变量。它不适用于任何includes参数或任何其他外部LaTeX文件。有关更多详细信息,请参见此处