用 Markdown 写思维导图:markmap 语法速成、富文本支持边界,与 mermaid mindmap 的 4 点真实差距

· 约 5 分钟 🧠 思维导图

写一份会议纪要、技术文档、读书笔记时,有时候用思维导图比纯文本更清晰——层级、并列、归纳关系一眼就能看出来。

但传统的脑图工具(XMind / MindManager / Lucidchart)要求拖框线、绑定线条颜色、调字号——做完一张图的时间够你写完三段正文。

markmap 的核心解法:直接用 Markdown 写。标题分层级、列表列要点,引擎自动出图。这篇从语法速成到 mermaid 对比,把它讲透。

最简语法:标题 + 列表

markmap 把 Markdown 文档解析成树状结构:

# Markmap 工具

## 语法

### 标题
- `#` = 根节点
- `##` = 一级分支
- `###` = 二级分支

### 列表
- `-` 同层并列
- 缩进 4 空格 = 下钻一层

## 富文本

- **加粗**
- *斜体*
- `code`
- [链接](https://example.com)
- emoji 🎯

生成的导图:

Markmap 工具
├─ 语法
│  ├─ 标题
│  │  ├─ # = 根节点
│  │  ├─ ## = 一级分支
│  │  └─ ### = 二级分支
│  └─ 列表
│     ├─ - 同层并列
│     └─ 缩进 4 空格 = 下钻一层
└─ 富文本
   ├─ 加粗
   ├─ 斜体
   ├─ code
   ├─ 链接
   └─ emoji 🎯

核心规则

Markdown 元素导图行为
#根节点(一般只有一个)
## ### ####子层级,按数量递减
-* 列表同层并列
4 空格缩进的 -下钻一层
段落 > 引用在节点下出现引用块
表格直接渲染(节点里嵌表)

富文本边界:哪些渲染哪些不

markmap 支持的 inline 富文本几乎和 Markdown 原生一致:

元素写法节点里渲染导出保留
加粗**文字**
斜体*文字*
代码`code`✓ 灰底等宽
链接[文字](url)✓ 可点击
emoji🎯
表格| 列 | 列 |✓ 节点里嵌入
列表勾选- [x] 项
KaTeX 公式$x^2$❌ 渲染为字符串
代码块高亮```js ... ```⚠️ 显示代码但不上色

两个限制的根本原因——本工具遵循”不连 CDN”原则,KaTeX 字体和 highlight.js 高亮规则文件都不会自动加载。

实务建议

  • 不要在导图节点里写公式——预览看着可能正常(字体兜底),导出后变成 $x^2$ 字符串
  • 代码块尽量用 inline code 替代——只是为了区分代码与说明,inline 完全够用
  • 如果一定要展示长代码 / 公式,放在导图同级的文档正文里,导图节点只保留概念名(“梯度下降公式”而非整段推导)

折叠与展开

点节点上的圆点——展开或折叠整支。

操作行为
单击圆点折叠 / 展开当前支
滚轮缩放整张图
拖拽空白平移视图
点”自适应”缩到适合容器

默认全部展开(工具配置 initialExpandLevel: -1)。复杂图(>30 节点)建议先折一遍:

  1. 先全展开看整体结构
  2. 折叠掉非重点分支(如示例数据、附录、参考链接)
  3. 留下当前要讲的支保持展开
  4. 点”自适应”重排
  5. 导出 SVG / PNG

导出会保留当前折叠状态——这是 feature 不是 bug,可以同一份大纲导出多张不同聚焦的图。

与 mermaid mindmap 的 4 点真实差距

很多人问:[[mermaid]] 已经有 mindmap 了,为什么还要 markmap?

1. 语法门槛

# markmap
## 分支A
- 要点1
- 要点2

vs

mindmap
  root((主题))
    分支A
      要点1
      要点2

mermaid 用缩进表示层级——必须严格对齐(通常 2 空格或 4 空格),少一个空格就报错。markmap 直接复用 Markdown,你写 README 的方式就能出图

2. 富文本支持

  • markmap:加粗 / 链接 / 代码 / emoji / 表格 / 公式(受限)
  • mermaid mindmap:基本只支持纯文本 + 图标(::icon(fa fa-book)),没有加粗、链接

3. 视觉精致度

  • markmap:渲染基于 d3.js,节点距、布线、过渡动画都更细腻
  • mermaid mindmap:和它其它图表风格一致——朴素、统一,没有专门优化

4. 生态与集成

  • mermaid:GitHub / GitLab / Notion / 飞书 / 语雀都原生支持,你贴代码进 Markdown 就能出图
  • markmap:渲染需要专门的工具或插件(如 VSCode 插件、独立网页版)

选择策略

场景选什么
技术文档配图、提交到 GitHubmermaid mindmap
复杂层级(4+ 层)、需要富文本markmap
个人长文大纲、读书笔记markmap
给同事远程协作看mermaid(生态广)
视觉精致度高的演示图markmap

5 类常见坏写法

1. 漏了根节点 #

## 分支A          ❌
- 要点1

没有 # 根节点,markmap 会用第一个 ## 兜底当根——但导图中心节点会缺失,外观奇怪。始终用 # 起头

2. 缩进混用 Tab 和空格

- 父
    - 子1          ← 4 空格
	- 子2          ← Tab

混用会被解析成不同层级,子1 和子2 在导图里平级看起来对,但格式校验严格的解析器(不同版本 markmap-lib)行为不一致。统一用 4 空格(不要用 Tab,不要用 2 空格)。

3. 节点文字超过 30 字

markmap 不会自动换行,长标题会撑出图框。修复:

  • 把长句拆分成多个短节点(一条主干 + 几条子要点)
  • 或用 <br> 强制换行(inline HTML 支持)
## 这个非常长的分支标题就需要换行<br>第二行内容

4. 表格塞了 10+ 行

markmap 节点里可以嵌表格,但表格行数 >5 时节点会变成一个大方块,破坏导图视觉重心。表格 ≥ 5 行的话改成列表或者放正文。

5. 把 mermaid 语法误写进 markmap

graph TD           ❌  这是 mermaid 不是 markmap
  A --> B

markmap 只认 Markdown。两个工具用法完全不同——别复制错。

实战场景

读书笔记

# 《心流》摘要

## 核心概念
- **心流** = 全神贯注的最佳体验
- **挑战 vs 技能** 平衡

## 进入心流的 9 个条件
1. 清晰的目标
2. 即时反馈
3. 挑战与能力匹配
...

## 应用
- 工作中:把任务拆到刚好挑战
- 生活中:减少干扰源

→ 导出 SVG 贴回笔记顶部当目录图。

项目分解

# 工具站 V2

## 前端
- ✓ Astro 框架
- ✓ Tailwind v4
- [ ] PWA 离线缓存

## 内容
- ✓ 193 个工具
- [ ] 教程扩充到 200+

## 运营
- [ ] 谷歌广告接入
- [ ] SEO 优化

勾选框会在导图里渲染。

知识结构

# 前端工程化

## 构建
- Webpack
- Vite
- ESBuild

## 类型
- TypeScript
- Flow
- JSDoc

## 框架
- React
- Vue
- Svelte
- **Astro** *(本站使用)*

加粗 + 斜体让重点节点突出,导出后贴博客或简历。

默认不做的事

  • 不解析 Markdown 之外的元数据——Markdown 顶部的 YAML frontmatter 会被当成普通段落渲染
  • 不自动加配色——节点颜色统一跟随主题,不像 XMind 给每支分支一个色(要分色得改 CSS 变量)
  • 不联网渲染数学公式 / 代码高亮——见上文”富文本边界”

如果需要复杂的图表(流程图、时序图、ER 图等),用 [[mermaid]];如果需要自由手绘(白板涂鸦、架构示意),用 [[whiteboard]];如果是写 Markdown 文档本身,用 [[md-editor]]。markmap 专攻”Markdown → 思维导图”这一件事,用对场景就是最快的脑图工具

❓ 常见问题

markmap 最简语法是什么?标题和列表怎么对应到导图层级?

# 是根节点(一级标题),## ### #### 是 2/3/4 层子节点。同层级的并列项用 - 列表项(再嵌套用 4 空格缩进)。比如 # 主题 + ## 分支A + ## 分支B + - 要点1 + - 要点2,会生成三层导图:主题在中心,两支分支从中心放射,每支下挂列表要点。记忆口诀:标题决定主干,列表当树叶。同一份 Markdown 既可以当 README 又可以当导图源,写一次两用。

支持 加粗 、链接、代码、emoji、KaTeX 公式吗?哪些会在导出时丢失?

支持但有边界。基础 inline 富文本完全支持:加粗 / *斜体* / code / 链接 / emoji / 表格 / 列表勾选 都能正常出现在节点里,预览和导出 SVG/PNG 都保留。有限制的两类:(1) KaTeX 数学公式$x^2$)—— 本工具完全离线运行,不连 CDN,所以数学符号的字体不会被加载,公式渲染成纯文本字符。(2) 代码块语法高亮——同样依赖 CDN 高亮库,本地版只保留代码内容,不上色。如果一定需要公式或高亮,建议把这些内容放在文档正文,在思维导图里只留概念名。

