Sublime Text需通过MarkdownPreview插件启用MathJax v2.7.9渲染公式,仅支持TeX-AMS_HTML配置下的语法:行内用$E=mc^2$(无空格),块级用$$\int_0^\infty e^{-x}dx=1$$(前后无字符),下划线需转义a\_b,多行用\begin{aligned},且必须通过浏览器预览触发JS加载。

MarkdownPreview 插件启用后,Sublime Text 本身不解析数学公式——它只负责把 Markdown 转成 HTML,真正渲染公式的是 MathJax(v2.x),所以支持哪些公式,取决于 MathJax 2.7.9 的默认配置(TeX-AMS_HTML),不是 Sublime 或插件自己定义的。
MathJax v2 支持的公式语法有哪些
不是所有 LaTeX 写法都能用,MarkdownPreview 当前(v3.0.x)仅稳定兼容 MathJax v2,不支持 v3 的新语法(如 \begin{equation} 自动编号、\tag{} 等高级功能)。以下是最常被卡住但实际可用的核心语法:
- 行内公式必须用单个
$包裹,且$紧贴内容:写成$E=mc^2$✅;$ E = mc^2 $❌(空格会中断解析) - 块级公式用
$$包裹,前后不能有其他字符:写成$$\int_0^\infty e^{-x}dx = 1$$✅;$$$$. $$或$$...$$.❌(句点、换行、多余$都会导致整块失效) - 下划线
_在 Markdown 中有语义,写a_b前必须转义为a\_b,否则可能被当成斜体或直接丢弃 - 大括号
{}必须用\lbrace/\rbrace或\left\{/\right\},原生{a+b}不会被识别为公式分组 - 多行对齐用
\begin{aligned}...\end{aligned},但不能用\begin{align}(v2 默认未启用AMS扩展,除非手动加配置)
为什么开了 enable_mathjax 还是不显示
最常见原因根本不是语法或插件没装对,而是预览路径错了:
-
ctrl+shift+p → Markdown Preview: Preview in Sidebar❌:侧边栏是纯 HTML 渲染,不执行 JS,MathJax完全不加载,公式永远显示为源码 -
ctrl+shift+p → Markdown Preview: Preview in Browser✅:这才是唯一走完整流程的方式,会注入MathJax.js并触发解析 - 右键菜单里 “Open Preview in Browser” ✅:等效于上一条命令
- 任何悬浮提示(比如 LSP 插件 hover 显示的 Markdown 片段)❌:不支持 JS,公式不会渲染
别信“点了预览就该出来”的直觉——盯着侧边栏看半天,其实连 MathJax 的请求都没发出去。
mathjax CDN 地址必须用 v2,不能抄网上 v3 的链接
MarkdownPreview 的 JS 加载逻辑硬编码适配了 v2 的入口和配置方式。用 v3 地址(比如 https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js)会导致:
将PDF文件(含扫描件、图片)转换为Markdown格式。接入MinerU和PaddleOCR双引擎,支持扫描件OCR识别、公式表格解析、多语言识别。兼容本地OCR识别。
- 控制台报
MathJax is not defined - 公式块留白,源码也不显示(因为 JS 加载失败后整个渲染链崩了)
- 配置里写错一个字符(比如少个
?或多加斜杠)也会静默失败
务必用这个地址(来自官方文档验证过的 v2.7.9):"mathjax CDN": "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML"
容易被忽略的配置细节
改完 Settings – User 后,很多人以为保存就生效了,其实:
- 必须重启 Sublime Text,或运行
ctrl+shift+p → Markdown Preview: Update Settings手动重载,否则旧配置还在内存里 -
"js"字段不是必须的,但如果你手动加了自定义js数组(比如引入本地math_config.js),要确保路径正确且文件存在,否则会阻塞整个 MathJax 初始化 - 如果同时启用了
enable_highlight(代码高亮),注意它和 MathJax 没冲突,但某些主题 CSS 可能意外覆盖公式字体大小或行高
真正难调的从来不是“怎么写公式”,而是确认 JS 真的加载了、解析器真的启动了、浏览器真的收到了那个 $\lim$ —— 先打开浏览器开发者工具看 Network 标签页有没有成功拉到 MathJax.js,再看 Console 有没有报错,比反复改 LaTeX 语法高效得多。

















