如何为Typst文档实现图片内嵌/末尾追加的切换功能?
实现Typst图片位置一键切换(内嵌/末尾)
可以通过全局开关变量+图片存储数组的方式实现需求,下面是具体可直接复用的方案:
1. 全局配置与初始化
在文档开头定义控制开关和存储图片的数组:
// 控制图片位置:true=内嵌正文,false=全部移到文档末尾 #let inline-figures = true // 存储非内嵌模式下的图片内容 #let figure-store = []
2. 自定义myfigure函数
该函数兼容原生figure的所有参数,根据开关自动处理图片位置:
#let myfigure( image, caption: none, width: 100%, // 可添加其他原生figure支持的参数 ..rest ) = { if inline-figures { // 内嵌模式:直接渲染原生figure figure( image, caption: caption, width: width, ..rest ) } else { // 末尾模式:将图片存入数组,正文插入引用标记 figure-store.push( figure( image, caption: caption, width: width, ..rest ) ) // 正文显示符合德国论文格式的图片引用 text(gray)[Abbildung #len(figure-store) (siehe Anhang)] } }
3. 正文使用示例
不管切换哪种模式,调用方式完全一致:
// 正文内容示例 Dies ist ein Beispieltext, der sich auf ein Bild bezieht. #myfigure( image("diagramm.png"), caption: "Beispiel-Diagramm zur Datenanalyse", width: 80% ) Weiterer Text, der auf das nächste Bild verweist. #myfigure( image("tabelle.png"), caption: "Vergleichstabelle der Messergebnisse" )
4. 文档末尾自动输出图片
在文档最后添加以下代码,非内嵌模式下自动生成图片附录:
// 仅当非内嵌模式时显示图片附录 #if !inline-figures { pagebreak() = Anhang: Abbildungen // 遍历存储数组输出所有图片 #for fig in figure-store { #fig v(1em) // 图片间添加间距 } }
额外:兼容原生figure命令(可选)
如果不想修改现有代码中的figure调用,可以直接覆盖原生命令:
#let original-figure = figure // 保存原生figure命令 #let figure(..args) = { if inline-figures { original-figure(..args) } else { figure-store.push(original-figure(..args)) text(gray)[Abbildung #len(figure-store) (siehe Anhang)] } }
这样你可以继续使用原生figure语法,无需调整现有代码。
内容的提问来源于stack exchange,提问作者Lina Blume
相关产品推荐
相关产品推荐

