实用工具

Markdown 目录生成器

为 README 生成目录,链接指向 GitHub 真正生成的锚点——中文标题和重名标题都算对。

浏览器本地运行格式化1754
免费

输入

0 B

结果

结果会显示在这里。

目录只有每个链接都能跳到位才有用,而手写锚点总在同样的地方出错:GitHub 会去掉标点、保留中文、全部转成小写,并按文档顺序给重名标题加上 -1、-2。这个工具读取你的 Markdown,找出代码块和 front matter 之外的所有标题,按 github-slugger(与 github.com 规则一致的库)的规则生成锚点,输出一个嵌套列表。它还可以把目录写进 <!-- toc --> 和 <!-- tocstop --> 两个标记之间——这是 markdown-toc 命令行工具的约定——再次运行时会替换旧目录,而不是再加一份。

它是怎么工作的

  • # 开头的标题和用 === 或 --- 下划线的标题都会识别;``` 或 ~~~ 代码块、YAML front matter 和 HTML 注释里的内容会跳过。
  • 锚点根据 GitHub 渲染出的文字生成:链接、强调和行内代码只留文字,标点去掉,空格变成连字符。
  • 所有标题都参与重名编号 -1、-2,包括超出所选深度、没列进目录的标题,因为 GitHub 就是这样编号的。
  • 可以设置最大深度、列表符号、是否省略文档标题(开头的 H1),以及是否返回整篇文档并把目录插入标记之间。

你的数据去了哪里

哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。

本工具免费且无需登录,运行结果只存在于你当前的页面里,不会被保存到任何地方。

它要花多少

本工具完全免费,不需要登录,也不消耗积分。

常见问题

为什么中文标题的锚点保留了汉字?
因为 GitHub 就是保留的。它的规则只去掉标点和符号,所以 ## 安装与使用 的锚点是 #安装与使用,## FAQ:为什么选择 Rust? 是 #faq为什么选择-rust——全角冒号和问号去掉,汉字留下。浏览器跳转时会对链接做百分号编码,这是正常的。
在 GitLab 或 Gitea 上链接也能用吗?
大多数情况下能用。GitLab 和 Gitea 生成锚点的方式与 GitHub 很接近,简单的英文标题在哪儿都一样。差别在边缘情况——重名标题、部分标点、旧版本对非拉丁文字的处理——所以发布到 GitHub 以外的平台后,最好把链接点一遍。
新增章节后怎么更新目录?
在放目录的位置单独写一行 <!-- toc -->,后面再写一行 <!-- tocstop -->,打开「插入到标记之间」,把整篇文档放进来运行。标记之间的内容会被替换,旧目录里的标题不会被当成正文,所以重复运行结果不变,目录不会越来越长。
用 HTML 写的标题(比如 <h2>)会被识别吗?
不会。只列出 Markdown 标题——# 开头的行,以及用 === 或 --- 下划线的行。Markdown 里的 <h2> 标签不会进目录;想让它出现,就改写成 ##。

背后的开源项目

本工具是独立实现,并未打包第三方库。jonschlinkert/markdown-toc(MIT)在代码层面做的是同一件事——如果你需要在自己的程序里实现它,从那里开始,而不是调用一个网页。

jonschlinkert/markdown-toc

也常被称作

  • markdown 目录生成
  • markdown toc
  • readme 目录
  • github 锚点链接
  • markdown 中文标题锚点
  • 自动生成目录