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

如何在Typst cetz-plot中正确使用plot.formats.multiple-of

解决cetz-plot中y轴刻度格式化为0、F、2F等样式的问题

你尝试用plot.formats.multiple-of格式化y轴刻度时出现错误,核心原因是没有正确将multiple-of作为格式化函数传递给y-format。y-format需要接收一个能处理每个刻度值的函数,而你直接调用multiple-of(1, ...)时,相当于把固定值1传入并返回了一个格式化后的字符串,导致所有刻度都复用这个错误结果。

正确实现方式

将y-format设为一个lambda函数,把每个刻度的数值传递给plot.formats.multiple-of,并调整参数匹配你的需求:

  • factor设为1(你的刻度是1的整数倍)
  • symbol设为"F"(用来替换1倍刻度的显示)
  • 无需额外设置suffix(multiple-of会自动处理倍数+符号的格式,比如2倍刻度显示2F)

multiple-of默认会将0值显示为0,正好符合你的需求。

修正后的完整代码

#import "@preview/cetz:0.3.4": canvas
#import "@preview/cetz-plot:0.1.1": plot

#set page(width: auto, height: auto, margin: .5cm)

#canvas({
  plot.plot(
    size: (12, 8),
    y-tick-step: 1,
    y-min: 0,
    y-max: 5,
    x-min: 0,
    x-max: 4,
    // 正确的格式化函数写法
    y-format: (v) => plot.formats.multiple-of(v, factor: 1, symbol: "F"),
    {
      plot.add((x) => calc.sin(x) + x, domain: (0, 4))
    }
  )
})

自定义格式化备选方案

如果需要更灵活的逻辑控制,也可以手动编写格式化函数:

y-format: (v) => {
  if v == 0 { "0" }
  else if v == 1 { "F" }
  else { `${v}F` }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:43:16