Kaoyan knowledge-mindmap
自动分析知识点目录结构,生成 Excalidraw 格式的详细思维导图。适用于考研数学、专业课等知识体系的可视化整理。触发词包括"知识点思维导图"、"生成思维导图"、"知识结构图"、"目录结构图"。
install
source · Clone the upstream repo
git clone https://github.com/Treasoni/kaoyan
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Treasoni/kaoyan "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/knowledge-mindmap" ~/.claude/skills/treasoni-kaoyan-knowledge-mindmap && rm -rf "$T"
manifest:
.claude/skills/knowledge-mindmap/skill.mdsource content
Knowledge Mindmap Generator v2.1
自动分析知识点目录结构,生成 Excalidraw 格式的详细思维导图。
v2.1 新特性(最新)
- 按序号顺时针排列:节点位置严格按照模块序号顺序顺时针排列,而非随机分布
- 序号识别算法:自动从文件夹名提取序号(如
→ 0)0-数列的概念 - 角度计算优化:从顶部(-90°)开始按序号顺时针分布各节点
v2.0 新特性
- 智能布局算法:根据模块数量自动分布,避免重叠
- 多格式导入:支持 Markdown 层级列表、JSON 笔记、Excel 表格
- 图形丰富性:圆角、阴影、图标区分模块类型
- 交互性增强:超链接到笔记原文,点击即可跳转
- 自动分层折叠:模块过多时生成折叠结构
使用方法
基本用法
/knowledge-mindmap [目录路径]
高级选项
/knowledge-mindmap [目录路径] --format=[simple|detailed|folded] /knowledge-mindmap [目录路径] --style=[compact|expanded|tree] /knowledge-mindmap [目录路径] --max-modules=[数字]
| 参数 | 说明 | 默认值 |
|---|---|---|
| 输出格式:simple(简洁)/ detailed(详细)/ folded(折叠) | detailed |
| 布局样式:compact(紧凑)/ expanded(展开)/ tree(树形) | expanded |
| 折叠模式下核心模块最大数量 | 5 |
工作流程
1. 目录探索阶段
用户指定目录 ↓ 探索目录结构 ↓ 识别知识点模块 ↓ 提取核心内容
自动识别的关键文件:
- 模块总索引📑 索引.md
- 学习进度追踪📊 学习进度.md
- 全章总结📝 章节总结.md
- 模块说明README.md- 各知识点笔记文件
2. 内容分析阶段
从笔记中提取:
- 模块标题和星级(⭐⭐⭐⭐⭐)
- 核心概念和定义
- 重要定理和公式
- 解题方法和技巧
- 易错点和注意事项
3. 智能布局阶段
布局算法流程:
分析模块数量和层级 ↓ 提取模块序号并排序 ↓ 选择最优布局模板 ↓ 按序号顺时针计算各模块坐标 ↓ 自动调整避免重叠 ↓ 生成连接线
智能布局算法
模块序号识别与排序
核心原则:节点位置按照模块序号顺序顺时针排列,而非随机分布。
def extract_module_number(folder_name): """从文件夹名提取序号 示例: "0-数列的概念" → 0 "1-用定义" → 1 "7-收敛速度问题" → 7 """ import re match = re.match(r'(\d+)-', folder_name) return int(match.group(1)) if match else 999 # 模块排序 sorted_modules = sorted(modules, key=lambda m: extract_module_number(m['name']))
模块数量自适应
| 模块数量 | 布局策略 | 画布尺寸 |
|---|---|---|
| 1-3 个 | 线性布局 | 800×400 |
| 4-6 个 | 放射状布局 | 1000×600 |
| 7-10 个 | 环形布局 | 1200×800 |
| 11+ 个 | 分层折叠 | 1400×900 |
坐标计算公式(按序号顺时针)
放射状布局(4-6 个模块)- 顺时针排列:
中心坐标: (canvasWidth/2, canvasHeight/2) 模块角度: 360° / 模块数量 模块距离: min(canvasWidth, canvasHeight) * 0.35 # 按序号排序后,从顶部(-90°)开始顺时针排列 模块i坐标(i为排序后的序号,从0开始): angle_degrees = -90° + (360° / 模块数量) * i angle_radians = angle_degrees * π / 180 x = centerX + distance * cos(angle_radians) y = centerY + distance * sin(angle_radians) 示例:4个模块(0,1,2,3) 模块0: -90° (顶部) 模块1: 0° (右侧) 模块2: 90° (底部) 模块3: 180° (左侧)
环形布局(7-10 个模块)- 顺时针排列:
内环(核心模块): 距离中心 150px 外环(普通模块): 距离中心 300px 辅助系统: 底部独立区域 # 从顶部开始按序号顺时针排列各模块 角度起始: -90°(12点钟方向) 角度间隔: 360° / 模块数量 排序后依次放置
示例:数列极限(8个模块 0-7)
模块0: -90° → 顶部 模块1: -45° → 右上 模块2: 0° → 右侧 模块3: 45° → 右下 模块4: 90° → 底部 模块5: 135° → 左下 模块6: 180° → 左侧 模块7: 225° → 左上
避免重叠检测
def check_overlap(box1, box2, margin=20): """检测两个矩形是否重叠,margin 为安全间距""" return not ( box1.x + box1.width + margin < box2.x or box2.x + box2.width + margin < box1.x or box1.y + box1.height + margin < box2.y or box2.y + box2.height + margin < box1.y ) def adjust_position(box, others, step=10, max_attempts=50): """自动调整位置避免重叠""" for _ in range(max_attempts): if all(not check_overlap(box, other) for other in others): return box box.x += step return box
多格式导入支持
1. Markdown 层级列表
输入格式:
- 数列极限 - 0-数列的概念 - 数列定义 - 子列概念 - 2-用性质 ⭐⭐⭐⭐⭐ - 唯一性 - 有界性 - 保号性
解析规则:
- 缩进表示层级关系
标记核心模块⭐⭐⭐⭐⭐- 子项自动成为模块内容
2. JSON 笔记格式
输入格式:
{ "title": "数列极限", "modules": [ { "id": "module-1", "title": "用性质", "level": 5, "content": ["唯一性", "有界性", "保号性"], "file": "2-用性质/README.md" } ] }
3. Excel 表格格式
| 列名 | 说明 | 必填 |
|---|---|---|
| 模块ID | 唯一标识 | 是 |
| 模块名称 | 显示标题 | 是 |
| 层级 | 1-5星 | 否 |
| 内容 | 分号分隔 | 否 |
| 链接 | 笔记路径 | 否 |
图形丰富性
模块类型图标
| 类型 | 图标 | 颜色 | 用途 |
|---|---|---|---|
| 定义 | 📖 | | 概念、定义类 |
| 定理 | 📐 | | 定理、性质类 |
| 方法 | 🔧 | | 解题方法类 |
| 公式 | 📝 | | 重要公式类 |
| 易错 | ⚠️ | | 易错点提醒 |
| 核心 | ⭐ | | 五星重点 |
视觉样式
{ "核心模块": { "strokeWidth": 3, "strokeColor": "#f59e0b", "backgroundColor": "#fef3c7", "roundness": {"type": 3}, "shadow": true }, "普通模块": { "strokeWidth": 2, "strokeColor": "#3b82f6", "backgroundColor": "#eff6ff", "roundness": {"type": 3}, "shadow": false }, "辅助系统": { "strokeWidth": 2, "strokeColor": "#9ca3af", "strokeStyle": "dashed", "backgroundColor": "#f3f4f6" } }
圆角设置
{ "roundness": {"type": 3} // 圆角矩形 }
交互性增强
超链接功能
为每个模块添加指向原笔记的链接:
{ "id": "box-2", "type": "rectangle", "link": "2-用性质/README.md", ... }
链接格式:
- 相对路径:
2-用性质/README.md - Wiki链接:
[[2-用性质/README]] - 外部链接:
https://...
点击跳转
用户在 Excalidraw 视图中点击模块时:
- 自动打开对应的笔记文件
- 或跳转到指定章节
实现 JSON
{ "id": "module-properties", "type": "rectangle", "x": 520, "y": 50, "width": 200, "height": 200, "link": "obsidian://open?vault=考研复习&file=考研数学/高数-数列极限/2-用性质/README", "strokeColor": "#f59e0b", ... }
自动分层折叠
折叠策略
当模块数量超过阈值(默认10个)时:
- 识别核心模块:根据星级和重要性
- 折叠次要模块:归入"更多..."折叠区
- 保留辅助系统:始终显示在底部
折叠模式布局
[核心模块1] ↑ [核心模块2] ←← [中心主题] →→ [核心模块3] ↓ [更多模块...] ← 点击展开 ↓ [辅助系统]
展开后的子图
[更多模块] ├── 模块4: 四则运算 ├── 模块5: 收敛速度 └── 模块6: 压缩映射
JSON 实现
{ "id": "folded-group", "type": "rectangle", "x": 500, "y": 600, "width": 200, "height": 80, "strokeColor": "#9ca3af", "strokeStyle": "dashed", "text": "更多模块(点击展开)\n+4 个模块", "link": "#expanded-view" }
输出格式
Obsidian Excalidraw 格式
--- excalidraw-plugin: parsed tags: [excalidraw, mindmap] --- ==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== # Excalidraw Data ## Text Elements %% ## Drawing \`\`\`json { "type": "excalidraw", "version": 2, "source": "https://github.com/zsviczian/obsidian-excalidraw-plugin", "elements": [...], "appState": { "gridSize": null, "viewBackgroundColor": "#ffffff" }, "files": {} } \`\`\` %%
设计规范
颜色编码
| 元素类型 | 边框颜色 | 背景颜色 | 用途 |
|---|---|---|---|
| 中心节点 | | | 椭圆形,主题核心 |
| 五星模块 | | | 核心考点,粗边框 |
| 四星模块 | | | 重要内容 |
| 普通模块 | | | 基础知识点 |
| 辅助系统 | | | 虚线边框 |
| 折叠区 | | | 可展开区域 |
尺寸规范
| 模块类型 | 宽度 | 高度 | 字体大小 |
|---|---|---|---|
| 中心节点 | 300-400px | 120-140px | 28-32px |
| 五星模块 | 200-240px | 200-280px | 15px |
| 普通模块 | 200-260px | 150-200px | 15px |
| 辅助系统 | 500-620px | 180-200px | 14px |
| 折叠区 | 200px | 80px | 14px |
JSON 元素模板
带链接的核心模块
{ "id": "star-module-1", "type": "rectangle", "x": 300, "y": 20, "width": 240, "height": 280, "angle": 0, "strokeColor": "#f59e0b", "backgroundColor": "#fef3c7", "fillStyle": "solid", "strokeWidth": 3, "strokeStyle": "solid", "roughness": 1, "opacity": 100, "groupIds": [], "frameId": null, "index": "a6", "roundness": {"type": 3}, "seed": 112, "version": 1, "versionNonce": 113, "isDeleted": false, "boundElements": [], "updated": 1751928342106, "link": "obsidian://open?vault=考研复习&file=考研数学/高数-数列极限/2-用性质/README", "locked": false }
带图标的文本
{ "id": "text-star-1", "type": "text", "x": 320, "y": 30, "width": 200, "height": 260, "angle": 0, "strokeColor": "#1e40af", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 2, "strokeStyle": "solid", "roughness": 1, "opacity": 100, "groupIds": [], "frameId": null, "index": "a7", "roundness": {"type": 3}, "seed": 114, "version": 1, "versionNonce": 115, "isDeleted": false, "boundElements": [], "updated": 1751928342106, "link": null, "locked": false, "text": "2-用性质\n⭐⭐⭐⭐⭐\n\n• 唯一性\n• 有界性\n• 保号性\n - 脱帽法\n - 戴帽法\n - 最值问题", "rawText": "2-用性质\n⭐⭐⭐⭐⭐\n\n• 唯一性\n• 有界性\n• 保号性\n - 脱帽法\n - 戴帽法\n - 最值问题", "fontSize": 15, "fontFamily": 5, "textAlign": "left", "verticalAlign": "top", "containerId": null, "originalText": "2-用性质\n⭐⭐⭐⭐⭐\n\n• 唯一性\n• 有界性\n• 保号性\n - 脱帽法\n - 戴帽法\n - 最值问题", "autoResize": true, "lineHeight": 1.25 }
智能连接线
{ "id": "arrow-smart-1", "type": "arrow", "x": 600, "y": 300, "width": 150, "height": 180, "angle": 0, "strokeColor": "#f59e0b", "backgroundColor": "transparent", "fillStyle": "solid", "strokeWidth": 2, "strokeStyle": "solid", "roughness": 1, "opacity": 100, "groupIds": [], "frameId": null, "index": "a22", "roundness": {"type": 2}, "seed": 144, "version": 1, "versionNonce": 145, "isDeleted": false, "boundElements": [], "updated": 1751928342106, "link": null, "locked": false, "points": [[0, 0], [-80, -160], [-150, -180]], "lastCommittedPoint": [0, 0], "startBinding": {"elementId": "center", "focus": 0, "gap": 10}, "endBinding": {"elementId": "star-module-1", "focus": 0, "gap": 10}, "startArrowhead": null, "endArrowhead": "arrow" }
文本处理规则
字符替换
| 原字符 | 替换为 | 说明 |
|---|---|---|
| | 双引号 |
| | 圆括号 |
文本格式
模块标题 ⭐⭐⭐⭐⭐ (如有) • 要点1 - 子要点 • 要点2 • 要点3
字体规范
- 字体家族:
(Excalifont)fontFamily: 5 - 行高:
lineHeight: 1.25 - 对齐方式:
,textAlign: "left"verticalAlign: "top"
自动保存流程
1. 生成文件名
格式:
{主题名称}.思维导图.md
示例:
数列极限.思维导图.md函数极限与连续.思维导图.md
2. 保存位置
保存到用户指定的目录,或当前工作目录。
3. 用户反馈
生成完成后报告:
- 文件保存位置(可点击跳转)
- 如何在 Obsidian 中查看
- 思维导图结构概览
- 点击模块可跳转到原笔记
常见问题排查
JSON 语法错误
问题:思维导图无法显示,提示解析错误。
检查项:
- 确保所有字符串值正确引用
- 检查是否有未闭合的括号
- 确保数值类型没有多余引号(如
应为"x": 730"
)"x": 730 - 检查
数组格式是否正确points
布局问题
问题:元素重叠或位置不当。
解决方案:
- 使用智能布局算法自动调整
- 设置
紧凑布局--style=compact - 减少显示的模块数量
链接不工作
问题:点击模块无法跳转。
检查项:
- 确保
字段使用正确的 Obsidian URI 格式link - 检查文件路径是否正确
- 确保 vault 名称匹配
示例输出
思维导图已生成! 保存位置:[[考研数学/高数-数列极限/数列极限.思维导图.md]] 使用方法: 1. 在 Obsidian 中打开此文件 2. 按 Ctrl+E(Mac: Cmd+E)切换到阅读模式 3. 点击任意模块可跳转到原笔记 结构概览: - 中心主题:数列极限 - 核心模块(⭐⭐⭐⭐⭐):用性质、海涅定理、夹逼准则、单调有界 - 基础模块:数列概念、定义、四则运算、收敛速度 - 辅助系统:索引、进度、总结、错题本 交互功能: ✓ 点击模块跳转到原笔记 ✓ 五星模块金色高亮 ✓ 智能布局避免重叠
注意事项
- JSON 语法严格:确保 JSON 格式完全正确,任何语法错误都会导致解析失败
- 坐标系统:左上角为原点 (0,0),x 向右增大,y 向下增大
- 元素 ID 唯一:每个元素必须有唯一的
id - 文本长度:避免单个文本元素过长,适当分行
- 星级标注:保留原有的星级标注(⭐),便于识别重点
- 链接格式:使用 Obsidian URI 格式确保跳转功能正常
- 模块数量:超过10个模块建议使用折叠模式