几乎每个理工科研究生以及文章作者都会遇到编辑数学公式问题。我至今都记得当我试图在word毕业论文中插入一个大型公式的时候,office那个公式编辑器给我带来的巨大麻烦。word公式不仅需要你在编辑的时候反复打开符号表寻找重复使用的那几个符号,而且还很可能在不同设备上打开之后格式就乱掉,大大增加你的血压。
为了解决这个问题,很多人开始诉诸于手写公式智能识别之类的手段。不过这种方法一般依赖于一些外设设备(比如iPad,手绘板),而且修改起来还是很麻烦。
如果你看过我之前写的那些用数学笔记做案例的文章,你可能会好奇一件事:我写一篇笔记需要插入如此多数学公式,这不累吗?用打字的方法写数学公式,其难度远高于手写公式,会不会导致做笔记效率低下?

在这个问题上,我可以负责任地告诉你不会。在长期的探索中我总结出来了一套可以高效输入数学公式的方法。只要掌握了这套方法,任何人都可以快速并且轻易地创造出排版雅观的数学笔记。这是我输入数学公式的一般速度:

本文我将会从头开始,一步一步教你如何实现公式的快速输入,让数学等最重要的学问纳入到自己的知识管理体系中来成为可能。
少数派编辑器不支持数学公式,所以下文中的公式演示全部用截图代替,敬请谅解。
数学公式的排版
数学是一门极度古老的学问,其使用的符号系统是手写时代发明的,这导致数学公式比起文本来说更像是图画,给电子时代的排版造成了巨大的困难。
为了解决这个问题,人们决定使用文本代码来描述字体、大小以及相对位置等信息,然后把代码渲染为矢量图形,从而以图片的形式把公式插入到文章中。这种思路的代表产品是LaTeX。如今你看到的大部分理工类书籍、论文都是用LaTeX实现排版的;几乎所有的markdown编辑器也都使用LaTeX来渲染公式。比如这是LaTeX渲染的连续型随机变量的贝叶斯公式:
P(X=x|Y=y)=
\frac{P(X=x,Y=y)}{P(Y=y)}=
\frac{P(Y=y|X=x)P(X=x)}{\int_{-\infty}^{+\infty} P(X=x)P(Y=y|X=x) \, dx }

然而LaTeX也有许多显著的缺点:
- 语法极其繁琐冗杂(从上述公式的代码多达113个字符);
- 至今(2025)都不支持实时渲染。
虽然后来MathJax以及KaTeX等渲染器实现了对LaTeX公式进行实时渲染,但是LaTeX语法冗杂的特点使得输入公式的效率极低,这成了其硬伤。而且由于理工人长期以来都是一个庞大却被忽视的群体,这导致绝大多数笔记软件对公式的支持极差,这才导致了数学在笔记以及知识管理上的巨大问题。
有许多人都在为解决LaTeX语法冗杂的问题而努力。比如asciimath、orgmode以及typst之类的标记语言就对公式语法进行了大量简化,大大改善了输入公式的体验。不过这些产品目前还属于小众领域,市面上主流的网站以及笔记软件几乎都不支持;只有Obsidian有插件可以支持渲染笔记中的asciimath以及typst公式。
解决方案:Code Snippet
Code Snippet是一个在代码编辑器中很常见、很简单、但是很小众的功能。你可以预先设置一些snippet规则,当编辑器检测到你输入特定字符之后,就会将其替换为snippet规定的一段文本。Code Snippet是冗杂语法最有效的克星,一直以来都为经常遇到这种问题的前端程序员所使用。
比如说,希腊字母使用频率很高,但是输入很麻烦。于是我就设置一系列规则:
aa->\alpha
bb->\beta
gg->\gamma
于是我就可以愉快地在公式中使用希腊字母了:

LaTeX中的花括号、换行需要用矩阵元素,输入起来非常麻烦,于是我也可以用简单的指令替换它们:

有些公式极为常用,但是输入起来却很麻烦。我希望能直接生成整个公式,然后留空让我去替换几个位置。这可以使用Code Snippet的占位符功能:

这样的解决方案思路启发了一个叫做Gilles Castel的数学系学生。他根据自己的现实需要编写并且打磨了一整套涵盖数学的方方面面的Snippet规则,然后配合上纯熟的vim技巧,用纯LaTeX做笔记。这是他展示的笔记例子:

这是他使用vim+latex做笔记的速度(渲染已经跟不上他的速度):

就像编程的效率瓶颈不是写代码的速度而是思考的速度一样,我们也不必为了追求这样的极致速度去苦学vim。接下来我会讲述我是如何具体去写数学笔记,并且提供我自己的模板。
Obsidian数学笔记
Code Snippet是个很简单的功能,但是支持Code Snippet的笔记软件寥寥无几。市面上红火的笔记软件(比如Notion、语雀、思源笔记)几乎都把精力花在了开发数据库、思维导图、多维表等复杂、且利用率也堪忧的功能上,这让我时常觉得它们根本不管一众理科人的死活。不过好在Obsidian提供了LaTeX Suite这样一个插件来担此大任。LaTeX Suite在之前的插件推荐中介绍过,其将Gilles Castel的snippet方案迁移到了Obsidian中,并且支持自定义snippet规则。上面我提供的所有例子都是使用Obsidian+Latex Suite实现的。自定义配置文件入口:

不过默认提供的snippet规则并不能完全照顾到我们的需求,还需要进一步修改,为自己做适配。于是我首先是修改了部分常用的希腊字母的触发文本:
tt->\theta
ld->\lambda
LD->\Lambda
Λ以及θ都是很常用的希腊字母,但是原版规则里没有方便的输入方式。
我们经常需要使用的min, max, log没有输入快捷键,于是我让输入这些符号的时候在前面加上一个\
,于是这些运算符就可以和使用斜体字体的普通变量区分开了。

有时候我们经常需要输入序列,这相当麻烦,于是我设置了自动生成序列,并且可以方便地修改内容:

此外,对于巨算符(求和、连乘等),我也单独做了优化。我让它可以自动添加顶部和底部:

除了上述这些,我还有许多其他的优化,不限于数学公式。如果你想要获得我使用的snippet配置文件,可以关注我的公众号「西郊次生林」,在后台回复「latex suite配置」获取。
总结
数学公式是理工科文章的一个重要部分,几乎每个科研工作者以及markdown笔记实践者都会学习如何编写LaTeX来渲染公式。但是作为一门标记语言,LaTeX本身的历史痕迹太重,语法过于冗杂,这大大限制了我们编辑公式的效率。
Code Snippet是一个简单但是实用的功能。通过设置snippet,我们可以将简单的指令拓展为模板,从而实现快速编辑公式。大多数代码编辑器(VSCode,Vim,Atom等)以及Obsidian具有这个功能,合理设置之后可以实现高速编辑LaTeX公式,甚至可以满足课堂笔记的需要。我比较推荐大家以Gilles Castel的Snippet方案为蓝本,根据自己的使用习惯打造自己的公式编辑方案。这样有助于实现效率最大化。
我是@西郊次生林,一个关注学习方法/效率工具/知识管理且热衷写作的研究生。希望我的文章对你有帮助。