
用 Markdown 写带数学符号的内容最尴尬的不是不会写而是写完发现它不渲染。我见过太多人把\frac{a}{b}直接敲进笔记预览出来还是一串反斜杠然后转头去截图贴在文档里——半年后回头想改一个下标只能重新截一张。Markdown 的数学公式和符号这件事表面上是记几个 LaTeX 命令的问题实际上牵扯到渲染引擎方言、分隔符开关、行内基线对齐、公式编号、跨格式导出一整条链路任何一环出问题都会让你前功尽弃。这篇内容把这件事从头到尾捋一遍。核心围绕 Markdown 里的数学符号与公式写法展开为什么同样的写法换个平台就废掉行内公式和中文混排时基线为什么会错位矩阵、分段函数、多行对齐这些稍微复杂一点的排版怎么落地最后成稿要导成 PDF 或 Word 时公式怎么才能不丢。写技术笔记、论文草稿、教学讲义、项目设计文档的人都能用上新手可以当成速查手册直接抄写过几年的老手也能从排查和导出那两节里挑几条细节回去改自己的模板。我自己的习惯是符号速查表常驻编辑器侧边栏遇到没见过的符号先查再写绝不凭记忆硬敲。下面按为什么这样设计—环境怎么配—符号怎么写—排版怎么调—成稿怎么导出—出错怎么查的顺序展开每一节都能独立拎出来用。1. 先说清楚Markdown 里的公式为什么容易翻车1.1 三条技术路线的取舍纯文本字符、图片、LaTeX把公式放进 Markdown实际只有三种做法每一种都有自己的舒适区和死穴。第一种是直接用 Unicode 字符凑比如αβ∑∫√≈≤。这条路的好处是零依赖任何编辑器、任何聊天窗口、任何邮件客户端打开都是原样不会因为渲染器缺失而变成乱码。但它的表达能力极其有限分数写不出来只能写成a/b上下标只能靠 Unicode 里那几个可怜的字符²³₁硬充一旦是x^{n1}这种复合形式就彻底没辙矩阵、分段函数、多行对齐更是想都别想。它适合的场景只有一种——一句话里插一个简单符号且你确定接收方不会用渲染器。第二种是截图贴图片。这是最省事也最贵的做法。省事在于所见即所得任何平台都能显示不依赖对方有没有数学渲染能力贵在于它的代价是复利式的。图片进版本控制后没法做差异对比改一个下标要重新截图文件体积膨胀全文搜索搜不到深色模式下列表会被反色搞得难看论文排版时缩放还会糊。如果这份文档只活三天图片没问题如果要活三年图片就是负债。第三种是写 LaTeX 表达式。它本质上是纯文本所以能被 Git 追踪、能全文检索、能跨平台复用改一个字符就是改一个字符。代价是它必须依赖渲染器平台认识它它就是漂亮的数学排版平台不认识它它就是一堆反斜杠。这也正是大多数人卡住的地方。方案可检索可版本对比表达复杂公式依赖渲染器适合场景Unicode 字符是是几乎不能否单符号、邮件、聊天图片截图否否完全能否一次性交付、PPTLaTeX 表达式是是完全能是长期维护的技术文档我的判断标准很粗暴这份内容我三个月内会不会再改会改就写 LaTeX不改才考虑截图。1.2 渲染引擎决定了你能用哪些语法而不是你想用哪些同一个 LaTeX 表达式在不同平台表现不一样根因是底层渲染引擎不同。目前主流就两个KaTeX和MathJax。KaTeX 的设计目标是快走同步渲染页面加载时公式就已经排好了不会有先出现源码再闪一下变成公式的跳变感。代价是它只实现了 LaTeX 数学语法的一个子集一些依赖宏包的高级写法它不认。MathJax 走的是完整路线AMS 数学环境、自动编号、自定义宏基本都能覆盖但渲染是异步的首次加载会有明显的延迟和重排。这个差异带来的实际后果是你在 A 平台写顺手的写法搬到 B 平台可能直接报红或者原样显示。常见的分界线有这么几条自动编号和交叉引用MathJax 配好之后支持\label配合引用KaTeX 基本只支持手动\tag且部分平台会把\tag屏蔽掉。某些多行环境像split、multline这类支持的广度不一aligned和gathered的兼容性明显更好。自定义宏\newcommand在多数托管平台上是被禁用的因为怕你定义出影响全局的东西。中文\text{}里放中文部分渲染器会因为字体缺字显示成方块。再说分隔符方言这是新手最容易踩的一层。行内公式常见写法有$...$和\(...\)块级公式有$$...$$和\[...\]。不同的 Markdown 处理器对这几个的开关默认值不一样。有的平台为了不误伤金额比如$100默认关掉了单美元行内公式只认$$。有的平台反过来只认\(...\)不认单美元。注意GitHub 系的渲染器只认$...$、$$...$$和围栏代码块里的math语言标记不认\(...\)和\[...\]。如果你的文档主要托管在这类平台上全文统一用美元符号别混着写。理解了这一层后面所有的为什么我这里不渲染就都有了解释框架要么是引擎不支持这个语法要么是分隔符开关没打开。这两条占了公式故障的八成以上。2. 环境准备让编辑器和平台认得你的公式2.1 编辑器与插件怎么选看你的交付形态选工具这件事别跟风先问自己一句话最终这份东西交付给谁看交付形态决定了工具形态。如果你写的东西最终要变成网页或提交到代码仓库那就用 VS Code 这类编辑器装数学预览插件写作时按CtrlShiftV部分平台是CtrlK再按V打开预览窗口边写边看。这类编辑器的优势是纯文本、和 Git 天然合得来缺点是所见即所得程度低你得习惯左右分栏。如果你只是给自己做知识库那用本地笔记类工具更舒服它们的数学渲染是内置的输入即时生效不用折腾配置。缺点是导出链路往往被工具锁死格式转换时容易掉东西。如果你做的是数据分析或教学演示Jupyter 系的 notebook 值得优先考虑。它的 Markdown 单元格原生支持$...$和$$...$$公式和代码结果放在一起讲解类内容非常顺。顺带说一个高频问题Jupyter 本身没有内置目录功能需要靠扩展插件来生成可点击的目录这在写长笔记时几乎必装。场景推荐形态公式支持特点主要短板代码仓库、技术博客VS Code 系编辑器 数学预览插件依赖插件需手动开开关需要配置中文排版一般个人知识库本地笔记工具内置渲染开箱即用导出格式受限数据/教学笔记Jupyter 系与代码混排天生一体长文组织弱需装目录扩展一次性分享在线协作文档部分内置部分需外部插件平台锁定迁移成本高还有一个容易被忽略的坑浏览器剪藏类插件把网页转成 Markdown 时公式经常被切碎。网页上的公式在 HTML 里往往是几十个嵌套标签拼出来的转 Markdown 时要么整体丢掉要么被拆成一段段零散字符。所以从网页搬运公式别指望一键转换准备好手动返工。2.2 三个必须确认的配置项分隔符、换行、渲染开关环境搭好之后有三件事必须动手确认否则后面全是玄学问题。第一件行内公式的分隔符开关。绝大多数我写了$x$但它原样显示的问题都是因为这个开关默认关闭。很多渲染器出于防止误伤金额的考虑默认只开$$你需要显式打开单美元行内模式。VS Code 系的配置大致是这个形状注意键名以你所装插件的说明为准不同插件命名差异很大{ markdown.preview.breaks: true, markdown.extension.math.enabled: true, markdown.extension.katex.macros: {} }打开之后立刻会带来一个新的风险文本里的美元符号会被误当成公式起止符。比如你写预算是 $100 到 $200 之间两个美元之间的内容会被整段当成数学模式吃掉排版瞬间崩坏。规避方式是在正文里对美元符号做转义写成\$或者干脆把金额写成100 美元这种中文表述从源头绕开。第二件换行的语义。Markdown 里换行和分段是两回事。单个回车在多数解析器眼里只是空格想强制换行有三种做法行尾留两个空格再回车、行尾加反斜杠再回车、或者直接写 HTML 换行标签。这是段落层面的换行跟公式内部换行完全是两个概念——公式里换行要用\\这是 LaTeX 的语法跟 Markdown 无关。很多人卡在这里是因为他把公式不换行和文字不换行当成同一个问题去查越查越乱。第三件确认代码块里的美元符号不被解析。这一点在写教程时尤其重要。你在围栏代码块里演示$x^2$如果渲染器把代码块里的内容也当公式解析读者复制到的就是渲染结果而不是源码。标准行为是代码块内不解析数学但总有实现不严谨的平台会出问题所以发布前一定用预览窗口实机看一遍。2.3 一个便宜的验证手法配置完之后别急着写正文先花两分钟做一次冒烟测试。写四行内容一行行内公式、一行块级公式、一行带上下标的分式、一行矩阵。如果这四行都能正确渲染说明环境基本没问题如果其中某一行失败问题范围就锁死在具体语法上而不是环境上。这个习惯能帮你省下大量到底是环境坏了还是我写错了的纠结时间。3. 常用数学符号速查从上下标到矩阵这一节是速查表性质的内容我把它按使用频率和难度分成几组。建议你在自己的笔记工具里建一个符号速查页面把下面这些原样贴进去以后写公式直接复制比记命令靠谱。3.1 基础构件上下标、分式、根式与括号上下标是最基础也最容易出错的一环。单字符上下标可以直接连着写但多字符的上下标必须用花括号包起来这是新手最高频的错误来源x^2 % 上标 x^{n1} % 多字符上标必须加花括号 x_1 % 下标 a_{i,j} % 多字符下标 x_i^2 % 上下标同时存在 {}^{14}\text{C} % 左上标比如同位素如果你把x^{n1}写成x^n1渲染出来是x 的 n 次方再加 1意思完全变了。这类错误在数学上是致命的不是排版瑕疵。分式的标准写法是\frac{分子}{分母}它会根据所处环境自动伸缩大小。在行内公式里分式会被压得很扁看起来和周围文字不协调这时候可以用\tfrac强制用文本尺寸或者干脆写成斜杠形式a/b。反过来在大段推导里想让某个分式显得更醒目可以用\dfrac强制用展示尺寸。连分式用\cfrac它不会像\frac那样越套越小\frac{ab}{c-d} \dfrac{\partial u}{\partial t} \cfrac{1}{1\cfrac{1}{1x}}根式的写法是\sqrt{x}开 n 次方写成\sqrt[n]{x}那个方括号里的数字是可选参数\sqrt{x^2y^2} \sqrt[3]{8}2括号是另一个细节密集区。直接写圆括号在简单场景够用但只要内容稍微高一点比如里面有分式括号就显得太矮包不住。解决办法是用伸缩括号\left( \frac{a}{b} \right) \left[ \frac{a}{b} \right] \left\{ \frac{a}{b} \right\} \left\lvert x \right\rvert % 绝对值 \left\lVert \vec{v} \right\rVert % 范数注意\left和\right必须成对出现只写一个会直接报错。如果确实只需要一边另一边要写成\right.或\left.那个点号表示这边不需要符号但我要配对。如果不想让括号自动伸缩也可以手动指定尺寸从小到大是\big、\Big、\bigg、\Bigg。什么时候用手动当你希望整篇文档的括号尺寸保持一致、不被内容高低牵着走的时候。3.2 希腊字母、关系符、集合与逻辑符号希腊字母是理工文档的日常。这里有个必须强调的点同一篇文档里符号的写法要统一。因为 LaTeX 里有些希腊字母有两个视觉上不同的版本比如\epsilon和\varepsilon、\phi和\varphi、\theta和\vartheta。你如果在这一段用前者、那一段用后者读者会以为这是两个不同的量。小写写法大写写法α\alphaΓ\Gammaβ\betaΔ\Deltaγ\gammaΘ\Thetaδ\deltaΛ\Lambdaε\epsilon/\varepsilonΠ\Piθ\thetaΣ\Sigmaλ\lambdaΦ\Phiμ\muΨ\Psiπ\piΩ\Omegaσ\sigma——φ\phi/\varphi——ω\omega——需要留意的是大写希腊字母里有一部分长得和拉丁字母一模一样比如\Alpha就是 A这类写法在 LaTeX 里通常不提供直接用大写拉丁字母即可。关系符和运算符这一组日常出场率最高的是这几个a \leq b \quad a \geq b \quad a \neq b a \approx b \quad a \equiv b \quad a \sim b a \propto b \quad a \ll b \quad a \gg b a \perp b \quad a \parallel b集合与逻辑运算x \in A \quad x \notin A A \subset B \quad A \subseteq B \quad A \supset B A \cup B \quad A \cap B \quad A \setminus B \emptyset \quad \forall x \quad \exists y \quad \nexists z \neg P \quad P \land Q \quad P \lor Q P \implies Q \quad P \iff Q箭头这一组经常被忽略但在描述映射、极限、变换时离不开f: X \to Y x \rightarrow 0 A \Rightarrow B \quad A \Leftarrow B \quad A \Leftrightarrow B x \mapsto x^2 f \uparrow \quad f \downarrow数集符号用黑板粗体写法是\mathbb{}\mathbb{N} \quad \mathbb{Z} \quad \mathbb{Q} \quad \mathbb{R} \quad \mathbb{C}还有一组装饰符用来标注向量、估计量、平均值在统计类文档里几乎是刚需\vec{v} \quad \hat{\theta} \quad \bar{x} \quad \tilde{y} \dot{x} \quad \ddot{x} \overline{AB} \quad \underline{z} \overbrace{ab}^{n} \quad \underbrace{ab}_{n}3.3 大运算符、函数名与微积分写法这一组是写推导过程时的高频区。先说要害函数名一定要用带反斜杠的命令形式。你直接写sin x渲染出来是三个斜体字母 s、i、n 相乘写\sin x渲染出来才是正体的函数名。这个差别在专业读者眼里非常明显。\sin \cos \tan \cot \sec \csc \arcsin \arccos \arctan \log \ln \exp \max \min \sup \inf \lim \liminf \limsup \det \dim \gcd \ker \deg大运算符指的是求和、连乘、积分、极限这一类带上下限的符号\sum_{i1}^{n} a_i \prod_{i1}^{n} a_i \int_{a}^{b} f(x)\,dx \iint_{D} f(x,y)\,dx\,dy \oint_{C} \vec{F}\cdot d\vec{r} \lim_{x \to 0} \frac{\sin x}{x} 1实操心得\sum、\int这类符号在行内公式里会把上下限挤到右下角非常难看。如果这个式子比较重要就把它提成独立的块级公式如果必须行内至少要接受它的视觉效果打了折扣。微积分里的微分符号有两条常见路线。一种是直接把 d 当变量写渲染成斜体另一种是用\mathrm{d}或者\text{d}写成正体。学术期刊对这两者要求不一关键是一篇文档里只能选一种别一段斜体一段正体。\frac{dy}{dx} \frac{\partial f}{\partial x} \frac{\partial^2 u}{\partial x \partial y} \nabla f \Delta x \mathrm{d}u举个完整例子把一元二次方程的求根公式写出来x \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}再比如最小二乘的解析解这个式子在数据类笔记里出现频率极高\hat{\boldsymbol{\beta}} (X^{\mathsf{T}} X)^{-1} X^{\mathsf{T}} y海伦公式求三角形面积是几何讲义里的常客S \sqrt{p(p-a)(p-b)(p-c)}, \quad p \frac{abc}{2}排列组合里的两个计数符号写起来也各有讲究A_n^k \frac{n!}{(n-k)!} C_n^k \binom{n}{k} \frac{n!}{k!\,(n-k)!}用\binom{n}{k}写出来的组合数是标准的双层括号形式比手写上下标对齐好看得多这是排版规范问题不是口味问题。3.4 矩阵、分段函数与多行对齐矩阵用matrix系列环境外面配不同的括号就得到不同外观\begin{pmatrix} a b \\ c d \end{pmatrix} \begin{bmatrix} a b \\ c d \end{bmatrix} \begin{vmatrix} a b \\ c d \end{vmatrix}pmatrix是小括号bmatrix是方括号vmatrix是竖线行列式。行与行之间用\\分隔同一行内的元素用分隔。元素多起来之后建议在源码里手动对齐的位置虽然渲染结果不受影响但你自己维护的时候会舒服很多。分段函数用cases环境它自带一个左侧大括号但注意这个括号不会随内容高度自动伸缩如果每个分支都很高需要改用\left\{配合array手动搭f(x) \begin{cases} 1, x 0 \\ 0, x 0 \\ -1, x 0 \end{cases}多行对齐是写推导过程的核心技能用aligned环境标出对齐位置\\换行\begin{aligned} (ab)^2 (ab)(ab) \\ a^2 ab ba b^2 \\ a^2 2ab b^2 \end{aligned}这里的意思是第二个及以后的等号要和第一个等号对齐视觉上所有等号排成一列读起来非常顺。如果你想让多个等式都对齐在等号上每一行都写。一个真实例子把贝叶斯公式展开写清楚P(A \mid B) \frac{P(B \mid A)\,P(A)}{P(B)}条件概率里的竖线要用\mid它会自动处理左右间距。如果你直接敲键盘上的竖线字符多数渲染器会把它当成普通符号间距会很难看甚至在 Markdown 表格里还会破坏表格结构。这一点后面排查那节还会再提。欧拉公式这种一句话经典用块级公式呈现最合适e^{i\pi} 1 0还有一个常见的符号疑问交叉熵和 KL 散度里的负号到底该不该有。这件事的本质是方向的约定不是排版问题。写成H -\sum p \log q时负号的作用是把越小越好的损失函数变成非负值写成D_{KL} \sum p \log(p/q)时通过交换对数里分子分母的位置来保证非负。两种写法数学上等价但同一个文档里只能选一种约定并且要在符号说明表里写明方向否则读者读到一半会以为你写错了。4. 排版实战把公式写进真实文档的六个场景符号会写了接下来是把它嵌进真实文档里。这一节讲的全是实际写作中冒出来的问题。4.1 行内公式和文字基线错位怎么处理这是被问得最多的一类问题没有之一。现象是一段中文里插了一个行内公式公式明显比周围的汉字高出一截或者低下去一截整行的行高被撑开看起来像排版事故。原因通常有这么几个按出现频率排第一行内公式里用了分式、根式或者带上下限的求和积分。这些符号天生就比文字高一个\frac{a}{b}的行内公式高度能顶两行中文。这不是渲染器有 bug是它老老实实把分式排出来了结果就是撑开行高。第二行内公式里用了展示环境。有些人习惯写\displaystyle强制让行内公式用大尺寸排版那当然更对不齐了。第三公式是图片。图片的垂直对齐由行内元素的基线规则决定很多平台默认按图片底边对齐文字基线视觉上就是偏上需要额外的样式处理。第四中英文字体混排。汉字是方块字行高比例和拉丁字母差别大公式里的拉丁字母跟着中文字体走的时候基线容易飘。解法按代价从低到高排把复杂公式从行内提成块级独立公式。这是最有效的一招也是我最推荐的。凡是带分式、根式、求和上下限的式子一律独立成行既好看又好读。行内确实需要分式时降级写法。\frac{a}{b}改成a/b或者用\tfrac强制小尺寸。给公式元素加垂直对齐样式让它按中线对齐。这在 HTML 输出里可以调但在纯 Markdown 层面通常没法控制。用\vphantom{}占位来统一高度。这个技巧知道的人不多\vphantom{\frac{a}{b}}本身不显示任何内容但它占的高度和分式一样所以你可以用它把同一行里几个原本高低不齐的元素顶到一样高。适合在矩阵或者多分支公式里对齐用。举个实际例子同一行里既有分式又有普通变量你可以这样处理\text{当 } a0 \text{ 时} \quad x_{1,2} \tfrac{-b \pm \sqrt{b^2-4ac}}{2a}把\frac换成\tfrac之后行高明显收敛跟中文的贴合度好很多。4.2 公式编号与交叉引用的现实做法写论文、写规范文档的人一定会遇到公式编号。理想情况是让引擎自动编号、自动引用可惜在 Markdown 生态里这一块的支持参差不齐。主流做法有三种。第一种是手动\tag{}你写多少号就是多少号E mc^2 \tag{1}这种方式在 KaTeX 和 MathJax 里都能用前提是它处于块级公式环境且所在平台没有禁用这个命令。缺点显而易见你没法自动引用插一个新公式进去后面所有编号都得手动改。第二种是开启渲染引擎的自动编号能力。MathJax 系可以配置成按 AMS 规则自动编号equation环境自增\label配合\ref或\eqref做引用。这条路体验最接近专业排版系统但依赖平台配置而且在 Markdown 预览器里通常不生效只有最终发布的页面上才生效。第三种也是我在工程文档里最推荐的在公式旁边维护一张编号表。用 Markdown 表格自己维护格式是编号—公式摘要—所在章节三列。这样做的好处是编号可控、可搜索、可批量改而且不依赖任何渲染引擎的特殊能力。改编号的时候你只要改表格里那一行正文里的引用是基于语义写的比如见式 (4.2) 的收敛条件语义引用的好处是即使编号变了读者也能靠上下文找到。注意\label和\eqref在绝大多数 Markdown 托管平台是不生效的别把它当成必选项。写正式文档之前先确认目标平台支持到什么程度不然等你写了两百个公式才发现引用全废返工成本极高。还有一种情况值得单独说公式编号和章节编号的对齐。如果你用的是章节号.序号这种形式比如式 (4.2)那么插入或删除一个章节会让全篇编号乱套。我的做法是在文档定稿前最后统一编号中间过程一律用临时占位避免反复返工。4.3 长公式换行与断行位置的选择公式太长溢出屏幕这是版面问题里最影响可读性的一类。断行的基本原则是在关系符或运算符处断开不要在一个项的内部断开。人类读公式是在读结构你在a^2 b^2中间断开读者会以为那里是一个新项的开始。具体做法是用aligned环境把断点放在等号或者加号处并且用让断行的位置对齐\begin{aligned} f(x) {} a_0 a_1 x a_2 x^2 \\ a_3 x^3 a_4 x^4 \end{aligned}注意{}这个写法。如果只写等号后面的间距会丢失看起来等号和下一行内容贴在一起。加上一对空花括号{}可以保住正确的间距这是个很实用的小技巧。还有几种断行环境但要留意兼容性。split在多数引擎里能用multline的支持范围就窄一些尤其在 KaTeX 系里经常报错。保险的做法是优先用aligned它的兼容面最广绝大多数平台都能正确渲染。断行的另一个坑是在分数里。如果你在\frac{}{}的分子里用\\换行有的引擎会直接报错因为分数参数不是多行环境。遇到很长分数的场景正确的做法是把整个式子改写成乘法形式或者用\cfrac写成连分式。这是数学表达的重构不是单纯的排版调整。4.4 量纲、单位与符号说明表的规范技术文档和纯数学文档的区别在于前者要处理物理量和单位。这一块有几条不太写在教科书里但实际很重要的规则。数值和单位之间要留细空格用\,控制不要用普通的空格因为普通空格在数学模式里会被吃掉g 9.8\,\mathrm{m/s^2} m 5\,\mathrm{kg}单位的正斜体约定是变量斜体单位正体。所以要写\mathrm{m}而不是m。这条规则在工程类文档里几乎是硬要求写成斜体会被专业读者一眼挑出来。温度、角度、百分号这些也有各自的写法关键是全文一致。再说符号说明表。写数学建模或者算法文档时几乎一定需要一张符号—含义—单位—备注的表格。用 Markdown 表格配合行内公式完全可行但要留意两点一是表格单元格里不能出现裸的竖线字符因为那会破坏表格结构需要用\mid或者\lvert这类命令代替二是单元格里的公式不要太复杂矩阵、多行公式放进表格会撑破列宽。一个可用的符号说明表长这样符号含义单位备注v瞬时速度\mathrm{m/s}沿运动方向为正a加速度\mathrm{m/s^2}减速时为负\Delta t时间间隔\mathrm{s}恒为正值\bar{v}平均速度\mathrm{m/s}见式 (4.2)这类表格的另一个好处是它可以直接转成电子表格做进一步处理编辑维护起来比散落在正文里的定义高效得多。4.5 从网页、论文和 AI 回答里搬运公式的清洗流程这是实际工作中出现频率极高、但很少被正面讲清楚的环节。你从别处拿到一段带公式的内容直接粘进自己的文档十有八九是坏的。下面是我自己用的一套清洗流程。第一步剥掉 HTML 外壳。从网页复制的公式源码里往往包着一堆span标签带着各种类名和样式属性。你要做的是把这层外壳去掉只保留数学表达式本身。第二步统一分隔符。把所有\(...\)统一替换成$...$把所有\[...\]统一替换成$$...$$。这一步是机械操作但必须做因为混用分隔符会让你后面排查问题时无法判断到底是哪种方言在出错。第三步抓不可见字符。这一条最隐蔽。网页和文档软件复制出来的内容里常常夹着零宽空格、不间断空格、软连字符这类看不见的字符。它们肉眼不可见但会让公式渲染失败。我的做法是把内容粘进纯文本编辑器开显示不可见字符的选项看一眼有异常字符就全局清掉。第四步处理不兼容的命令。换行符\\在不同环境里写法不同有的地方复制过来是双反斜杠有的是一个粗体命令\boldsymbol在部分渲染器里不支持要换成\mathbf\displaystyle在不需要的地方要删掉否则行内公式会被撑开。第五步检查下划线和星号。这是个真实存在的坑行内公式里如果出现多个下划线某些 Markdown 处理器会把它当成强调标记来解析导致公式后半段莫名其妙变成斜体。是否出现取决于渲染流水线是先切数学节点还是先做强调解析。规避方式很简单遇到这种情况就把公式从行内升级成块级独立公式块级公式通常会被完整地保护起来。实在需要行内的检查渲染结果不对就换写法。第六步处理图片型公式。如果来源是图片需要走 OCR 识别。现在有不少工具能把公式图片转成 LaTeX 源码识别之后仍然要走前面五步做清洗因为识别结果里经常有多余空格和错误的命令名。识别完务必逐个符号对照原图核对尤其是下标数字和希腊字母这两类识别错误率最高。第七步如果目标格式是 Word。有一个省事的路径在 Word 的公式编辑区里直接输入 LaTeX 语法它会自动转换成 Word 原生公式对象。这样得到的公式是可编辑的缩放不失真比贴图片强得多。要注意的是这种转换对语法严格前面清洗不干净的公式会转换失败所以清洗步骤不能跳。4.6 几类高频公式的写法示范把前面讲的拼起来看几个完整例子。这些式子在技术文档里出现频率很高可以直接拿去用。一元二次方程求根公式注意判别式里的减号和根号x \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}, \quad \Delta b^2 - 4ac对数还原关系和换底公式写清底数是关键\log_a (MN) \log_a M \log_a N \log_a b \frac{\ln b}{\ln a}技术分析或者时序类文档里常用的移动平均定义是个很典型的求和公式\mathrm{MA}_n(t) \frac{1}{n} \sum_{i0}^{n-1} P_{t-i}功率电子或者电路笔记里的基本关系写清楚每个量的含义即可V_o D \, V_{in}, \quad D \in [0, 1]仿真类文档里经常需要给出量之间的换算关系比如导纳和阻抗互为倒数Y \frac{1}{Z} G jB复利和年化增长这类业务口径公式写进文档的好处是口径被固定下来不会因为不同人在表格里各写各的而对不上\mathrm{CAGR} \left( \frac{V_{\text{终}}}{V_{\text{始}}} \right)^{\frac{1}{n}} - 1这些例子的共同点是结构简单、含义明确、上下标层级不深。真正的难点不在这些公式本身而在于把它们放进一篇有几百个公式的文档后如何保持格式一致。5. 成稿导出公式不丢的几条链路5.1 导出 PDF 的现实路径Markdown 转 PDF 的常见做法有两种各有各的坑。一种是用编辑器的预览加浏览器打印。原理是把渲染好的 HTML 页面按打印样式输出成 PDF。这条路的好处是所见即所得预览里公式长什么样PDF 里就长什么样关键前提是你预览的时候公式确实渲染成功了如果预览里就是一堆反斜杠导出结果只会更糟。另一种是用 Pandoc 类工具做转换。基本命令形如pandoc input.md -o output.pdf --pdf-enginexelatex这条路的能力更强尤其适合批量转换和自动化。需要留意两点一是公式能否被正确识别为数学模式取决于输入格式的扩展开关默认情况下美元符号包裹的数学是开启的二是中文支持需要额外指定字体否则会出现方块或者缺字。转换之前先把中文参数配好不然得到一堆豆腐块排查起来很费时间。导出方式公式保真度中文排版适合场景预览页打印成 PDF高所见即所得一般单篇成稿、快速交付Pandoc 转换链高依赖配置需手动配字体批量转换、自动化流程转成 Word 再导出高公式可编辑好需要他人批注的文档5.2 导出 Word 的注意点转 Word 有一个隐藏优势主流的转换工具会把公式转成 Word 的原生公式对象而不是图片。这意味着对方拿到文档后可以直接双击修改缩放不失真深色模式下也不会反色。这一点对于需要评审、需要反复修改的文档来说价值巨大。但要注意转换后的公式对象和 Word 公式编辑器里的原生公式在细节上可能略有差异比如字体、间距、符号字形。发布前一定要在 Word 里从头翻一遍重点看三类地方分式的横线长度、矩阵的列对齐、以及长公式有没有溢出页面边距。这三类问题在转换后出现概率最高。还有一个现实问题如果文档里的公式量很大转换时间会明显变长而且失败时的报错信息通常很含糊。建议的做法是分批转换比如按章节拆成几个文件分别转哪个文件出错就缩小到那个章节里排查比一次性转整篇再靠肉眼找问题高效得多。5.3 平台不渲染公式时的降级方案不是所有交付场景都有数学渲染能力。邮件、某些内部系统、代码评审界面都可能把你的公式原样显示成一堆反斜杠。这时候需要准备降级方案。最省事的是把公式包进带语言标记的代码块里读者看到的是干净的 LaTeX 源码至少能复制到别处去渲染x \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}第二种是给公式配一段文字说明。尤其在沟通场景里把公式的含义用一句话讲清楚比让人盯着一个渲染失败的符号强得多。第三种是用 Unicode 近似表达简单式子。比如x²代替x^2a/b代替分式。这招只对简单式有效复杂式强行降级会变成天书不如不降。第四种是图片加替代文本。图片保证显示替代文本保证可访问性和可搜索性。这种做法适合最终交付物不适合需要长期维护的源文档。我的经验是同一份内容源文档永远用 LaTeX交付副本按接收方的能力再做降级。别为了迁就某一个不支持的平台把源文档本身改坏。6. 常见问题与排查速查6.1 公式不渲染八成是这几个原因这一节做成速查表出问题的时候按顺序对照。现象典型原因处理办法源码原样显示反斜杠都在行内分隔符开关未开在编辑器或平台设置里打开单美元数学模式一段中文突然消失或错位文本里有成对的美元符号被当成公式把金额等处的美元符号转义或改用中文表述报错提示缺少配对\left和\right没有成对补齐成对的括号命令或补上点号占位提示未知命令用了当前引擎不支持的宏包命令换成兼容写法比如把多行环境改成aligned公式里出现方块或空白字体缺字多为中文进了公式把中文说明移出公式或改用文字段落描述行内公式把行高撑开行内用了分式、根式或大运算符提升为块级独立公式或改用\tfrac公式后半段变斜体下划线被 Markdown 当成强调标记把公式从行内改为块级规避强调解析从网页粘贴后全部失效HTML 外壳和不可见字符混入按清洗流程逐步剥离标签和异常字符表格被公式撑破单元格里有裸的竖线字符改用\mid或\lvert表达竖线导出后公式变图片转换工具走了截图路径换用支持原生公式对象的转换方式这张表我建议你贴在笔记里出问题的时候先扫一遍绝大多数情况三十秒内能定位。6.2 三个反直觉的排查经验第一个经验先怀疑内容再怀疑环境。很多人一遇到公式不渲染就去翻设置、重装插件、换编辑器折腾半小时之后发现是自己在公式里多打了一个花括号。正确的顺序是先把出问题的公式单独拎出来用最小化的方式测一遍——只留一个x^2看它渲染不渲染。如果这个最简单的能渲染问题就在你的公式内容里跟环境无关。第二个经验对照组比反复试验有用。准备一个已知能正常渲染的公式作为对照出问题的时候和它并排放。如果你的公式不渲染而对照的渲染那就是写法问题如果两个都不渲染那就是环境问题。这个方法能省掉大量猜测。第三个经验别在行内公式里塞复杂结构。我统计过自己文档里的格式问题超过一半来自行内公式。带分式的、带上下限的、带矩阵的全部提成块级公式之后问题数量断崖式下降。块级公式在绝大多数渲染流水线里都会被单独保护起来不容易被 Markdown 的其他规则干扰。6.3 复制粘贴与深色模式下的细节还有几个零散但很实际的点。复制公式给别人时如果你复制的是渲染后的结果粘贴到纯文本环境里通常会变成乱码或者一串无意义的符号。正确做法是复制源码。如果平台不支持源码视图就在文档里额外保留一份源码版本或者把公式放进代码块。这是个习惯问题但能省下大量沟通成本。深色模式下面如果用图片公式透明底色的图在深色背景上会很难看黑字的图直接消失。这是图片方案的固有问题换成 LaTeX 渲染就消失了因为文字颜色会跟随主题。打印场景下块级公式居中还是左对齐行内公式的基线偏移是否明显页边距会不会把长公式切断这三件事一定要在 PDF 里实机翻一遍。屏幕上看着没问题的公式打印出来后经常会有几个字符被切到页外。我的习惯是导出后按页快速浏览专挑最长的三五个公式看断行位置这几处最容易出问题。最后再分享一个我自己一直在用的小技巧给文档建一个公式定义区。把所有重复出现的组合符号比如某个常见的矩阵形式、某个反复使用的算子统一写在一个区域里然后用引用或者复制的方式使用。这样改一次就能全篇同步不用在几百个公式里挨个找。这个习惯听起来很小但在写超过二十页的文档时能省下的时间是以小时计的。