ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Typora公式写作实战:从触发逻辑到导出排障

Typora公式写作实战:从触发逻辑到导出排障

我现在的公式写作主力就是 Typora。过去要渲染数学公式,我总得切到 LaTeX 编辑器或 Word 里折腾,后来换成 Typora 之后,发现它对公式的支持其实比大多数人以为的要完整:行内公式、独立公式块、公式编号、PDF 导出都没什么问题。这篇文章就是一份关于 Typora 公式的“实战记录”,从最基础的触发方式,到常用的 LaTeX 语法子集,再到导出和效率工具,都是我实际用过的方案。适合刚接触 Typora 公式的用户,也适合已经写过一些公式但总在细节上卡住的人。

上周 A同学 就拿了个问题来找我:他在 Typora 里写$$x^2$$,页面上却只看到两个美元符号。我过去一看,他在源码模式下手敲了一整段公式,可 Typora 对这种写法的识别并不像想象中那么“智能”。这不怪他,因为 Typora 的公式功能有一个极其容易忽略的触发逻辑:块级公式最好用$$加回车生成一个专用公式块,而不是像普通文本那样在同一行里写$$...$$。搞清楚这个,才算把 Typora 公式的第一块地基打牢。

1. 从一次“不渲染”说起:Typora 公式的触发逻辑

1.1 行内公式与独立公式块的基本姿势

Typora 的公式分成两种形态。

第一种是行内公式,也就是和文字混在同一个段落里的公式。写法是用$包住 LaTeX 内容,例如$a+b=c$会渲染成行内效果。这里有个经常被忽略的前提:行内公式需要在偏好设置里手动开启,因为 Typora 默认只认公式块,不认行内数学。路径是:偏好设置 -> Markdown -> Markdown 扩展语法 -> 勾选“内联数学”(有的版本显示为“行内数学”)。没开启前,$就是一个普通美元符号,这就是很多人明明照着教程写了$x^2$却没反应的原因。

第二种是独立公式块,独占一行或一块区域,默认居中显示,字号也比行内公式大。触发方式是输入$$后直接按回车,Typora 会自动生成一个公式块,里面可以写任意多行 LaTeX。也可以把$$单独放在两行之间,中间写公式源码。

很多刚从 LaTeX 或 Word 转过来的人,会下意识地把公式写成源码模式下的纯文本,比如在一行里写$$x^2$$。在 Typora 里这样写也能被识别,但前提是它已经处于一个正确的 Markdown 结构中。更稳的做法,是让公式块真正“独立成块”:要么用菜单里的“公式块”命令,要么就用$$加回车。我个人强烈建议记住这个概念,同时在偏好设置里确认一下是否已开启“内联数学”,能省掉后面一大堆怪问题。

补充一个容易混淆的点:Typora 的“Markdown 扩展语法”里还可能有“上标”“下标”选项,这里的普通文本上标下标和公式里的^、_不是一回事。如果你开了普通文本的上下标扩展,在公式外写2^3也会变成上标效果,反而容易和行内公式混淆。我一般只保留公式相关扩展,关掉普通文本上下标,这样看到^或者_出现在正文里,就知道自己多半是写错了地方。

1.2 为什么有些符号会被“吞掉”:Markdown 与 LaTeX 的冲突

Typora 是 Markdown 编辑器,Markdown 本身有一套特殊符号。公式块内部走的是 LaTeX/MathJax 处理逻辑,两者共存时,偶尔会打架。

最典型的是_。在 Markdown 普通文本里,_常被用来表示斜体或强调,但在公式里它是下标符号。如果你把公式源码直接写在 Markdown 的行内,Typora 必须先判断这段内容是普通文本还是行内公式,判断的依据就是有没有成对的$。所以在开启行内数学之后,$x_i$通常没问题;可如果你在普通文本里写了x_i,Typora 会根据扩展语法设置把_i处理成下标文本,而不是公式。很多人以为这是 bug,实际是 Markdown 语法在起作用。

另一个冲突来源是反斜杠。LaTeX 命令都靠\开头,比如\frac。在 Markdown 常规文本里,反斜杠本身需要转义才能显示;但在公式块内部,Typora 会直接按 LaTeX 处理,所以不需要给\再套一层转义。我见过有人把 LaTeX 源码贴进公式块时,把所有\都改成了\\,结果公式全部报错。贴代码前先切到源码模式看一眼,\frac就应该是单个反斜杠。

还有中文标点。公式块内部一旦出现全角逗号、全角括号,MathJax 经常会直接报解析错误,或者整块公式渲染不出来。正确做法是公式里一律用英文半角标点,中文说明文字用\text{...}包裹。这个问题在中文用户里特别常见,因为打字时随手一个中文输入法的逗号,就把整段公式毁了。