怎么折叠 / 展开节点?导出的图会保留当前折叠状态吗?

点节点上的圆点展开或折叠整支。默认全部展开(initialExpandLevel: -1)。导出行为分两种:(1) 导出 SVG——保留当前折叠状态(折叠的支不会出现在文件里)。(2) 导出 PNG——同样保留当前状态。所以推荐流程:先把图调到合适粒度(折掉太细的支、展开重点支),再导出。Tip:图大时点"自适应"按钮把整张图缩到适合屏幕,再决定哪些折叠。

markmap 和 [[mermaid]] 的 mindmap 语法到底差多少?什么时候该选哪个?

最大差异是写法门槛。Mermaid 的 mindmap缩进表示层级,必须严格 4 空格 / 2 空格对齐,写错就报错;markmap 用 Markdown 原生标题 + 列表,复用你已有的笔记习惯——README、博客大纲、会议纪要都能直接转。功能差异:(1) 专注度——markmap 只画思维导图,渲染更精致;mermaid mindmap 是它 14 种图表之一,外形相对朴素。(2) 富文本——markmap 支持加粗、链接、代码、emoji;mermaid mindmap 只支持纯文本和简单图标(::icon(fa fa-book))。(3) 导出——markmap 直接输出 SVG/PNG,mermaid 走整体导出流程。选择策略:技术文档配图、同事看图用 mermaid(生态广,GitHub 原生渲染);个人笔记、长文大纲、知识整理用 markmap(语法更顺手)。

