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

如何在Typst中将二维数组形式的矩阵传入mat()函数排版?

在Typst中用mat()排版二维数组形式的矩阵

要把二维数组传入mat()函数完成排版,核心是利用Typst的数组解构结合..展开符,适配mat()的参数格式要求。

实现方案

  1. 先保留你已实现的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
}
  1. 排版时,通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:57:04