Foundations¶
Arguments¶
自定义函数也如内嵌函数一样可以接收可变长度的参数,以 ..sink 形式指明参数接收器接收额外的参数. 接收器的值是 arguments 类型,其提供了一系列方法访问位置和命名参数.
而与参数接收相反,也可以通过运算符 ..spread 进行参数传播,可传播类型包括参数,数组和字典.
参数的构造函数可以用于构造合适的可传播参数,行为类似 let args(..sink) = sink.
-
at方法返回指定索引的位置参数,或指定键的命名参数. 如果键值是整数,则相当于先调用pos方法再调用array.at方法. 而如果键值是字符串,则相当于先调用named方法再调用dictionary.at方法. -
pos方法以数组形式返回捕捉的位置参数. -
named方法以字典形式返回捕捉的命名参数.
Example
对于
而言,args.pos() 返回 ([Body],),args.named() 返回 (stroke: rgb("#ff4136"), inset: 1em).
Array¶
数组是一种有序的集合,其元素可以是任意类型. 索引从零开始,负索引从数组末尾回绕.
长度为 1 的数组需要一个尾逗号,以消除与括号运算符的歧义.
数组的构造函数可以将值转换为数组,不过该函数意图在于将集合类的值转换为数组,对于独立的值,可以直接使用数组的语法.
-
len方法返回数组元素个数. -
first方法返回数组的第一个元素. -
last方法返回数组的最后一个元素. -
at方法返回指定索引的元素. 如果索引超过了数组范围,则返回默认值;若未指定默认值则出错. -
push方法将元素添加到数组末尾. -
pop方法移除并返回数组的最后一个元素. -
insert方法在指定索引处插入元素,并且将后续元素向后移动. 替换元素的话使用at方法. -
remove方法移除指定索引的元素,并且返回该元素. -
slice方法提取数组的子数组.end参数与count参数互斥. -
contains方法检查数组是否包含指定元素,其也有专门的语法,比如可以用2 in (1, 2, 3)代替(1, 2, 3).contains(2). -
find方法用来查找符合条件的元素,如果找到则返回第一个匹配的元素,否则返回none.Example
#(1, 2, 3).find(calc.even)返回2. -
position方法用来查找符合条件的元素,如果找到则返回第一个匹配的索引,否则返回none. -
range创建一个整数数组,其范围从start到end,步长为step. 只传入一个参数的话,其作为end参数,start参数默认为 0,step参数默认为 1. 传入两个参数的话,第一个参数作为start参数,第二个参数作为end参数,step参数默认为 1. -
filter方法用来创建一个新数组,其中只包含符合条件的元素. -
map方法用来创建一个新数组,其中的元素是原数组元素经过函数处理后的结果. -
enumerate方法用来创建一个新数组,其中的元素是原数组元素及其索引的数组,索引从start开始. -
zip方法用来创建一个新数组,其中的元素是多个数组对应位置的元素的数组. 如果exact参数为true,则强制所有数组长度相等,否则出错. -
fold方法使用累加器和数组的元素折叠为一个值. -
sum方法返回数组元素的和. -
product方法返回数组元素的积. -
any方法检查数组是否有元素符合条件. -
all方法检查数组是否所有元素都符合条件. -
flatten方法将多维数组转换为一维数组. -
rev方法将数组元素反转. -
split方法将数组在对应值处进行分割,得到多维数组. -
join方法将数组元素连接为一个元素. -
intersperse方法将某个元素插入到数组元素之间. -
chunk方法将数组分割为多个大小相等的数组. 除了最后一个数组外,其它数组都有chunk-size个元素. 如果exact参数为true,则在最后一个数组长度不足时将其丢弃,否则保留. -
windows方法返回数组上所有window-size大小的滑动窗口构成的数组. -
sorted方法返回依据键函数排序的数组. -
dedup方法返回去重后的数组. -
to-dict方法将数组转换为字典,如果一个键值出现了多次,则取最后一个值. -
reduce方法将元素规约为一个值. 如果数组是空的,返回none. 当数组至少有一个元素时,其与array.fold方法的行为类似,不过将第一个值作为累加器的初始值.
Assert¶
用于确保条件满足,如果未满足便会产生错误,文档中不产生任何输出.
可以使用 assert.eq 和 assert.ne 来测试两个值是否相等.
-
eq方法用于确保两个值相等. -
ne方法用于确保两个值不等.
Auto¶
支持 auto 值的参数会有智能的默认值或是上下文行为.
Boolean¶
Bytes¶
概念上其类似于一个元素都在 \(0\) 和 \(255\) 之间的整数数组,但表示更高效,可以使用 for 循环遍历.
可以作如下转换:
-
使用
bytes的构造函数将一个字符串或整数数组转换为字节序列 -
借助 UTF-8 编码,使用
str的构造函数将字节序列转换为字符串 -
使用
array的构造函数将字节序列转换为整数数组
从文件读取数据时,可以自行决定是以字符串形式还是以字节序列加载.
构造函数用于将值转换为字节序列.
-
字符串会以 UTF-8 编码进行转换;
-
\(0\) 到 \(255\) 之间的整数数组会被直接转换,专用的字节表示形式比数组表示形式高效的多,因此常被用于处理大型字节缓冲区.
-
len方法返回字节序列长度. -
at方法返回指定索引的元素. 如果索引超过了字节序列长度,则返回默认值;若未指定默认值则出错. -
slice方法提取字节序列的切片.end参数和count参数互斥.
Calculation¶
calc 是数值处理与运算模块,以下的定义都是 calc 模块的一部分,并不会默认导入. 此外 calc 模块还定义了一些数学常量.
-
abs方法返回数值的绝对值. -
pow方法进行指数幂运算. -
exp方法计算 \(\mathrm{e}\) 的幂次. -
sqrt方法计算数值的平方根. -
root方法计算数值的 \(n\) 次根. 如果数值为负,那么次数 \(n\) 需要为奇数. -
sin方法计算角度的正弦值. 以下三角函数的参数若为整数或浮点类型,则作为弧度处理. -
cos方法计算角度的余弦值. -
tan方法计算角度的正切值. -
asin方法计算数值的反正弦. -
acos方法计算数值的反余弦. -
atan方法计算数值的反正切. -
atan2方法计算一个坐标的四象限反正切值,参数为 \((x, y)\). -
sinh方法计算双曲角的双曲正弦值. -
cosh方法计算双曲角的双曲余弦值. -
tanh方法计算双曲角的双曲正切值. -
log方法计算数值的对数. 如果没指定基底,则默认为 \(10\). -
ln方法计算数值的自然对数. -
fact方法计算数值的阶乘. -
perm方法计算排列个数. 返回 \(n\) 的 \(k\) 排列个数. -
binom方法计算二项式系数. 返回 \(n\) 的 \(k\) 组合个数. -
gcd方法计算两个整数的最大公因数. -
lcm方法计算两个整数的最小公倍数. -
floor方法将数值向下取整为最近的整数,是整数则保持不变. -
ceil方法将数值向上取整为最近的整数,是整数则保持不变. -
trunc方法返回数值的整数部分,是整数则保持不变. -
fract方法返回数值的小数部分,是整数则返回 \(0\). -
round方法将数值向远离 \(0\) 的方向舍入到最接近的整数,可以指定保留位数. 如果保留位数为负,其绝对值将表示在小数点前要去除的整数位数. 该方法的返回值类型和参数类型一致.
Function¶
函数是从参数值到一个返回值的映射. 可以通过在函数名称后写入函数参数列表来调用函数,也可以在常规函数参数列表后向函数传递任意数量的后缀参数块. 此外还支持位置参数和命名参数.
某些函数与元素相关联,调用这些函数的时候便会创建对应的元素,被称为元素函数. 与普通函数不同,它们可以在 set, show 以及选择器中使用.
类似于模块,函数可以在自己的作用域中保留定义,但这目前只适用于内置函数.
可以使用 let binding 定义函数,在绑定名称后添加参数列表,参数列表可以包含必需的位置参数,带有默认值的命名参数,以及参数接收器.
函数绑定表达式的右侧是函数体. 函数体可以是块或任何其他的表达式,其定义了函数的返回值并且可以依赖于参数. 如果函数体是代码块,那么返回值是块内所有表达式结果的连接.
在函数体内使用 return 可以提前退出且可以选择指定返回值,如果没有指定返回值,那么函数会将 return 前的表达式结果连接作为返回值.
不返回任何有意义的值的函数会返回 none 作为代替,但这种函数的返回值类型是不指定的.
使用 import 可以从其他模块导入函数.
也可以通过在参数列表后接 => 和函数体来创建匿名函数,这种方式不需要绑定. 匿名函数主要应用于 show,但也适用于接受函数作为值的可设置属性.
Typst 中的所有函数都是纯函数,对于相同的参数总是返回相同的结果,函数无法记忆信息以在第二次调用时产生不同的值. 例外是像 array.push(value) 这样的内置方法,这些方法可以修改他们所调用的值.
-
with方法返回一个预先应用给定参数的新函数,可以认为是派生出的. -
where方法返回一个选择器,其筛选属于此函数且字段值与给定参数值匹配的元素.