另一个很隐蔽的坑是空格。LaTeX 对大段空格是忽略的,a b会被渲染成ab,所以你想在公式里留出间距,得用专门的间距命令,比如\,、\;、\quad、\qquad。Typora 的公式块也是一样,在公式里狂按空格并不会让排版变松,反而会让源码看起来很乱。想给公式和文字之间留空隙,请在行内公式的外面控制。

2. 我在 Typora 里真正高频使用的公式语法清单

2.1 上下标、分式、根号和常见运算符

公式里最基础的就是上下标。上标用^,下标用_。注意一个关键规则:^和_后面如果只有单个字符,可以不写花括号,比如x^2;如果是一串字符,必须写成x^{22}或x_{i+1},否则只对紧挨着的那一个字符生效。这是新手最容易出错的地方,也是我每次排查别人公式时最常发现的错误。

分式用\frac{分子}{分母}。在行内公式里,\frac渲染出来的分数会比较小,想让它接近独立公式块里的标准大小,可以用\dfrac。根号用\sqrt{},开 n 次方用\sqrt[n]{}。

常见符号里,希腊字母比较好记:\alpha、\beta、\theta、\lambda、\mu、\pi、\sigma、\phi、\omega,首字母大写就变成大写形式,比如\Theta对应Θ。这些命令在 Typora 里输入时会有实时渲染,你可以一边敲一边看字母形状来确认有没有拼错。

求和、积分、连乘这类带上下限的运算符也常用:\sum_{i=1}^{n}、\int_{a}^{b}、\prod_{i=1}^{n}。在独立公式块中,上下限默认显示在符号正上方、正下方;在行内公式中,则会显示在右侧角标位置。如果你在行内也希望它们显示在正上下方,可以加\limits,比如\sum\limits_{i=1}^{n}。反过来,在块级公式中想强制放到角标,用\nolimits。这个“默认位置不同”的细节,很多人写论文时才发现不对。

其他常用运算符:\times、\div、\pm、\infty、\partial、\nabla、\in、\notin、\subseteq、\cup、\cap、\emptyset、\mathbb{R}。表示集合时,\mathbb{R}这类黑板粗体需要\mathbb命令配合大写字母。想给单个字母加粗,用\mathbf{}。想在公式里写一段普通文字,用\text{},比如\text{当 } x>0 \text{ 时}。\text{}里的空格也要自己用\或\quad控制,LaTeX 不会自动替你做。

2.2 括号自动适配和多行对齐:决定公式排版观感

直接写括号(a+b),括号大小不会随着内部内容变化。比如(\frac{a}{b})渲染出来,括号高度不够,看起来很局促。标准做法是用\left(和\right)成对出现,让括号自动适配内部高度。\left\{和\right\}则用于花括号,注意花括号本身就是 LaTeX 的保留字符,必须用\{和\},不能直接写{、}。

如果只要左侧括号,右侧不想显示,就写\left.或\right.。这个技巧在求导代入值时非常常用。比如复合函数求导,把x=0代入导数表达式时,写成\left. f'(x) \right|_{x=0},右侧会显示一个竖线,左侧没有任何括号,观感比硬写一个普通中括号强很多。

多行推导是公式写作里最有价值的部分。我推荐用aligned环境:

$$ \begin{aligned} (a+b)^2 &= (a+b)(a+b) \\ &= a^2 + ab + ba + b^2 \\ &= a^2 + 2ab + b^2 \end{aligned} $$

这个环境会把&所在的位置作为对齐点。上面的写法里,每一行的等号都会对齐到同一竖直位置。\\表示换行。特别注意:最后一行不要加\\,否则 Typora 会在公式末尾多渲染出一个空行,整个公式块看起来下面多了一条空隙。这是我在实际使用中反复踩的坑。

分段函数用cases环境:

f(x) = \begin{cases} x+1, & x \ge 0 \\ x^2, & x < 0 \end{cases}

cases环境会自动提供一个隐藏的花括号,左侧对齐,右侧两列:第一列是函数表达式,第二列是条件。条件前要写&来留出空隙。同样,最后一行不要加\\。

2.3 矩阵、行列式和推导过程的实战模板

矩阵是公式里的大类。Typora 支持matrix、pmatrix、bmatrix、Bmatrix、vmatrix、Vmatrix六种常见环境,分别对应无括号、圆括号、方括号、花括号、单竖线、双竖线。

矩阵内用&分隔列,\\分隔行。例如矩阵乘法:

$$ \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} b_1 \\ b_2 \end{bmatrix} $$

这里a_{11}的下标写法要注意花括号。如果写成a_11,渲染结果是a_1后面跟个1,不是a_{11}。

行列式用vmatrix:

