Typst 插件 WIP

现在是 2025 年 9 月,我们已经有了 typst.ts,可以将 Typst 公式渲染为 SVG.

思源这边其实还缺少一些底层支持,主要是 Inline Custom Block,目前的挂件块可以支持 Block Level 的嵌入。

Ref: Issue #14991 · siyuan-note/siyuan Issue #8418 · siyuan-note/siyuan

目前用肮脏的手法写了一个 Demo,遇到的问题不少,包括 Typst 那边如何控制 SVG size、如何正确地触发 Render 等。

iShot2025092106.08.06.gif

由于是今晚(或者说今早)刚刚动工,虽然算是凑合跑通了,距离能端上来正常使用还有很漫长的距离。

接下来还需要加入 Math Block 支持,正在考虑是继续 Hack 自带的 Math Block 还是用挂件块。

不知道大家对这个插件有多大需求,如果没多少 Typst 用户的话我就开发到自己觉得「又不是不能用」的程度了 😂

你对 Typst in 思源的看法是?

单选 公开 永不结束 13 票
没听说过 Typst,KaTeX 足够了
38% 5 票
没听说过 Typst,不过文中 Demo 看上去还行
0% 0 票
Typst 用户,但思源官方稳定维护的 KaTeX 足够了
15% 2 票
Typst 用户,灵车第三方 Typst Plugin 也想用
46% 6 票

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28446 引用 • 119789 回帖

相关帖子

