You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将rmarkdown::render传入的参数传递到before_body指定的.tex文件

实现方案

有两种常用的落地方式,第一种操作成本最低:

方法1:通过LaTeX全局命令传递参数(推荐)

原理是在Rmd中先把R层的参数渲染成LaTeX全局命令,再在title.tex中直接调用命令即可:

  • 步骤1:在Rmd文档的YAML头结束后、正文内容开始前,添加如下原始LaTeX代码块,把params参数转换为LaTeX可识别的全局命令:
    ```{=latex}
    % 定义全局命令存储传入的参数
    \newcommand{\personone}{`r params$person1`}
    \newcommand{\persontwo}{`r params$person2`}
    
    如果参数中包含下划线、&、%等LaTeX特殊字符,建议加转义处理,避免编译报错:
    ```r
    ```{=latex}
    \newcommand{\personone}{`r knitr::latex_expr(params$person1)`}
    \newcommand{\persontwo}{`r knitr::latex_expr(params$person2)`}
    
  • 步骤2:修改title.tex中的引用格式,直接调用上面定义的命令即可:
    \vspace{15pt}\hspace{15pt}\large [\personone] \par
    \vspace{15pt}\hspace{15pt}\large [\persontwo] \par
    

这个方法不需要修改现有渲染逻辑,也不用调整YAML配置,兼容性最好。

方法2:动态生成title.tex文件

如果需要传递的参数较多,可以先做模板再动态替换:

  • 步骤1:新建title.template.tex作为模板,内容里用占位符标记参数位置:
    \vspace{15pt}\hspace{15pt}\large [{{person1}}] \par
    \vspace{15pt}\hspace{15pt}\large [{{person2}}] \par
    
  • 步骤2:渲染Rmd前先读取模板,替换占位符生成最终的title.tex,再调用rmarkdown::render:
    # 定义参数
    params <- list(person1 = "John Doe, JD", person2 = "Charlie P. Adams, CPA")
    # 读取模板替换占位符
    template <- readLines("title.template.tex", encoding = "UTF-8")
    template <- gsub("\\{\\{person1\\}\\}", params$person1, template)
    template <- gsub("\\{\\{person2\\}\\}", params$person2, template)
    # 输出最终的title.tex
    writeLines(template, "title.tex")
    # 渲染文档
    rmarkdown::render("MyDocument.Rmd", params = params)
    

同样如果参数有特殊LaTeX字符,替换前先做转义处理即可。

内容的提问来源于stack exchange,提问作者bikeactuary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:03