旁注式笔记系统的思考(一)
需要思考的问题
先罗列一下自己的疑问:
- 前端是展示还是编辑系统?
- 两篇笔记的关联方式,锚点定位机制,是否双向链接?
- 源文本与旁注,是在同一篇文章内部——类似脚注锚点的方式?还是相互独立,对源文本无侵入的方式?
- 上述两者必定需要关联,要么是类似脚注锚点的关联,要么是两篇独立文章之间的关联。
- 脚注锚点式的关联,在每次添加旁注时,需要在源文本里新增锚点(锚点形式暂不考虑),这会对源文本产生侵入。有侵入,为何不在同篇笔记内进行记录?独立的意义是什么?
- 独立的意义之一是可以将笔记部分单独抽象出来。
- 应该让 Halo 适配 Obsidian 的特性,因为 Obsidian 的输入便捷性才是我们需要的核心东西。像文章引用、双向链接,在 Obsidian 中使用是如此便利。此外,引发我们的思考,是否应该适配文本块这样的非标准 Markdown 语法特性的东西进入 Halo?
可能的方案:使用 Obsidian 的文本块实现旁注
例如原文本:
将
tocbot的锚点链接转换策略改成和 Obsidian 编辑器一致,则能减少不必要的转换。缺点是,编码后的空格等字符确实不如-字符直观,在浏览器的地址栏可能看起来没那么直观。[1](旁注式笔记系统的思考.md#^567bf4)
链接下方笔记:
也就是说,编码不便于直观阅读。^567bf4
这种方案具有以下几种优势:
- 旁注的定位,不依赖外部信息,全在链接中。
- 符合 Obsidian 的 "ctrl+ 鼠标 " 快捷预览的特性。
这种方案需要实现新的特性,那就是 Obsidian 的文本块引用。大致实现路径如下:
- 前端。监听路由,对 Obsidian 文本块语法
[1](旁注式笔记系统的思考.md#^567bf4)中锚点的定位事件。 - 双向链接的实现。每次编辑提交时,建立一个锚点表,保存锚点
^567bf4所对应的文章,即Map<锚点, 锚点所属文章id>。使用时,直接通过锚点反查链接文章。 - 反向链接。每次编辑提交时,对文章内所有内部链接,建立一个
Map<被引用文章id, 当前文章id>的关系。
双向链接的实现:魔改编辑器或提交文章快照的 Api 后端逻辑
分析略。
魔修。借用 Obsidian 维护的双向链接和文本块信息,将每篇文章的反向链接、文本块引用,静态的渲染到每篇文章里。缺点明显,假如文章位置更改,导致链接信息修改,它不反应在文章内容修改里。不灵活,不便于观察。