如何在Typst中将二维数组形式的矩阵传入mat()函数排版?
在Typst中用
mat()排版二维数组形式的矩阵 要把二维数组传入mat()函数完成排版,核心是利用Typst的数组解构结合..展开符,适配mat()的参数格式要求。
实现方案
- 先保留你已实现的O(n³)矩阵乘法函数(示例如下):
func mat-mul(a, b) { let n = len(a) let m = len(b[0]) let p = len(b) let result = array.init(n, (_) => array.init(m, 0)) for i in 0..n { for j in 0..m { for k in 0..p { result[i][j] += a[i][k] * b[k][j] } } } return result }
- 排版时,通过
map配合..展开符,将二维数组转换为mat()可接受的参数结构:
// 定义示例矩阵 #let A = [[1, 2], [3, 4]] #let B = [[5, 6], [7, 8]] #let C = mat-mul(A, B) // 直接用mat()排版结果矩阵 $mat(..C.map(..))$
原理说明
mat()的参数格式要求是mat(行1, 行2, ...),其中每行需为逗号分隔的元素集合(如mat((1,2), (3,4)))。- 二维数组的每一项是一行子数组,用
..展开子数组可将元素转为行参数的元素列表,外层再用..展开所有行,就能完成二维数组到mat()参数的适配。
完整使用示例
#let mat-mul(a, b) { let n = len(a) let m = len(b[0]) let p = len(b) let result = array.init(n, (_) => array.init(m, 0)) for i in 0..n { for j in 0..m { for k in 0..p { result[i][j] += a[i][k] * b[k][j] } } } return result } #let A = [[1, 2], [3, 4]] #let B = [[5, 6], [7, 8]] #let C = mat-mul(A, B) == 矩阵乘法结果 $A * B = mat(..C.map(..))$
内容的提问来源于stack exchange,提问作者Heliton Martins
相关产品推荐
相关产品推荐

