如何在Typst中获取内容与布局的length类型宽高值?
在Typst中获取length类型的内容与布局宽度
核心问题在于你混淆了用于计算的length值和用于显示的content渲染结果。以下是具体解决方法:
1. 正确获取布局宽度(length类型)
layout()函数的回调参数size.width本身就是length类型,但需要在context块内赋值,才能让变量存储length而非content:
#let page-width = context { layout(size => size.width) } // 直接用这个值做计算(合法,因为page-width是length) #rect(width: page-width - 30pt, height: 40pt, fill: lightgray)
2. 正确获取文本内容的宽度(length类型)
measure().width同样是length类型,只需确保在context环境中使用,变量就会存储length值,而非渲染后的content:
#let get-text-width(content) = context { measure(content).width } #let hello-width = get-text-width[Hello World] // 用该值做计算,比如设置另一个元素的宽度 #text(width: hello-width + 15pt, size: 18pt, "This box is wider than Hello World")
误区说明
当你直接输出page-width或hello-width时,Typst会自动将length值渲染为带单位的文本(比如453.54pt),此时它是content类型,但变量本身存储的仍是length——你不需要用str()转字符串再eval(),直接在计算逻辑中使用变量即可。
内容的提问来源于stack exchange,提问作者Leonard Neon
相关产品推荐
相关产品推荐

