将变量从Rmd/YAML头传递到before_body .tex

11dmarpk  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(134)

我有一个这样的YAML头:

---
output:
  pdf_document:
    latex_engine: xelatex
    includes:
      in_header: "preamble.tex"
      before_body: "title.tex"
    keep_tex: yes
documentclass: report
classoption:
  - landscape
---

我通过调用rmarkdown::render()来编写文档。
我想这样调用render()

rmarkdown::render("MyDocument.Rmd", params = list(
  person1 = "John Doe, JD",
  person2 = "Charlie P. Adams, CPA"
))

它们被传递到Rmd中,然后被进一步下推到title.tex(包含在YAML头文件中),在那里会发生类似这样的情况:

\vspace{15pt}\hspace{15pt}\large [$person1$] \par
\vspace{15pt}\hspace{15pt}\large [$person2$] \par

如何将字符串传递给title.tex,以及如何在title.tex中解析它?

mf98qq94

mf98qq941#

我想这是不可能的,我问目前的方式。所以我会回答我想出的变通办法:一种方法是将一些字符串存储在title_template.tex中-而不是$person1$ i作为一种更安全的模式使用person1。然后我从R中像这样(根据这个要点改编):

fin <- "title_template.tex"
fout <- "title.tex"
x <- readLines(fin)

y <- gsub( "`clientname`", "Really Big Client", x ) %>%
  gsub( "`groupname`", "Ministry of Silly Walks", .) %>%
  gsub( "`person1`", "John Doe, JD", . ) %>%
  gsub( "`person2`", "Charlie P. Adams, CPA", . )

cat(y, file=fout, sep="\n")

由于我需要在一个闪亮的应用程序中的事件上执行此操作,因此我将该代码放在observeEvent()中,替换字符串来自ui中的textInput,并且新文件的gsub/write out将在调用rmarkdown::render(fout)之前发生。每次都将确保覆盖该文件。

相关问题