VSCode标题自动编号需Markdown All in One插件,支持动态重排但依赖配置;有序列表编号受上下文限制;公式编号需Markdown Preview Enhanced启用tags:"all";所有编号仅预览可见,不写入源文件。

标题自动编号:依赖插件而非原生功能
VSCode 默认不支持标题自动编号,必须靠 Markdown All in One 插件实现。它不是简单地给 # 行加数字前缀,而是通过命令动态生成并维护编号树,支持插入/删除章节后整棵树重排。
常见错误现象:
- 装了插件但没配置快捷键,按
Ctrl+Shift+P搜不到Markdown: Add/Update heading numbers - 执行命令后无反应——通常因为光标不在标题行,或文档里混用了中文
#(全角)而非 ASCII# - 编号只到二级(如 1.1、1.2),三级及以下没编号——需检查
markdown.extension.toc.levels是否设为6(默认是3)
实操建议:
- 在
settings.json中添加:"markdown.extension.toc.levels": 6,否则插件内部编号逻辑只遍历前 3 级标题 - 快捷键可自定义,推荐绑定到
Ctrl+Alt+H(避免和系统快捷键冲突) - 编号格式固定为
1.、1.1、1.1.1,不支持自定义分隔符(如括号或冒号)
有序列表自动编号:开箱即用但有上下文限制
Markdown All in One 默认开启 markdown.extension.orderedList.autoRenumber,输入 1. 回车后自动续为 2.,但这个行为高度依赖“列表上下文连续性”。
典型失效场景:
- 表格后紧跟
1.→ 不触发编号(表格打断上下文) - 复制粘贴含乱序编号的列表(如
1.、3.、2.)→ 不自动重排,需手动运行Markdown: Renumber ordered list - 用全角数字加点(如
1.)→ 完全不识别,必须用 ASCII1.
参数差异:
-
autoRenumber控制“新增行时是否递增”,不影响已有断序 - 若想边编辑边重算(比如删掉第 2 项,第 3 项立刻变 2),需确认插件版本 ≥ 4.0,且启用
renumberOnEdit(部分版本支持,非默认) - 关闭
autoRenumber后,Tab缩进仍可用,但编号不会自动生成
公式自动编号:MathJax + tags: "all" 才真正生效
VSCode 原生预览不支持公式编号,必须用 Markdown Preview Enhanced 并切换渲染引擎为 MathJax。关键点在于:官方文档写的 tags: "ams" 在当前版本(2026.7)多数无效,实际有效的是 tags: "all"。
配置步骤:
- 在
settings.json加:"markdown-preview-enhanced.mathRenderingOption": "MathJax" - 运行
Markdown Preview Enhanced: Open Config Script (Global),把mathjaxConfig.tex改成:{tags: "all"} - 仅对
$$...$$和\[...\]这类 display math 生效,行内公式$...$不编号
容易踩的坑:
- 改完 config.js 必须重启预览窗口(关掉再打开),热更新不生效
- 如果同时启用了
markdown.extension.math.enabled(原生数学支持),可能和Markdown Preview Enhanced冲突,建议关掉前者 - 编号样式不可定制,默认是圆括号包裹右对齐,比如
(1),无法改成方括号或左对齐
编号同步与导出陷阱:预览能看 ≠ 导出能用
所有自动编号(标题、列表、公式)都只存在于 VSCode 预览中,不修改原始 .md 文件内容。这意味着:
- GitHub / GitLab 渲染时看不到任何编号——它们只解析原始 Markdown,不执行插件 JS
- 导出 PDF(如用
Markdown PDF插件)时,编号可能丢失或错位,因导出器不调用同一套编号逻辑 - 若需存档级一致性,得用 Python 脚本批量重写文件(如用
re模块匹配^#{1,6}并注入编号),但这脱离了实时编辑流
最现实的折中方案是:日常写作依赖插件编号提升效率,发布前用插件命令导出带编号的 HTML,再转 PDF;纯文本交付则接受无编号状态。


















