☰
Markdown中LaTeX数学公式全指南:语法、渲染与平台适配
2026/10/17 9:54:05 网站建设 项目流程

1. 写博客的人,为什么都躲不开数学公式

写技术博客、做项目文档、整理学习笔记,早晚都会撞上一个问题:文档里要写数学公式。

不管是机器学习里那一堆损失函数、概率分布,还是信号处理里的傅里叶变换、卷积定义,又或者是论文笔记里的推导过程,纯文本根本没法表达清楚。你总不能把公式截图贴进去,那样排版丑、缩放糊、还不好修改。更别提交付给团队协作的文档平台,一张张图片贴上去,协作修改的时候只能干瞪眼。

我自己的经历就很典型。早几年写技术分享,遇到公式基本靠截图,后来发现维护成本高到离谱:公式改一个符号,就得重新截一次图,图多了连自己都分不清哪张是哪张。换到 Markdown 写文档之后,这个问题终于有了正解——用 LaTeX 语法写数学公式,让文档系统实时渲染。

这篇文章我就把自己这几年在 Markdown 里写 LaTeX 公式的经验完整梳理一遍。从最基础的语法规则,到常用的高级技巧,再到实际编辑器和平台里的各种坑,都会涉及。适合正在写技术博客、课程作业、毕业论文或者项目文档的人来读,尤其是那些被公式排版折磨过的朋友。

先说一个核心认知:Markdown 本身不负责渲染数学公式,它只是用一套标记语法把纯文本转成结构化文档。真正干活的,是渲染引擎对 LaTeX 数学公式的支持。这个支持分两个层面,一是语法层面的解析,二是渲染层面的呈现。理解了这一点,后面遇到"为什么这个公式不显示"之类的问题,你就知道该往哪个方向排查了。

2. 先搞懂 LaTeX 数学公式的两大模式

LaTeX 数学公式在 Markdown 里的写法,按显示位置和用途分为两大类。这两类之间的区别非常简单,就是"行内"和"独占一行"的问题。

2.1 行内公式:夹在文字段落里

行内公式用单个美元符号$包裹,比如$E=mc^2$。这种模式适合在正文叙述里顺带提一个公式,让文字和公式处于同一行,不打断阅读节奏。

举个例子,正常写出来是这样:

根据质能方程 $E=mc^2$,我们可以得出能量与质量成正比。

渲染之后,"E=mc^2"就变成一个排版精致的公式,静静地躺在文字中间。

行内公式的核心使用场景是"顺手提及"。需要强调的是公式本身就是一句独立的话、或者推导过程比较长的时候,就不适合用行内模式了,那种情况应该用展示模式。

2.2 展示公式(块级公式):独占一行居中显示

展示模式用两个美元符号$$包裹,公式独占一行,居中显示。典型写法:

$$ f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$

这就是正态分布的概率密度函数。渲染之后它会单独占一行,上下留白,视觉上很清晰地告诉读者"这是一条完整的公式"。

展示模式适合三种场景:

  • 一条独立的公式,比如定理、定义、推导结论
  • 公式比较长,占一行都不够,需要换行对齐
  • 需要给公式编号引用的时候(后面会细说)

有些平台还支持用\[ \]来写块级公式,但这里统一推荐$$,因为兼容性最好,在不同渲染器之间切换不容易出问题。

2.3 两种模式的细微差别

很多人写久了会发现一个现象:同一个公式,在行内和展示模式下的渲染效果不一样。比如分式,行内模式下 $\frac{1}{2}$ 会显示成比较紧凑的样子,分子分母被压缩;展示模式下则正常大小。这是因为渲染引擎会根据模式自动调整排版尺度。

提示:如果发现行内公式里的分数、求和符号显示太小,不用慌,这是正常的。有些平台支持在行内模式下强制用\displaystyle来恢复大尺寸排版,但这个命令在部分渲染器里可能不生效,属于平台差异,后面排查问题的时候会专门讲。