为什么我的导图节点文字溢出 / 被截断?图很大要怎么看全?

markmap 默认会按内容自适应宽度,理论上不应截断。如果出现:(1) 节点文字超过 1 行——markmap 不会自动换行,长标题(>30 字)会撑得很宽。修复:在 Markdown 里把长标题改短,或用 <br> 强制换行(HTML 标签在 inline 内支持)。(2) 导出 SVG 后节点文字被裁——多半是导出时 viewBox 没把折叠后的小图框对齐,先点"自适应"再导。看全大图的几种方式:① 鼠标滚轮 = 缩放;② 拖拽 = 平移;③ 点"自适应"按钮一键重排;④ 折叠掉不关心的支。

导出的 SVG 用来贴文档时,背景透明 / 文字颜色不对怎么办?

SVG 文字颜色和当前主题绑定——亮色页面导出来文字是深色,暗色页面导出文字是浅色。所以贴到反向背景的文档会看不清。解决方法:(1) 切到与目标文档背景一致的主题再导出(如要贴白底文档,切到亮色模式)。(2) 导出 PNG 时勾选"含背景"——会用主题卡片色填充,不会有"透明背景看不清字"的问题。(3) 高级用法:在 Illustrator / Inkscape 打开 SVG 修改颜色 token——本工具用 CSS 变量绑定颜色,导出时已硬编码进 SVG。

🧠 打开 思维导图 Markdown 标题/列表实时生成思维导图·拖拽缩放·折叠展开·SVG/PNG 导出·分享链接·本地渲染