14 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 考虑到思源自定义块鸽了几年没出

    我觉得可以给思源直接 pr,设置加一个全局选项,公式块默认用 katex 还是 tpyst,然后单个数学公式块可以通过块设置修改自定义属性来确定使用 tpyst 还是 katex 渲染

    公式块本身就耗性能,用插件来 hack 估计性能更不好

    不过个人觉得只是打公式的话,katex 也不是不能用,兼容性更好,没必要折腾 typst,导出 markdown 写论文再切换也不是不行,让 ai 把 katex 公式转为 typst 公式就行

    1 回复
  • Clouder

    Typst 那套玩意会增加 10MB 左右的 Binary Size,合回主线的话还有后续维护问题,有点令人犹豫。只是单纯「有这个功能」的话确实直接改思源本体方便很多。

    Typst 主要的优势就是写起来方便,写 Typst 转 LaTeX 可能更实用一些(

    1 回复
  • Clouder

    image.png

    Inline Math 和 Block Math 都正常支持了

  • 如果你只是为了方便写公式 可以考虑写 tpyst 时自动转 latex 进行渲染,这样只需要多一个 textarea 输入框

    1 回复
  • Clouder

    这个方案 Inline Math 保存数据不太方便,原始 Typst Content 还是需要持久化以便后续修改;另一个是 Typst to LaTeX 不是很成熟;不过转成 KaTeX 渲染倒是能覆盖所有需要 Render Math 的边边角角

  • KaTeX 主要的几个痛点:

    1. 语法冗杂,这与 TeX 语法的早期定型有关.
      1. 思源中可以通过“编辑器增强”插件获得自动补全.在有自动补全的前提下,TeX 不比 Typst 难写.
      2. 可读性 Typst 优于 TeX 无疑.
    2. 对 TeX 语法支持不全面.
      1. 其实核心数学语法基本已经覆盖了,宏包层面的命令本身就不可能做到完全支持,Typst 也做不到.
      2. 其中 KaTeX 用户呼声最高的引用命令,Typst 倒是支持,但不知道在思源里兼容性如何.
    3. KaTeX 样式丑陋,大量边界排版情况处理不好.举几例:
      1. KaTeX 的公式字体偏大,不知道为什么默认字体比正文大 20%,这个问题的 issue 已经挂了十年还没有动.从对比图上看 Typst 的公式字体甚至更大,不知是否是默认设置?
      2. cases 环境的垂直间距过小,分式和巨算符在其中会互相重叠.不清楚 Typst 的处理.
      3. 连分式和指数间距也有问题.也不清楚 Typst 的处理.
      4. 虽然在数学环境写中文是很奇怪的事情,但 KaTeX 默认的中文字体确实不好看.

    KaTeX 也有优点,比如性能好、兼容性强(相比 Typst 使用更广泛使用的 TeX 语法).目前绝大多数数学写作都是用 TeX 语法,从其他来源剪藏内容时还要做语法转换.

    总体来看,我觉得目前在思源中用 Typst 效果未必优于 KaTeX.

    1 回复
  • Clouder

    Typst 可以自定义你提到的所有样式问题。默认字体大小是我现在手动设置的。中文字体也可以设置。Typst Plugin 直接使用 WASM Typst Compiler 渲染为 SVG,兼容性层面和 Typst 完全一致,包括对网络包的引用等,但需要插件适配。目前为了方便写死了模板。

    image.png

    image.png

    cases 的处理:

    image.png

    连分式好看点需要用 display style(\dfrac).

    1 回复
  • Typst 可以自定义你提到的所有样式问题

    KaTeX 也可以自定义这些样式问题,和默认样式有缺陷不矛盾,排版系统需要一致性,不能开箱即用就是原罪.

    Typst Plugin 直接使用 WASM Typst Compiler 渲染为 SVG,兼容性层面和 Typst 完全一致,包括对网络包的引用等

    这点 Typst 确实比 KaTeX 强太多了.

    cases 的处理

    Typst 这边怎么不是 cases 环境?

    连分式好看点需要用 display style(\dfrac)

    没看懂,为什么会出现"display style",意思是在内联模式写?巨分式原则上应该只在外显模式写.

    KaTeX 连分式和指数的问题也不是好不好看的问题,特定缩放比例下,分子的指数会与上一层的分式条重叠.

    1 回复
  • Clouder

    哦草 cases 漏打了

    image.png

    dfrac display(a)/(b) 而非 frac (a) / (b),后者的效果:

    image.png

    连分式指数的问题我还没遇到过。

    image.png

    不能开箱即用对 LaTeX/Typst 来说也很正常,大部分时候会先根据排版要求设置好样式。为思源写一种特定的 Preset Style 我觉得是正常的。裸上 LaTeX/Typst 不用模板的效果难以预期。

    KaTeX 并不能做到类似的自定义样式效果。KaTeX 并不包含 LaTeX 的所有功能,只有 Math Environment. 而 typst.ts 并不限定 Math 环境 ,实际上只需要移除掉 $ ${typst_content} $ 两边的 $ math wrapper 就可以直接写纯粹的 Typst,这有非常大的自由空间,比如用户可以在 Workspace/Article 级别自定义 Inline/Display Template 来实现自己想要的样式控制等,而这在 KaTeX 中是不可能的。

    比如我希望在当前公式中以 Display Style 渲染所有的 Fractions,只需要设置一条 Show Rule. 定义函数变量、设置 Show Rule、引入包等操作都是可行的。

    image.png

    1 操作
    Clouder 在 2025-09-24 18:07:21 更新了该回帖
  • WeiCJ

    感觉那个 10M 大小的增加不用纠结太多。
    一个是能够使用上 typst 的用户大概率不会在意 10M 的增加;另外一部分在意的大概率也用不到 typst。

    所以这两部分用户可能本来就不是重叠的。
    去年我直接 fork 思源之后,尝试直接在代码上直接进行修改,效果还是不错的。除了缩放有一些问题之外,没遇到其他额外的问题,只不过后来忙着写论文,就没继续完善了。感觉老哥可以尝试下直接改代码,这样能保证效果,还能避免一些挂件块的坑。

    直接集成 typst 可能还有个好玩的地方就是,直接使用 typst 根据当前笔记输出排好版的 PDF 格式的论文或其他文章,只不多最近比较忙,目前就简单使用思源 API 的形式,用 Python 简单写了个脚本,直接输出 IEEE 格式的 PDF。如果老哥感兴趣也可以尝试用集成的 typst 实现一下。

    1 回复
  • 感觉那个 10M 大小的增加不用纠结太多。
    一个是能够使用上 typst 的用户大概率不会在意 10M 的增加;另外一部分在意的大概率也用不到 typst。

    这个理由并不充分,“另外一部分在意的大概率也用不到 typst”的人是会在意 10M 的大小的

    1 回复
  • WeiCJ

    这个确实缺少统计数据,只是我经常在 typst 群里有的一个主观判断。

    Typst 因为需要有解释器的原因,即使不使用嵌入模式,使用插件也是需要 Typst 解释器的。typst 群里的大佬整了一个 typst.js, 那个也是编译成了 wasm 格式。
    所以只要是使用 typst,多占一些空间是不可避免的,只是看如何选择,是一开始就增加,还是让用户可以选择只在下载插件的时候增加了。

    1 回复
  • 这里说的不是插件,而是集成到思源里会增加 10MB

    image.png

    1 回复
  • WeiCJ

    看岔了,合并主线肯定是不行的,因为一个小众的需求增加官方版本的文件大小不太好。

    我原本以为作者是纠结使用插件还是自己 fork 一个版本出来然后进行集成给需要 typst 的人使用。

请输入回帖内容 ...

推荐标签 标签

  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 电影

    这是一个不能说的秘密。

    125 引用 • 610 回帖
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 44 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 577 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    6 引用 • 35 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    182 引用 • 400 回帖 • 1 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1062 引用 • 3456 回帖 • 124 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    110 引用 • 153 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 16 关注
  • OpenCV
    15 引用 • 36 回帖 • 1 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 8 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 494 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    173 引用 • 1559 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    91 引用 • 113 回帖
  • 笔记

    好记性不如烂笔头。

    315 引用 • 790 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    502 引用 • 1397 回帖 • 241 关注
  • OneDrive
    2 引用 • 2 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    45 引用 • 44 回帖 • 2 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 152 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 563 关注
  • Word
    13 引用 • 41 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3206 引用 • 8217 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 660 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 1 关注