ZeroTool Workbench
Markdown 目录生成器
从 Markdown 标题生成可点击目录,支持 GitHub / GitLab / Jekyll / Bitbucket 锚点风格,可通过 <!-- toc --> 标记原位更新。完全在浏览器中运行,零上传。
使用步骤
- 把 Markdown 粘贴到左侧输入区。
- 在 锚点风格 里选目标平台 — GitHub / Hugo、GitLab、Jekyll 或 Bitbucket。
- 用 最小标题级别 与 最大标题级别 圈定要进 TOC 的层级范围。
- 如果文档标题由模板单独渲染,关掉 包含 H1。
- 直接复制生成的目录;或者打开 标记模式,得到带
<!— toc —>标记的完整 Markdown。
四种锚点风格
- GitHub / Hugo — 转小写、去标点、空格转连字符、保留 Unicode。Hugo 自 v0.62 起的 goldmark 渲染器默认与 GitHub 一致。
- GitLab — 同 GitHub,但把连续多个连字符合并为一个,匹配 GitLab Flavored Markdown。
- Jekyll(kramdown 经典) — 先剥掉所有非 ASCII 字符再生成 slug。仅在 Jekyll 站没有切换到支持 Unicode 的 slugger 时使用。
- Bitbucket — 每个锚点都带
markdown-前缀,重复项用_N而非-N。
标记模式
标记模式让 TOC 永远新鲜,又不动原文其它部分。 在你想放目录的位置写两条 HTML 注释:
<!— toc —>
<!— /toc —>
之后随时跑一遍生成器,两条注释之间的内容会被替换为新 TOC。 如果文档还没有标记,工具会在第一个标题之前自动插入一段标记块, 复制粘贴回去就能 commit。
实例
简单目录,GitHub 风格
输入:
# API 参考
## 鉴权
### OAuth 流程
## 接口
### GET /users
### POST /users
输出(GitHub 锚点,缩进 2 空格):
- [API 参考](#api-参考)
- [鉴权](#鉴权)
- [OAuth 流程](#oauth-流程)
- [接口](#接口)
- [GET /users](#get-users)
- [POST /users](#post-users)
重复标题
两个 ## 示例 在 GitHub / GitLab / Jekyll 下分别变成 #示例 和 #示例-1;Bitbucket 下变成 #markdown-示例 和 #markdown-示例_1。
跳过 H1
如果你的静态站从 frontmatter 渲染 H1,关掉 包含 H1,TOC 会从第一个 H2 开始,整体缩进降一级。
FAQ
为什么要选锚点风格?
不同平台把标题转成锚点(slug)的算法不一样。GitHub 保留 Unicode、把空格换成连字符;GitLab 类似但会把连续连字符合并;Jekyll/kramdown 经典模式会先去掉所有非 ASCII;Bitbucket 给每个锚点加上 markdown- 前缀。用错风格生成的目录,链接点过去就是 404。
支持中文、日文、韩文标题吗?
GitHub、GitLab、Bitbucket 三个风格都保留 Unicode 字母,中文 / 日文 / 한글 标题原样进锚点。Jekyll classic 默认会把非 ASCII 全部剥掉,如果目标平台是 Jekyll,建议切到 GitHub 风格以保留原始标题。
标记模式(Marker mode)怎么更新已有目录?
打开标记模式后,工具会在文档中找 <!-- toc --> ... <!-- /toc --> 一对注释,把中间的内容整段替换成新生成的 TOC,标记之外的内容一律不动。如果还没有标记,工具会在第一个标题之前插入一个新的标记块,复制粘贴回原文即可。每次输入变动都会重新生成。
标题重复怎么办?
重复锚点会自动去重。GitHub / GitLab / Jekyll 在重复项后追加 -1、-2、-3……;Bitbucket 用 _1、_2、_3 以匹配它原生的渲染规则。生成出来的目录链接永远指向唯一的目标位置。
代码块里的 # 会被当成标题吗?
不会。被三反引号 ``` 或三个波浪号 ~~~ 包围的代码块内容一律按代码处理,不会被识别为标题。已存在的 <!-- toc --> ... <!-- /toc --> 区段也会被跳过,所以可以反复运行生成器而不会出现旧 TOC 嵌套。