D = \begin{vmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{vmatrix} = a_{11}a_{22} - a_{12}a_{21}

省略号在矩阵和推导里也很常用。横向省略号用\cdots,文字省略号用\ldots,竖排用\vdots,斜排用\ddots。写单位矩阵或大型分块矩阵时,这几个命令几乎是必用的。

我写推导段落的习惯是:一个独立公式块只放一个完整的推导链,用aligned包起来,按语义分段。比如概率里计算全概率公式:

$$ \begin{aligned} P(B) &= \sum_{i=1}^{n} P(A_i \cap B) \\ &= \sum_{i=1}^{n} P(A_i) P(B \mid A_i) \end{aligned} $$

这样阅读的人可以顺着等号一路往下看。不要一个公式块里塞十几个不相干的行,那样公式块会变得特别长,渲染和排查都不方便。Typora 对特别长的行不会自动换行,你看着像换行了,源码里其实还是同一行,很容易漏掉\\。

3. 公式编号与交叉引用:从写完到能引用

3.1 开启自动编号后的正确姿势

如果是写文档、笔记,尤其是需要给公式编号的场景,Typora 也支持。先到偏好设置里找到数学公式相关的自动编号选项并打开,开启后,每个独立公式块的右侧会自动出现(1)、(2)这样的编号。

有了编号,就可以用\label{}给公式打标签,然后在正文里引用。标签要放在公式块内部,比如:

$$ \begin{aligned} S_n &= \frac{a_1(1-q^n)}{1-q} \label{eq:sum} \end{aligned} $$

正文里用\ref{eq:sum}或\eqref{eq:sum}引用编号。\eqref会把编号括进圆括号里,更贴合论文排版的习惯。

这个功能很多人不知道,因为 Typora 的界面里没有明显的按钮,默认也不显示编号。大家都以为 Typora 只是个所见即所得的小工具,结果没想到它把 LaTeX 的交叉引用也做进来了。

自动编号的最大好处是公式顺序变化时不用手动改号。我在整理笔记时经常会在中间插入一个公式,如果所有编号都是手写的,后面全部要重排;用自动编号加\ref就完全不用管。不过要留意:引用跳转是 Typora 支持的,但导出成 PDF 后,点击引用能不能跳转到对应公式取决于 PDF 阅读器;导出成 Word 时,交叉引用通常不会保留成 Word 域,有可能变成纯文本编号,需要在 Word 里再处理。

3.2 自定义标签 \tag 的使用场景

有时候不想用全局自动编号,或者想给公式一个更人话的标号,比如(2-1)、(*重要*),可以用\tag{}直接指定公式右侧显示的标签。\tag{2-1}会显示为(2-1),\tag{...}也可以显示自定义内容。

\tag和\label可以共存。\tag{关键公式}+\label{eq:key}之后,正文里\ref{eq:key}引用的就是“关键公式”这几个字。这在写非正式笔记时很实用,比机械的数字更友好。

但我不建议在长文档里全靠手写\tag。一旦公式多了,或者你在文档中间插入了新公式,手写的2-1、2-2并不会自动重排,到时候一个个改标签反而更费时间。我的判断标准是:只是零散笔记,用\tag没关系;要形成章节化、未来还要改动的长文,用自动编号加\label更稳。

还有个小坑:\label{}的标签名不要用纯数字或带中文,尽量用eq:xxx这样的格式。虽然 Typora 对一些写法也能容忍,但标签名含中文时,部分导出路线会出现编码问题,保险起见统一用英文加冒号前缀。

4. 导出 PDF 和 Word 时,公式为什么总是变形

4.1 内置导出和 Pandoc 的分工

Typora 的导出主力是 PDF 和 Word。PDF 导出走的是 Typora 自带的打印/渲染链路,公式按你屏幕上看到的样子渲染,一般不会有大问题。真正容易出问题的是 Word 导出:Typora 本身并不直接生成 .docx,而是调用 Pandoc 来做格式转换。

所以第一条经验:想要顺畅导出 Word,先去装 Pandoc,然后在 Typora 的偏好设置里指定 Pandoc 路径,再重启 Typora。没有 Pandoc 时,你点击导出 Word 要么没反应,要么只生成一个残缺文件。

Pandoc 会把 LaTeX 公式转换成 Word 能识别的公式对象。常用语法转换得挺好,但不要指望百分之百兼容。\begin{aligned}、\begin{cases}、矩阵这些常见结构一般没问题,稀奇古怪的宏包命令、自定义命令,转换后就可能变成纯文本或者显示异常。如果你写公式时用了很多 LaTeX 风格的自定义技巧,导出前最好先试一次。

另外,Typora 导出 Word 时,中文字体和正文样式基本是能跟上的,但公式编号、交叉引用这类东西就别指望完全自动。Pandoc 会把\ref替换成对应的编号文本,但不会生成 Word 里那种可以点击跳转的引用域。这些细节,只能在 Word 里做最后的收尾。

4.2 我踩过的导出细节和现在的处理方式

我自己的公式文档导出 Word,踩过几个很具体的坑,写在这里供参考。

第一,公式内部出现生僻符号时,Word 可能显示为问号。比如空集符号,用某些变体导出后就可能乱码;换成更通用的\emptyset就没事。如果你在 Typora 屏幕上看公式一切正常,导出 Word 却缺字符,优先去把生僻命令换成更基础的写法。

第二,多行对齐的公式导出 Word 后,有时会失去对齐效果,变成几行独立公式。这是 Pandoc 转换时对aligned环境支持不完备造成的。遇到这种情况,我一般会把多行公式拆成几个独立的行内公式或单行公式,排版虽然不如原来精致,但至少能保证内容正确,也方便别人在 Word 里改。

第三,PDF 导出看起来稳定,也要注意页面边距和公式长度。如果公式块过长,Typora 可能不会把公式拆到下一页,而是整块推到下一页,留下大块空白。所以在长文档里,尽量把衍生公式按步骤拆成多个短公式块,而不是一个几十行的巨型公式。这个习惯对阅读体验和导出稳定性都有帮助。

我的处理流程是:写完文档后,先导出一次 PDF,在 Typora 里快速扫一遍所有公式是否都正常显示;如果公式里有特殊符号或复杂环境,再专门导出一次 Word 验收。两次都过了,这份文档才敢拿出去。虽然麻烦,但比起直接发给别人再被反馈“公式全乱了”,这点成本很值得。

5. 让公式输入变快的几个土办法

5.1 Typora 没有公式库,我用这几种方式补

Typora 本身没有像集成开发环境那样成熟的代码片段功能,也不存在“公式库”面板。所以如果你想每次写公式都手敲\frac{}{},要么靠肌肉记忆,要么自己想点办法。

我的第一个办法是建一份模板文件,叫“公式速查.md”,里面按类别存好我最常用的公式源码:矩阵、分段函数、多行对齐、常用符号表和若干完整例子。需要时打开模板,复制整段,再替换变量。这个方法零成本,而且模板文件本身也随着经验不断丰富。

第二个办法是用输入法的自定义短语。以常见中文输入法为例,可以把/frac设置为触发词,展开成\frac{}{},把/sqrt展开成\sqrt{}。这样在 Typora 里按几个斜杠加字母,就能直接得到 LaTeX 模板,再移动光标填内容。这个办法特别适合频繁输入同一类公式模板的人,相当于给 Typora 装了一个轻量级 snippet。

第三个办法更土一点:用系统级的文本扩展工具。比如在 Windows 上可以用 AutoHotkey,在 macOS 上可以用系统设置里的“文本替换”。原理都是你输入一个缩写,工具自动替换成完整的 LaTeX 模板。它的好处是不仅作用于 Typora,在任何编辑器里都能用。我试过把@sum替换成\sum_{i=1}^{n},实测下来输入速度提升很明显,代价是第一次配置要花点时间。

5.2 值得背下来的快捷键和优先级很高的写作习惯

快捷键方面,Typora 新建公式块的默认快捷键是 Windows/Linux 上的Ctrl+Shift+M,macOS 上的Cmd+Option+M。这个高频快捷键建议直接背下来,比每次点到菜单里再选“公式块”快得多。如果你的系统有输入法干扰,可以在 Typora 偏好设置里自定义快捷键,把它改成一个自己顺手的组合。

行内公式没有单独的快捷键,因为它就是一对$。我建议把常用的行内公式做成输入法短语,比如把某个缩写替换成$ $,然后手动移到中间输入。虽然听起来有点折腾,但真正常用之后,手速能跟得上思考。

写作习惯上,我有几条优先级很高的原则。

第一条,先搭骨架再填内容。比如要写一个分数,先敲\frac{}{},再把光标分别移动到底部和顶部填内容,而不是把整个式子想清楚了再一口气打完。这样括号不会漏配,也不会出现公式没写完就切走的情况。

第二条,所有成对结构优先用\left和\right。不管现在括号里的内容是不是简单,养成习惯之后,后面一旦把内部换成高分式,括号也不会变形。

第三条,写完一个公式块,习惯性地用一下源码模式检查。Typora 的Ctrl+/(macOS 是Cmd+/)可以在源码和渲染模式之间切换。公式不渲染时,我首先切到源码模式看三个东西:$是否配对、反斜杠是否被转义成两条、行尾是否多了一个\\。大多数问题在这三步内就能解决。

我自己的最后体会是:Typora 公式最大的魅力在于“所见即所得”,你敲完一个符号,立刻就知道对不对。这个即时反馈让我把更多精力放在理解公式本身,而不是在编辑器里反复折腾排版。只要把触发逻辑、常用语法和导出边界这三块搞清楚,它完全能撑起从课堂笔记到正式文档的绝大多数公式写作场景。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进