Quarto循环绘图中标签失效与自动标题生成问题
Quarto 问题解答
1. 标签fig-test无法识别的原因及修复
你用循环生成了两张图,但代码块的元配置不符合Quarto多图交叉引用的规则,导致标签失效:
- 误用
fig-cap存放子图标题:Quarto里fig-cap是整个图组的主标题,每个子图的标题要放在fig-subcap字段(值为列表)。 - 未明确多图布局:生成多个图时,需要指定
layout-ncol这类布局参数,告诉Quarto这是一个整体图组,不是独立的两张图。
修正后的代码块配置如下:
#| label: fig-test #| fig-cap: "测试图组" #| fig-subcap: #| - "第一张图的标题" #| - "第二张图的标题" #| layout-ncol: 2 #| lightbox: #| group: test_group for (i in 1:2) plot(rnorm(100), pch = 19, cex = 0.5)
修改后@fig-test就能正常识别并指向该图组。
2. YAML中自动生成图表标题的方法及更新情况
YAML本身不支持原生循环,但Quarto允许在YAML或代码块配置中用R表达式动态生成内容,相比你之前查到的方案,现在的支持有这些增强:
核心实现方式
用!expr前缀在配置中执行R代码,结合glue这类工具包可以批量生成标题:
- 代码块内动态生成子标题:
#| label: fig-dynamic #| fig-cap: "动态标题图组" #| fig-subcap: !expr glue::glue("子图 {1:2}: 随机正态分布") #| layout-ncol: 2 for (i in 1:2) plot(rnorm(100), pch = 19, cex = 0.5) - YAML全局配置中动态生成通用规则:
--- title: "MWE" params: plot_count: 2 format: html: fig-cap-prefix: !expr paste("图", seq_len(params$plot_count), sep = "-") ---
后续更新的优化点
- 动态表达式支持范围扩大:现在几乎所有YAML字段和代码块元参数都能使用
!expr。 - 与Quarto工具链深度集成:可以调用
quarto包的函数获取文档上下文,实现更复杂的动态配置。 - 第三方工具包无缝兼容:无需额外配置就能在
!expr里调用glue、stringr等包的函数,简化批量标题生成逻辑。
内容的提问来源于stack exchange,提问作者mistral
相关产品推荐
相关产品推荐

