暴论: 所有编程课本都应该用 Org 格式写

光这个点来看,org 没有特别的优势,甚至还有劣势,org 和 markdown 都是纯文本,在里面写一个公式比如

(\lambda ^2)

仅仅是一串字符, 用普通编辑器打开什么也不会发生 。

之所以能渲染成好看的公式,都是靠第三方库,比如 org-latex-preview 是通过 emacs 代码去调用 latex 里某个程序(latex 是一大堆工具,类似 gcc 工具集),上面那串字符串传给 latex 里的 dvipng 或者 dvisvgm 之类的生成图片的子工具,生成一张 svg /png 图片,保存在一个不想被人直接看到的路径里,然后 emacs 又去把这张图片读出来,利用 emacs 显示 svg 图片的能力展示出来,并且用诸如 overlay 的技巧把原来的字符串隐藏了。

typora 看到 markdown 里的相同的 (\lambda ^2) 字符串,也需要调用第三方库把它变成图片类型,这个过程和 emacs 类似,也是把公式字符串隐藏只给你展示图片。但它不是去调用 latex, 因为从易用性角度,它不会要求用户装了一个编辑器之后还要去安装一个巨大的 latex 工具库,所以它内置了一个更轻巧的解析 latex 公式字符串的引擎,叫做 Mathjax ,它是 js 写的,目的就是能轻便地渲染 大部分常用 latex 公式,并且转成 html,svg 等很常见的可视化格式,所以它的权衡是在效率和平台移植性,牺牲一点表达能力,但大部分人在 markdown里写数学公式也不会太复杂,基本够用。

类似的,把 org 或者 markdown 导出成其他格式的文件,也是需要调用外部渲染引擎,根据导出的不同格式可以用不同方式,比如 org导出成 pdf 可能直接就用 latex 来渲染公式,这样公式直接可以嵌入在 pdf 里,但 org 导出成 html 那可能就不需要渲染,而只要在 html 头里加上一个 Mathjax.js 的引用,然后你用浏览器打开这个 html, 浏览器去调用 Mathjax.js 从而解析公式,这时候浏览器成了最终的渲染引擎.

所以,如果能接受自己安装本地 latex,配 emacs -org, 用 org 记录数学公式相比 typora 的优势就是可以写出一些 Mathjax 无法渲染的公式(Supported TeX/LaTeX commands — MathJax 3.2 documentation 这是 mathjax 支持的 latex 公式集),用 typora 的优势是你安装完就可以开始后写了,并且预设的主题都比较漂亮。我在 emacs 或 vscode 里写完 markdown 一般都要在 typora 里修改并欣赏一下 :slight_smile: ,除了好看的另一个原因是,markdown 如果传到 github 远程仓库或者其他在线平台,从浏览器打开时用的渲染引擎也大部分也是 Mathjax, 所以如果本地用 typora 看没什么问题,浏览器打开基本也是没问题的,这是平台移植性的优势。

org mode 的优势在于,写完一段公式后,你可以在后文插入一个 pdf 某一页的链接,点开链接就在 emacs 里打开了某本教材或者论文对这段公式的详细证明或者应用场景,再在下方插入一段 python 代码,这是对该公式的代码实现,代码给出了一些样例,执行后生成了一个 plot 展示公式的某种性质,同时该公式所在的 org heading 又是另外一个知识点的 roam 的反向链接,可以随时跳过去,用带拼音的 fuzzy search 搜索某个关键词,定位到某个快要忘记的相关内容上 …

9 个赞