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

Typst中#()与#{}的差异、适用场景及优先使用场景咨询

Typst中#()与#{}语法的区别及适用场景

核心差异

  • #() 是单个表达式嵌入语法,只能容纳纯表达式(不能包含let变量定义、赋值这类语句),作用是把单个表达式的求值结果直接插入文本流。
  • #{} 是完整代码块语法,可以承载多条语句、复杂表达式,支持局部变量定义、if/for流程控制等逻辑,代码块最后一个表达式的结果会作为最终插入内容。

适用场景

优先/仅适合用#()的情况

  1. 简单表达式快速嵌入:比如直接计算、变量引用时,写法更简洁紧凑,示例:
    Total price: #(subtotal * 1.08)
    Welcome back, #(user.nickname)!
    
  2. 避免语法歧义:当表达式后面紧跟标点或文本时,#()的括号能清晰界定表达式范围,可读性更强,示例:
    The result is #(2+3).  // 括号明确包裹表达式,不会和后续句号混淆
    
    这种场景用#{}也能运行,但#()的写法更自然直观。

必须用#{}的情况

  1. 需要定义局部变量:任何包含let、set这类语句的逻辑都必须用代码块,示例:
    #{
      let base = 10
      let multiplier = 1.5
      base * multiplier
    }
    
  2. 多语句/复杂逻辑:比如包含循环、条件判断,或者需要先执行样式设置再输出内容的场景,示例:
    #{
      set text(color: blue, weight: "bold")
      for i in 1..=3 {
        Line #i
      }
    }
    
  3. 无返回值但有副作用的操作:比如仅调整文档样式而不需要输出具体内容时,代码块可以承载这类逻辑。

补充说明

对于单个简单表达式,两者功能等价,但#()的写法更轻便;一旦涉及到语句或多步逻辑,只能使用#{}。官方文档的示例也对应了这两种场景:#()用于快速嵌入表达式,{}搭配#形成的#{}用于完整代码块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:33:12