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

Quarto书籍标题使用r params$name参数不生效问题求助

解决Quarto书籍标题动态使用参数值的问题

问题根源

你遇到的核心问题是:_quarto.yml作为Quarto的项目配置文件,不会被knitr或其他代码引擎解析,所以里面的r params$name只会被当作纯文本显示,而不会执行并替换为参数值。和参数定义在qmd文件还是主YAML无关——哪怕你把参数移到_quarto.yml里,主配置里的R代码也依然不会被执行。

解决方案

下面提供两种可行的实现方式:

方式一:项目参数 + Lua 过滤器

这种方式适合需要在多个地方复用参数,且希望保持主配置简洁的场景:

  1. 修改_quarto.yml,定义项目级参数并给标题加占位符,同时引入Lua过滤器:
project:
  type: book
  execute-dir: project
  params:
    name: "Test" # 定义项目级参数

book:
  title: "Test title for {name}" # 用占位符标记需要替换的位置
  chapters:
    - index.qmd
    - contact_us.qmd
    
format:
  html:
    theme: cosmo
    fontsize: 16px
    mainfont: Arial
    filters:
      - title-params.lua # 引入自定义过滤器

execute:
 echo: false
 warning: false
editor: source
  1. 在项目根目录创建title-params.lua文件,写入以下代码:
function Meta(meta)
  -- 将标题中的占位符替换为项目参数的实际值
  meta.book.title = meta.book.title:gsub("{name}", quarto.project.params.name)
  return meta
end
  1. 如果需要在qmd文件中使用这个参数,直接用r quarto.project.params.name即可,和主配置保持参数一致。

方式二:在qmd文件中动态修改元数据

这种方式更直接,不需要额外的Lua文件:
修改你的index.qmd,在setup代码块里用Quarto API动态更新书籍标题:

---
params:
  name: "Test"
engine: knitr
---
 
```{r setup, include=FALSE}
# 动态替换书籍标题
quarto_metadata$book$title <- paste("Test title for", params$name)

Introduction {.unnumbered}

This book is about r params$name.

渲染书籍时,setup代码块会自动修改Quarto的元数据,从而让标题显示参数对应的实际值。

内容的提问来源于stack exchange,提问作者cp13
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:26:36