3. 高频语法全掌握:从上下标到矩阵

LaTeX 数学公式的语法体系非常庞大,但日常写技术文档其实用不到全部。把最常用的那批语法练熟,覆盖 80% 的场景绰绰有余。这一节我把高频语法按功能分类,配上实际示例。

3.1 上下标:最基础的能力

上标用^,下标用_。如果上下标内容多过一个字符,必须用花括号{}括起来。

$a^2$ 渲染为 a² $a_{i+1}$ 渲染为 a下标(i+1) $e^{x^2}$ 渲染为 e 的 x² 次方(嵌套上标)

注意$a^2$和$a^{2}$效果一样,但$a^10$就出问题了,它会被理解为 $a^1$ 然后跟一个 0,变成 a¹0。这种细节是新手最容易踩的坑。

3.2 分式与根式

分式用\frac{分子}{分母},根式用\sqrt{}。

$\frac{a+b}{c+d}$ — 分式 $\sqrt{x^2+1}$ — 平方根 $\sqrt[3]{x}$ — 三次方根 $\sqrt{\frac{a}{b}}$ — 分式套根式

分式是可以无限嵌套的,复杂公式往往就是多个基础语法嵌套组合的结果。

3.3 求和、积分、极限

这类"大型运算符"在展示模式下表现最好,符号上下会带上限和下限。

$\sum_{i=1}^{n} i$ — 求和 $\int_{a}^{b} f(x) dx$ — 定积分 $\lim_{x \to 0} \frac{\sin x}{x}$ — 极限 $\prod_{i=1}^{n} x_i$ — 连乘

这里有一个小技巧:如果想让上下限出现在运算符的正上方和正下方(而不是旁边),展示模式默认会这样做;行内模式则会压缩到侧面,这是排版规范,不必强行修改。

3.4 希腊字母与常用符号

希腊字母太多,不用刻意背。用到的时候查表就好,核心是记规律:英文名首字母大写得到大写希腊字母,小写就是小写希腊字母。

\alpha, \beta, \gamma, \delta, \epsilon, \theta, \lambda, \mu, \pi, \sigma, \omega \Gamma, \Delta, \Theta, \Lambda, \Pi, \Sigma, \Omega

其他常用符号:

\pm 正负号、\times 乘号、\div 除号 \leq 小于等于、\geq 大于等于、\neq 不等于、\approx 约等于 \infty 无穷大、\partial 偏导数符号、\nabla 纳布拉算子 \to 箭头、\rightarrow 右箭头、\leftrightarrow 双箭头

3.5 矩阵:其实没那么可怕

矩阵写法用\begin{matrix} ... \end{matrix}包裹,行之间用\\分隔,元素之间用&分隔。

$$ \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix} $$

这里matrix换成bmatrix就是带方括号的矩阵,换成pmatrix就是圆括号的,vmatrix是竖线(行列式),Vmatrix是双竖线(范数)。类型不同,语义也不同,写的时候按需选择。

3.6 多行公式对齐

推导过程里经常需要多行公式按等号对齐。用\begin{aligned}配合&和\\实现。

$$ \begin{aligned} f(x) &= (x+1)^2 \\ &= x^2+2x+1 \end{aligned} $$

关键在于等号前面加&,这告诉渲染引擎对齐点在哪里。每行结束用\\换行。

3.7 括号自适应大小

写公式经常遇到括号里的内容特别高,比如分式套括号,普通括号( )就会显得很小气。解决办法是用\left(和\right),渲染引擎会自动调整括号高度。

$(\frac{a}{b})$ — 括号小,不好看 $\left(\frac{a}{b}\right)$ — 括号自动变大,好看

注意:\left和\right必须成对出现。如果只需要一边括号,另一边可以用\left.或\right.(点号表示空心、不可见)。比如分段函数的大括号:

$$ f(x) = \left\{ \begin{array}{ll} x & x > 0 \\ 0 & x = 0 \\ -x & x < 0 \end{array} \right. $$

4. 编辑器与平台的适配实战

语法掌握了,下一步就是在哪写的问题。不同平台对 LaTeX 公式渲染的支持程度不一样,甚至同一个语法在不同平台的表现都不一样。这一节我把常见场景逐个过一遍。

4.1 本地编辑器:最自由的选择

如果你用 VS Code 写 Markdown,推荐安装 Markdown All in One 插件配合 MathJax 渲染。写完公式,预览窗口里直接显示渲染结果。

VS Code 里的核心配置是在settings.json里启用数学公式渲染,关键项大概是:

"markdown.math": { "engine": "mathjax" }

具体配置路径可能随版本调整,但方向就是这个方向——把数学引擎打开。默认不开的话,公式在预览里就是一坨源码。

Typora 这类所见即所得编辑器就更友好了,写完公式立刻就在光标位置渲染出来,写错了马上能发现。这类编辑器通常是内置了 MathJax 或 KaTeX 引擎,不需要额外配置。

4.2 在线文档与博客平台

主流技术博客平台基本都支持$和$$语法。但有一个重要差异:有的平台用 MathJax,有的用 KaTeX,两者的语法兼容程度有细微差别。KaTeX 渲染速度更快,但对部分 LaTeX 命令支持不全;MathJax 性能稍慢,但几乎全兼容。

遇到"在 A 平台正常,到 B 平台不显示了"的情况,大概率是语法用了 KaTeX 不支持的扩展命令。解决办法是先用保守语法写,别用冷门宏包。

4.3 Markdown 与 LaTeX 混排的转义陷阱

这是实践中很隐蔽的一个坑:Markdown 解析器会先处理 Markdown 语法,再处理 LaTeX 语法。如果公式里出现了下划线_,Markdown 会把它当成斜体标记。比如:

$x_i$ 在某些平台会被解析成 $x<i>$,导致显示异常。

解决办法是给行内公式两侧留空格,或者在公式内部对特殊字符做处理。有些平台其实已经做了保护,公式内容不会被二次解析,但不是所有平台都这样。保险的做法是行内公式写成$x_i$时确保两端不要紧贴着普通文本。

4.4 换行与空格的坑

LaTeX 公式内部通常忽略多余空格,因为排版引擎自己会处理间距。你可能写了十几个空格,渲染出来还是那个样子。想要公式内强制加空格,用\,或\;或\quad。

换行方面,公式内部用\\换行,而不是普通回车。很多新手在$$...$$里直接按回车,以为能换行,结果渲染出来全挤在一起。记住:展示模式内换行必须显式用\\。

5. 公式编号与交叉引用:文档进阶标配

如果你的文档不只是给自己看,而是正式的技术文档、论文、实验报告,公式编号就绕不开。没有编号的时候,文中只能写"根据上面那个公式",有编号就能写"根据式 (3.2)"。高下立判。

5.1 手动编号方式

最朴素的编号方式是自己往公式后面加编号文字:

$$ f(x) = ax + b \tag{3.1} $$

\tag{}是 LaTeX 原生的命令,渲染出来编号会出现在公式右侧。这个方式的优点是简单通用,几乎所有渲染器都支持。

5.2 自动编号与 label 引用

一些完整支持 LaTeX 数学环境的渲染器支持\begin{equation}自动编号:

$$ \begin{equation} E = mc^2 \end{equation} $$

配合\label{eq:mass}可以交叉引用:写\ref{eq:mass}就能自动显示公式编号。

但这里必须说句公道话:很多 Markdown 渲染器对equation环境的支持并不可靠,自动编号功能经常掉链子。稳妥的做法是用\tag{}手动管理编号。虽然麻烦一点,但至少在所有平台上的表现是一致的。

5.3 多公式共用一个编号

有时候一个编号对应一组公式,比如联立方程组。这样写:

$$ \begin{aligned} a_1 x + b_1 y &= c_1 \\ a_2 x + b_2 y &= c_2 \end{aligned} \tag{2.1} $$

这一组的每个公式都算整体,渲染出来只显示一个编号,居中或靠右,看平台习惯。

6. 让公式更漂亮的高级技巧

把基础语法掌握之后,你可能不满足于"能显示"而是想"显示得好看"。这一节分享几个我在长期实践中觉得最有用的排版技巧。

6.1 用 \text{} 在公式里插入文字

公式里需要写中文或者普通文字说明的时候,直接写很可能渲染不正常。正确做法用\text{}包裹:

$$ S = \int_{0}^{1} f(x) \, dx \quad \text{其中 } f(x) \text{ 为分布函数} $$

注意\text{}里的中文需要渲染器支持中文字体,个别平台可能不支持中文放在\text{}里,这种情况只能把中文拿出来放到公式外面。

6.2 间距微调:公式的美学细节

公式内部默认间距通常是合理的,但嵌套复杂之后可能出现"挤在一起"的感觉。常用的间距命令:

\, 小间距(1/6 em) \: 中等间距(2/9 em) \; 大间距(5/18 em) \quad 大空格(1 em) \qquad 超大空格(2 em)

实际经验:积分号后面、微分符号前、以及不同数学对象之间,适当加\,会让公式呼吸感强很多。

6.3 分段函数的规范写法

分段函数是文档高频需求,推荐用\begin{cases}环境:

$$ |x| = \begin{cases} x & \text{if } x \ge 0 \\ -x & \text{if } x < 0 \end{cases} $$

cases环境会自动在左侧生成大括号,每一行默认是"数学内容 +&+ 条件"的结构。这个环境兼容性很好,大部分渲染器都支持。

6.4 向量、粗体、黑板体

向量的写法有几种流派:带箭头\vec{a},粗体\mathbf{a},或者黑板体\mathbb{R}(表示实数集)。

$\vec{v}$ — 向量箭头 $\mathbf{W}$ — 粗体矩阵 $\mathbb{R}^n$ — n 维实空间 $\mathcal{L}$ — 花体(常用于损失函数、拉格朗日量)

不同字体有不同语义,写论文、写书的人要特别留意。

6.5 公式中的省略号与上下组合

写长公式经常需要省略号和上/下划线:

\ldots 底部省略号(..., \cdots 居中省略号(⋯) \overline{x} 上横线(均值), \underline{a} 下横线 \overbrace{a+b}^{n} 上大括号, \underbrace{a+b}_{n} 下大括号

均值符号\bar{x}和\overline{x}的效果有细微差别,前者是把单个字符标记出来,后者是一整段上横线。做统计相关文档,这个区别很常见。

7. 公式渲染不了?这里有一份实战排查手册

写公式最难受的就是:语法看着没问题,渲染出来却不是预期效果。遇到这种情况,先别急着怀疑人生,按照下面的顺序排查。

7.1 检查是否处于数学环境

这是第一优先级。$...$和$$...$$必须严格成对出现。少了一个$,整个文档的公式渲染可能都会乱掉。多了一个,也不行。

一个常见场景:写金额的时候用了$符号,比如价格是 $5,渲染引擎会尝试把后面的内容当成公式,结果莫名其妙。

注意:如果你的文档主题偏商业或金融,经常要写货币符号,建议把美元符号前面加反斜杠转义:\$5。或者干脆换用"5美元"这种表述,一劳永逸。

7.2 检查花括号是否匹配

复杂公式嵌套多层花括号,数错一个层级就能让整个公式解析失败。验证方法是把公式内容复制到支持 LaTeX 的本地编辑器里,肉眼逐个检查{}的配对。

自己写代码的时候,编译器会帮你查括号配对。但 Markdown 公式渲染通常不会给那么友好的错误提示,经常只是"不显示"或者"显示出一段源码"。养成写完公式就数一遍括号的习惯,能省很多时间。

7.3 检查是否用了渲染器不支持的命令

前面提过 MathJax 和 KaTeX 的兼容性差异。常见的不兼容命令列举几个:

  • \begin{align}环境在部分 KaTeX 版本里支持不佳,用aligned替代
  • 部分冷门宏包如amsmath里的高阶命令,在网页端可能不支持
  • \mathbb类字体在个别主题里渲染异常

一个可靠的策略是:优先用基础 LaTeX 语法,即 LaTeX 核心自带的命令和环境。那些需要额外引宏包的命令,在纯 Markdown 环境里能不用就不用。

7.4 检查是否与 Markdown 解析冲突

前后有特殊字符时,比如公式后面紧跟一个中文字符,某些平台不识别,需要在公式和文字之间加空格:

正确:$a+b$ 是公式 错误:$a+b$是公式

这不是渲染引擎的 bug,而是 Markdown 解析的边界判断问题。边界判断规则因平台而异,统一加空格是最保险的做法。

7.5 预览不刷新 / 缓存问题

如果你用的是带实时预览的编辑器,公式修改后不刷新是常见状况。VS Code 里可以强制关闭再打开预览窗口,或者触发一次文件保存,让插件重新解析。在线博客平台通常要等重新渲染,改完公式保存后等几秒再看。

7.6 排查速查表

现象可能原因快速处理
公式代码原样显示未启用数学渲染打开渲染引擎相关配置
只显示部分公式$或$$数量不对检查配对
公式显示但布局怪行内/展示模式误用长公式改用$$
括号大小不匹配用了普通括号包围分式改用\left\right
某平台显示异常语法太冷门换成基础语法
公式内中文乱码\text{}字体不支持把中文移到公式外

8. 从"能写公式"到"高效产出公式"的效率心法

写数学公式也讲究效率。同样写一篇带二十个公式的博客,有的人两小时搞定,有的人搞一下午。差别不全在速度,而在于有没有一套顺手的工作流。

我的习惯是这样:

先手写草稿。没错,复杂公式先在纸上或者草稿文件里把结构画出来,搞清楚哪些是上下标、哪些是分式、有没有嵌套矩阵。直接进编辑器写,容易写到一半发现结构错了,推倒重来。

然后从外层往内层写代码。先写最外层的$$和大的环境结构,比如\begin{bmatrix}先写上,再往里面填内容。这样做的好处是括号配对在大框架里更可控。

最后再统一调整间距和排版细节。基础内容没问题了,再处理\,、\quad这些美化的东西。别一开始就纠结空格,绝对浪费时间。

还有一个真心话:不要背语法表,要用会语法表。公式语法的规律性很强,写多了自然就熟了。真正需要背的,其实是少数几个特殊命令,比如\left.这种不常用但关键时刻救命的冷门知识。

9. 一些实用扩展:不只是公式

LaTeX 数学公式在 Markdown 里的能力边界,比很多人想象的要大。除了标准公式,还能做这几个扩展用途。

9.1 化学方程式

如果你写化学相关的内容,可以用\ce{}语法结合mhchem宏包,但多数 Markdown 渲染器不支持。退而求其次,用基础语法手动拼:

$$ 2H_2 + O_2 \xrightarrow{\text{点燃}} 2H_2O $$

\xrightarrow{文字}能让文字标注在箭头上方,这个命令在多数渲染器里都能用。

9.2 算法伪代码

有些 Markdown 平台支持用公式语法拼简单伪代码结构,虽然不推荐这样做,但在无其他选择时能应急。更多情况下还是建议用代码块配合markdown的代码高亮来呈现伪代码,公式语法只用来写其中的数学式子。

9.3 表格里的公式

Markdown 表格单元格里同样可以放行内公式。对宽度比较敏感,表格列宽有限,长公式会被挤压换行,这时可以把公式简化,或者把表格拆开。

| 名称 | 公式 | 说明 | | --- | --- | --- | | 均值 | $\bar{x}$ | 样本均值 | | 方差 | $s^2$ | 样本方差 |

这种表格式呈现,在对比不同公式的场景下非常直观。

9.4 用 HTML 与 CSS 辅助公式排版

部分平台允许在 Markdown 里混写 HTML 标签。如果你需要控制公式的对齐方式、字体大小或者颜色,可以借助 HTML 包裹:

<div style="text-align: center; font-size: 1.2em;"> $$ E = mc^2 $$ </div>

但注意,不是所有平台都渲染 HTML 内联样式,GitHub 上是部分支持的。写之前先确认平台的 HTML 支持策略,别写完才发现不生效。

10. 自己搭建文档站时,公式渲染方案怎么选

如果你不满足于用现成平台,而是自己搭博客、搭文档站,公式渲染方案就需要提前设计了。技术选型决定了后面写公式的体验上限。

10.1 核心选型:MathJax vs KaTeX

MathJax 和 KaTeX 是目前两个主流方案,两者的取舍我在前面简单提过。这里展开说:

  • MathJax:功能最全,几乎支持所有 LaTeX 命令。缺点是渲染速度慢,页面公式多时会有明显的延迟感。
  • KaTeX:由社区驱动的极速渲染方案,体积小启动快,移动端体验好。缺点是部分命令不支持,有兼容性边界。

如果是个人博客,公式数量一般不多,用哪套都好说。如果是教学平台、文档中心,公式可能大量出现,KaTeX 的性能优势就很明显。

10.2 静态网站生成器的集成路径

主流静态站生成器基本都有对应的 Markdown 数学插件。配置路径大致相同:让 Markdown 处理器保留公式代码,再挂载渲染引擎。

以常见的生成器为例,需要注意的点是:默认的 Markdown 解析器可能会把$当成普通符号处理,需要关闭或绕过 Markdown 对数学符号的干涉。这个坑在不同生成器里都有,只是触发条件不一样。

如果不想折腾,可以自己在主题模板里引入 MathJax 的 CDN 脚本,并用自定义 JavaScript 配置公式渲染范围。这个方案的灵活度最高,但需要一定的前端基础。动手能力强的朋友可以试试。

10.3 不需要后端渲染?也可以

还有一个思路:本地把公式直接渲染成 SVG 或图片,随文档一起发布。好处是目标读者打开页面就能看到公式,完全不需要加载 JavaScript。缺点是公式失去可选中、可复制的文本属性,后续维护也不方便。

如果你交付的是打印版文档或者固定格式的 PDF,这个思路反而更好用。我自己的经验是:内部技术文档用实时渲染,交付给用户的最终文档用静态渲染。两者并行,效果最好。

10.4 建议的最低配置清单

如果你准备自己搭,我建议至少具备这几个配置项:

  • 设置$和$$为数学环境标记
  • 开启\tag{}命令支持,用于公式编号
  • 保留\text{}命令,支持公式内文字
  • 配置好中文支持,确保中文公式注释不乱码
  • 关闭或调整 Markdown 对_的斜体解析,避免公式干扰

这几项弄好,日常写公式的体验基本上就顺了。

几点实在话

写 Markdown 数学公式这件事,难度曲线其实很低。最开始的语法学习只需要半小时,难点在于遇到各种渲染差异时能快速定位问题。这只能靠多写、多踩坑、多总结,没有捷径。

我个人在实际操作中最深的体会是:保持公式语法的"可移植性"比追求"花哨效果"重要得多。同一个文档,发送到不同平台、生成不同格式,基础语法始终稳稳当当的,而那些冷门高级命令很可能今天就工作了,明天换一个渲染器就崩了。这就像写代码一样,可维护性高于炫技。

最后再分享一个习惯:写完一篇带数学公式的文档后,我会花十分钟做一次"跨平台验证"——把 Markdown 源码分别丢进主流的预览环境里看一眼,确认公式渲染正常。这套流程看起来慢,但能避免很多发布后的尴尬。公式是你的文档专业性的直接体现,值得多花这几分钟去确认。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询