Quarto与Typst集成时页眉无法调用title变量的问题
问题描述
我尝试通过Quarto的YAML配置传递title、author、date等变量,已实现封面正常显示这些信息,但title无法在页眉中渲染。附上相关代码和截图,请问该问题的原因是什么?
相关代码片段
Typst模板核心代码
// 封面渲染逻辑 #show cover: it => { align(center, vstack( text(2em, it.title), text(1.2em, it.author), text(1em, it.date) )) } // 页眉渲染逻辑(当前不生效) #show header: it => { align(left, text(it.title)) }
Quarto YAML配置
title: "我的文档标题" author: "张三" date: "2024-05-20" format: typst: template: custom-template.typ
输出情况
问题原因及解决方法
核心原因
Quarto向Typst模板传递变量时,封面的上下文与页眉/页脚的全局上下文不共享:
- 封面的
it.title直接对应YAML中的顶层title变量,因为Quarto会把元数据注入封面的局部上下文; - 页眉的
it指代的是页眉自身的局部上下文(默认无内容),无法直接访问顶层的title,必须通过Quarto提供的全局元数据对象quarto-meta来获取。
修复步骤
- 修改Typst模板的页眉渲染逻辑,通过
quarto-meta读取标题:
#show header: _ => { align(left, text(quarto-meta("title"))) }
- 确认Quarto版本:使用Quarto 1.4及以上版本,早期版本对Typst的元数据传递支持存在缺陷。
- 检查模板引入方式:如果使用了分离的
typst-show.typ文件,需在YAML中明确声明:
format: typst: template: custom-template.typ template-partials: - typst-show.typ
调试验证
可以在模板开头添加调试代码,确认元数据是否正常传递:
// 临时渲染所有元数据,用于排查 #text(quarto-meta())
如果输出内容包含title字段,说明元数据传递正常,只需调整页眉的变量引用方式即可。
内容的提问来源于stack exchange,提问作者Pss
相关产品推荐
相关产品推荐

