目前 2.6.3 的制卡逻辑是这样的:
Step 1. 在文档中选中文字并标记(挖空);
Step 2. 点击左侧的段落图标 -> 闪卡;
Step3. 将该段落加入某一卡包;
以上流程有这样几个缺点:① 分散用户精力,本来用户只需要专注于制卡本身,而上述机制会让用户纠结把卡放入哪个卡包。② 制卡过程繁琐,选中文字并标记(挖空)其实就已经完成制卡了,没必要再多一个选择卡包的过程。③ 上述机制中一旦用户想变更整篇文章的卡包,就要手动地一个一个修改。④ 无法直观地看出某张卡片属于哪个卡包,必须通过上述的第二个步骤才能看出。
而取消卡包后,一切将变得很自然。比如某用户的文档树结构如下:
- 数学
- 分析
- 数学分析
- 实分析
- 复分析
- 泛函分析
- 代数
- 高等代数
- 抽象代数
- 几何
- 解析几何
- 微分几何
- 分析
- 历史
- 中国史
- 唐史
- 宋史
- 元史
- 明史
- 世界史
- 欧洲史
- 阿拉伯史
- 美国史
- 日本史
- 中国史
而上述结构就是天然的卡包,用户完成挖空后,不需要再去选择该卡片属于哪一个卡包。现代化的间隔重复笔记软件 RemNote 就是这样的使用逻辑。
举个例子,比如在《高等代数》这篇文档里面有一个段落是行列式的定义,在此处完成选中文字并标记后,这张卡片很自然地属于 高等代数
、代数
、数学
这 3 个卡包,无需用户再去选择,并且在复习卡片时,不管用户想复习所有数学知识,还是只想复习高等代数的知识,都会复习到这张卡片。
为了方便描述,我将用 RemNote 进行视频( BV1VW4y1378n )演示,来看看 RemNote 是如何解决卡片多分类问题以及 DailyNote 卡片分类问题的。
RemNote 这款软件也是支持 DailyNote 功能的。从视频中可以看出,针对 DailyNote 爱好者,RemNote 也是提供了很优雅的卡片(多)分类解决方案。
为什么我坚持采用文档树即卡包的分类方案?因为对于文件夹爱好者,同一篇文章的卡片很自然地就应该属于同一分类,而重复进行前文中提到的 Step2 和 Step3 是毫无意义的,这一过程让人抓狂。
关于纯粹的 DailyNote 用户,我提几点疑问。既然纯粹的 DailyNote 用户在记笔记时不喜欢分类,为什么到了制卡的时候,突然就要分类了?既然最终还是有分类的需求,为什么不能在制卡之前就完成分类呢?我理解,为了减轻记录的压力,所以不分类,但知识总是需要消化吸收的,早晚还是要对部分有价值的知识进行分类整理。我提出的“文档树即卡包”的方案只不过是让你们把对卡片的分类换种方式提前一步进行而已,并没有给你们添堵。
我又考虑了一下,可以采用一种妥协的方案,使 DailyNote 用户和文件夹用户都满意,从而避免争论。
那就是提供 2 个不同的闪卡复习入口。
第一个入口就是现有方案,通过左上角闪卡图标进入。
第二个入口就是,像 RemNote 一样,在文档树的位置右键。
这样一来,DailyNote 用户无需改变现有的习惯(虽然我不是很赞同这一习惯);而文件夹用户也能实现无感分类了。
借着这个机会,我顺便把 RemNote 的优势介绍了,供开发者参考,也给大家做一个科普。
在 RemNote 中,一篇文档就是一个卡包。当然,这里并不是真正的为这篇文档创建了一个卡包,而是通过类似于查询语句的方式得到了这篇文档(及其子文档)中的所有卡片,在用户看来感觉就像是一个卡包一样。一张卡片,不仅属于当前文档的卡包,同时属于它的父文档的卡包以及祖先文档的卡包。比如“行列式的定义”这张卡片不仅属于“高等代数”卡包,同时属于“代数”、“数学”这两个卡包。思源笔记比起 obsidian、logseq 来说拥有完美的文档树,如果这一优势不被闪卡功能好好利用的话,其实是相当可惜的。
有了一篇文档就是一个卡包这一基础,进一步 RemNote 就可以实现一个标签就是一个卡包,可以简单理解为 RemNote 自动为每个标签都创建了一个页面,所有打上了这个标签的块都嵌入到了这个页面内。思源笔记的标签系统还能形成标签树,如果利用好的话也能成为独特的优势。在早些时候的讨论中我就提到过,标签是实现 DailyNote 卡片分类的一种解决方案,具体操作可以看这个视频( BV13A411o7yK):
更进一步,RemNote 甚至可以实现自由组合卡包。RemNote 提供了一个功能叫做 Search Portal,可以在文档中插入一个搜索块,将带有某一标签、某一关键字的块嵌入进来。借助 Search Portal,用户可以实现自由组合卡包,比如可以将不同标签的块、含有特定关键字的块、嵌入块放进同一篇文档中,这样就得到了一个组合卡包。思源笔记中也有类似的功能,那就是 sql 语句查询,如果利用起来的话,也可以实现类似效果,甚至更个性化的效果。具体操作看下面这个视频( BV1X84y1h7bK):