用Obsidian解析Markdown自动生成人物关系Canvas白板
在 Obsidian 里用 Markdown 管理小说设定时人物关系白板是最容易失控的部分。人物卡可以一篇篇拆开写但“叶辰和苏浅浅是恋人”“陈枫是叶辰的宿敌”这类关系一旦分散到十几篇笔记浏览起来就非常吃力。正好Obsidian 的插件机制允许我们写一个很小的生成器按固定语法解析当前 Markdown 笔记中的人物与关系一键生成可拖拽的 Canvas 白板文件。这篇文章不要求你做过插件开发只需要读过一点 JS理解正则表达式的基本写法就能跟着把这条链路跑通。这套方案不是要用复杂的数据结构也不是要引入数据库而是把“人物关系”直接写成 Markdown 里可读、可维护的文本标记再用脚本把这些标记翻译成 Obsidian Canvas 文件。Canvas 文件在 Obsidian 里本质是 JSON节点是人物边是关系打开后可以自由拖拽、缩放、加标签。整个过程保留了 Markdown 作为源数据又让关系图可以交互查看兼顾创作习惯和可视化需求。1. 为什么 Obsidian 原生图谱不是人物关系图1.1 小说设定党的真实痛点写小说的人用 Obsidian 建设定库时通常会为每个角色建一张独立人物卡记录身份、性格、经历、时间线。人物少时还好一旦超过十个人问题就出现了读者和作者都需要知道“谁和谁认识”“谁背叛了谁”“谁在第几章才出场”这些信息藏在人物卡的正文里看任何一张卡都无法获得完整关系网络。手动维护一张白板也可以在 Canvas 里创建人物节点、连线、填标签。可是小说剧情是经常改的每调整一次人物关系就要在画布上找节点、改连线、换标签。次数一多白板很快就会和正文脱节。更常见的情况是作者宁可重新画一张也不愿意去更新旧图最终库里出现多个版本的关系图没人知道哪个是最新的。这类问题的本质是关系数据的维护成本太高。如果能让程序从 Markdown 正文里自动读取“谁和谁是什么关系”再重新生成一张白板那么作者只需要维护文字关系图永远可以和正文保持一致。这正是本文要做的自动生成工具的价值。1.2 Graph View 与 Canvas 的本质差异Obsidian 自带的 Graph View 常被误认为“关系图谱”。它确实能展示节点和连线但它的节点是笔记文件边是笔记之间的双链或标签关系。它回答的问题是“哪些笔记通过链接或标签互相引用”而不是“叶辰和苏浅浅是恋人”。Canvas 则不同。Canvas 文件里的节点可以是任意文本、Markdown 笔记、图片、网页卡片边可以带文字标签。它更适合手工整理思路也适合脚本生成可视化白板。两者对比如下对比项原生 Graph View手动 Canvas解析生成的 Canvas节点含义笔记文件任意文本或文件人物、势力、地点边含义笔记间的链接引用自由连线带标签的人物关系布局控制由图谱算法决定完全手动脚本按算法生成可继续手动调整数据维护依赖链接和标签依赖手工拖动依赖 Markdown 标记适合场景查看笔记库整体结构一次性头脑风暴批量生成、按正文持续更新理解了区别就会明白为什么一条“生成人物关系白板”的命令比原生图谱更接近小说设定的需求。它不是替代 Graph View而是把 Markdown 里的语义关系变成真正的可视化画布。1.3 为什么选择“解析 Markdown 生成 Canvas”方案可以有很多用 Mermaid 手写关系图用 Dataview 渲染表格用第三方关系图谱插件或者写一个自定义插件。最终选择“解析 Markdown 生成 Canvas”的原因主要有三点。第一源数据简单。人物和关系仍然写在与正文相同或相邻的 Markdown 文件里不需要单独维护一个数据库也不会依赖某个模板的复杂字段。写作时顺手写一行关系脚本就能识别。第二生成结果可交互。Canvas 不是一张静态图生成之后还可以继续拖动节点、调整连线位置、标注剧情阶段。Mermaid 生成的图虽然也能看但无法像 Canvas 一样自由整理