You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Typst的#list函数中插入自定义函数生成的单词列表?

问题解决:自定义函数输出适配Typst list函数

问题分析

你的bullet函数当前返回的是拼接后的单个文本块(比如[Hello;],[Word.]),而Typst的list函数需要的是多个独立的列表项参数,直接传入会被当成单个列表项处理,导致不符合预期的输出。

解决方案:修改bullet函数返回元素列表

调整bullet函数,让它返回处理好标点的元素数组,再通过**展开操作符...**把数组元素拆成list的独立参数:

#let bullet(list_bullet) = {
  list_bullet.map((content, index) => {
    // 根据是否为最后一个元素添加对应标点
    if index == list_bullet.len() - 1 {
      #[#content .]
    } else {
      #[#content ;]
    }
  })
}

#let example = ("Hello", "Word")
// 用展开操作符拆分数组,传入list作为独立项
#list(
  marker: [#text(rgb(0,158,161))[#sym.circle.filled]],
  spacing: 8pt,
  indent: 12pt,
  ...bullet(example)
)

执行后就能得到预期输出:

- Hello;
 - Word.

两种list调用方式的差异

方式一(无效)

#list(..., bullet(example))

这里bullet(example)返回的是一个单个数组对象,list函数会把这个对象当成唯一的列表项,所以输出会把整个拼接内容放在一个项目里,出现- [Hello ;], [Word .]的结果。

方式二(有效)

#list(..., [Hello;], [Word.])

这里直接传入了两个独立的内容块,完全匹配list函数的可变参数要求(接受任意数量的列表项),因此会生成两个独立的列表项,符合预期。

内容的提问来源于stack exchange,提问作者Con5tantine_83

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:35:58