使用Quarto撰写手稿时,添加可交叉引用补充材料文件的推荐方法?
推荐方案:Quarto学术手稿补充材料的双向交叉引用实现
针对你提到的需求(独立补充材料文件、符合期刊编号规则的图表交叉引用、双向引用),以下是两种实用方案,按推荐优先级排序:
方案一:Lua过滤器自定义编号与引用格式
Quarto基于Pandoc,Lua过滤器可以直接修改交叉引用的编号逻辑和显示格式,是最灵活的解决方案,能完美适配期刊的特殊编号规则。
步骤1:编写Lua过滤器
创建supp-crossref.lua文件,内容如下:
-- 检测补充材料标记,修改图表编号前缀 function Image(img) local is_supplemental = quarto.doc.metadata.supplemental or false if is_supplemental then -- 给补充材料的图表添加自定义类用于区分 img.attr.classes:insert("supp-figure") -- 根据期刊需求设置编号格式:可选"Supplemental Figure X"或"Figure SX" local fig_format = quarto.doc.metadata.supp_fig_format or "prefix" if fig_format == "prefix" then img.caption = pandoc.Inlines{pandoc.Str("Supplemental Figure ")} .. img.caption elseif fig_format == "suffix" then img.caption = pandoc.Inlines{pandoc.Str("Figure S")} .. img.caption end end return img end -- 处理正文对补充材料图表的引用格式 function Cite(cite) for _, citation in ipairs(cite.citations) do -- 通过引用ID前缀判断是否为补充材料图表(假设ID以"supp-"开头) if citation.id:match("^supp%-") then local ref_format = quarto.doc.metadata.supp_ref_format or "prefix" if ref_format == "prefix" then citation.prefix = pandoc.Inlines{pandoc.Str("Supplemental ")} elseif ref_format == "suffix" then citation.prefix = pandoc.Inlines{pandoc.Str("Figure S")} end end end return cite end
步骤2:配置文档元数据
正文文档(如
manuscript.qmd):--- title: "Main Manuscript" filters: [supp-crossref.lua] crossref: fig-prefix: "Figure" ---引用补充材料图表时,直接使用补充材料中定义的标签,比如
@fig-supp-1,过滤器会自动转换为符合要求的格式(如"Supplemental Figure 1"或"Figure S1")。补充材料文档(如
supplemental.qmd):--- title: "Supplemental Materials" supplemental: true supp_fig_format: "prefix" # 可选"prefix"(显示Supplemental Figure X)或"suffix"(显示Figure SX) filters: [supp-crossref.lua] ---补充材料中的图表标签以
supp-开头,比如:{#fig-supp-1}
步骤3:编译项目
使用以下命令编译所有文档,确保共享引用数据库:
quarto render --all
方案二:项目级交叉引用前缀配置(轻量方案)
如果不需要复杂的格式切换,可直接利用Quarto的交叉引用前缀配置,实现补充材料图表的独立编号。
步骤1:项目配置(_quarto.yml)
project: type: default output-dir: _output crossref: fig-prefix: "Figure" # 正文图表前缀
步骤2:补充材料文档配置
在supplemental.qmd中覆盖交叉引用规则:
--- title: "Supplemental Materials" crossref: fig-prefix: "S" fig-number-separator: "" # 去掉编号与前缀的分隔符,实现Figure S1格式 # 若需要Supplemental Figure X格式,改为fig-prefix: "Supplemental Figure" ---
步骤3:双向引用实现
- 正文引用补充材料图表:使用
@fig-supp-1,会自动显示为"Figure S1"或"Supplemental Figure 1"。 - 补充材料引用正文图表:直接使用正文的标签,如
@fig-main-1,会显示为"Figure 1"。
同样需用quarto render --all编译所有文档,确保引用信息互通。
注意事项
- 所有文档需放在同一Quarto项目目录下,无需书籍格式的
index.qmd。 - 若需要表格的补充引用,可在Lua过滤器中添加
Table函数的处理逻辑,类似图片的处理方式。
内容的提问来源于stack exchange,提问作者ekatko1
相关产品推荐
相关产品推荐

