如何在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
相关产品推荐
相关产品推荐

