在Quarto中实现Python与Typst参数传递及循环索引交互问题
问题解答
你没法直接把Typst循环里的_索引传递给Python代码块,也不能在Typst循环里递增Python的ix变量——因为Typst和Python代码块的执行是分阶段的:
- 所有Python代码会先执行完毕,生成对应的输出内容后,才会交给Typst进行渲染处理;
- Typst的循环是在渲染阶段才运行的,这时候Python的上下文已经结束了,没法再修改Python变量或者实时传递数据。
可行的解决方案
方案1:Python提前生成所有内容片段
在Python里预先处理好每个章节需要的内容,生成一个列表,然后让Typst直接循环遍历这个列表输出:
# 假设tables是你的数据源,提前生成每个章节的内容 chapter_items = [f"章节内容:{item}" for item in tables]
对应的Typst代码:
#for content in `{python} chapter_items` { = 章节 [content] }
方案2:把数据传给Typst,让Typst处理索引和循环
直接将tables变量传递给Typst,在Typst里自己完成循环和索引操作:
# 无需额外处理,确保tables能被Typst访问到
对应的Typst代码:
#let tables = `{python} tables` #for (index, table) in tables.enumerate() { = 第#(index + 1)章 [table] }
这两种方法都能实现你循环创建章节的需求,选哪种取决于你更倾向于在Python还是Typst里处理内容逻辑。
内容的提问来源于stack exchange,提问作者Marek
相关产品推荐
相关产品推荐

