用Obsidian解析Markdown自动生成人物关系Canvas白板
2026/9/18 20:55:14 网站建设 项目流程

在 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 一样自由整理,

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询