实用工具
输入
结果
结果会显示在这里。目录只有每个链接都能跳到位才有用,而手写锚点总在同样的地方出错: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 中文标题锚点
- 自动生成目录