Markdown 语法
Markdown 目录怎么生成?
它没有原生语法
Markdown 没有原生的目录语法。没有哪个标记一放就能得到一份目录。你有的是三条路:手写一份链接列表当目录,让 GitHub 这类平台按你的标题自动生成,或者干脆不写目录,用大纲面板在文件里导航。下面逐条讲,以及各自什么时候用。
三条路一览
| 路子 | 是什么 | 在哪能用 |
|---|---|---|
| 手写 | 你自己敲一份锚点链接列表 | 哪都能用,包括纯 GitHub、GitLab |
| 让平台生成 | GitHub 自动显示;部分编辑器认 [TOC] 标记 | 只在那个平台,换地方就没了 |
| 用大纲面板 | 应用在笔记旁列出的实时标题清单 | 用来导航,不是把目录写进文件 |
手写(最可移植的办法)
Markdown 目录其实就是个项目符号列表,每一项是指向某个标题的锚点链接。写一次,跟着文件走:
## 目录
- [快速上手](#快速上手)
- [配置](#配置)
- [常见问题](#常见问题)
## 快速上手
... 唯一容易栽的地方是锚点本身。链接目标不是标题原文,是它转成的 slug:
- 全部小写。
- 空格换成连字符。
- 去掉标点,所以
## My Setup!变成#my-setup。
转错了,点链接就没反应。链接看着没问题却不跳,几乎都是 slug 的锅。这又是一例 Markdown 看着坏了其实只是条小规则。
让平台替你生成
有些工具会生成目录,省得你自己写:
- GitHub 在任何有两个以上标题的
.md渲染时,在头部显示一个可交互目录。你什么都不写,它读你的标题。 - 部分编辑器(StackEdit,以及 Python-Markdown 扩展)会把
[TOC]标记变成一份生成的列表。
问题在可移植性。[TOC] 不是标准 Markdown,在纯渲染器里就原样显示成一串 [TOC] 文字。GitHub 的头部目录也是在 GitHub 上,不在你文件里。它们好用的地方好用,文件一挪走就没了。
或者不做目录,用大纲
很多时候你并不是真想把目录写进文件,你想的是在一份长文档里走动,这是另一个问题。AI 甩给你一份 读不动的 plan.md 时,正是它咬人。
大纲面板不用做目录就解决它。NoteLoom 在右栏显示一个:列出当前笔记里每个标题,边编辑边实时更新,高亮你滚动到的那一节,点一下就跳过去。于是你按结构导航一份长文件,不用写,也不用维护。
两者之间诚实的界线:大纲是用来读和导航的,它不会把目录写进你的 .md。要一份存在文件里(给 GitHub 或交接用)的目录,还是得用上面手写的锚点链接列表。
常见问题
Markdown 有目录语法吗?
没有。CommonMark 和 GFM 规范里都没有原生 TOC。你要么手写一份锚点链接列表,要么靠某个平台的功能替你生成。
怎么链接到同一个文件里的标题?
用锚点链接:[章节名](#章节名)。锚点是标题文字转成的 slug:全小写、空格换成连字符、去掉标点。英文标题 ## My Setup! 会变成 #my-setup;中文标题的锚点通常就是标题本身去掉空格和标点。
为什么我的 [TOC] 显示成一串字?
因为 [TOC] 不是标准 Markdown。少数编辑器(比如 StackEdit)和 Python-Markdown 扩展会把它变成目录,但多数渲染器原样显示 [TOC]。它是平台功能,不是语法。
GitHub 会自动生成目录吗?
会。渲染一个有两个以上标题的 .md 时,GitHub 在文件头部显示一个可交互目录。你什么都不用写,它读你的标题。但那个目录在 GitHub 上,不在你的文件里。
不做目录,只想在长 Markdown 文件里跳转怎么办?
用带大纲面板的 Markdown 应用。它列出笔记里每个标题,点一下就跳到那一节,不用写也不用维护目录就能在长文件里走动。NoteLoom 的大纲面板在右栏。
手写的目录换个地方还能用吗?
能,只要渲染器支持标题锚点,大多数都支持。锚点链接就是存在文件里的普通 Markdown 文字,跟着文件走。这正是手写法比只在某平台生效的目录强的地方。
按标题在长 .md 里跳转
用 Chrome / Edge / Arc 打开 NoteLoom,挂上文件夹,打开一份长 .md:大纲面板列出每个标题,让你在里面跳来跳去,不用写目录。本地文件进,本地文件出,什么都不上传。