将变量从 Rmd/YAML 标头传递到 before_body .tex
Posted
技术标签:
【中文标题】将变量从 Rmd/YAML 标头传递到 before_body .tex【英文标题】:Pass variables from Rmd/YAML header to before_body .tex 【发布时间】:2021-12-24 23:51:35 【问题描述】:我有一个这样的 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 标头中),其中会发生这样的事情:
\vspace15pt\hspace15pt\large [$person1$] \par
\vspace15pt\hspace15pt\large [$person2$] \par
如何将字符串传递给 title.tex 以及如何在其中解析它?
【问题讨论】:
这有帮助吗:***.com/a/54746683/2777074 可能(我现在知道这是如何工作的),我真的很想避免将整个 .tex 放在标题中,因为它不是一个小文件。我确实编辑了 OP 以澄清我需要什么。抱歉,但实际上参数需要来自对 render() 的调用,在那里(可能)它们会转到 YAML 标头(或者可能不会),然后进一步到 title.tex。 也就是说,我知道如何将参数放入标题中。所以我可以按照我认为的这些思路拼凑出一个解决方案。如果有一种方法可以在不直接在 YAML 标头中包含 200 行乳胶的情况下做到这一点,那我会更喜欢…… 您是否尝试过与头文件相同的方法? 我有一个 title.tex 文件,而不是头文件。我只是尝试将它放在“before_body:”部分而不传递参数,但我收到一个错误,就像它需要一个文件一样:“资源路径中找不到文件 \begintitlepage 错误:pandoc 文档转换失败,错误 99” 【参考方案1】:0
我认为不可能按照我目前要求的方式进行。所以我会用我想出的解决方法来回答:方法是将一些字符串存储在 title_template.tex 中 - 而不是 $person1$ 我选择了person1
作为更安全的使用模式。然后我像这样从 R 中 gsub 文件(改编自这个要点):
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就在调用 rmarkdown::render(fout) 之前。每次一定会覆盖文件。
【讨论】:
以上是关于将变量从 Rmd/YAML 标头传递到 before_body .tex的主要内容,如果未能解决你的问题,请参考以下文章
spring boot - 假装客户端发送基本授权标头|将 jwt 令牌从一个微服务传递到另一个微服务
如何使用 Ruby on Rails 将数据从控制器传递到模型?
如何将自定义标头从 mvc 项目发送到 Web api 项目?