Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持基于文档复习闪卡 #7057

Closed
luo-chuan opened this issue Jan 12, 2023 · 32 comments
Closed

支持基于文档复习闪卡 #7057

luo-chuan opened this issue Jan 12, 2023 · 32 comments
Assignees
Milestone

Comments

@luo-chuan
Copy link

在什么情况下你需要该特性?In what scenarios do you need this feature?

目前2.6.3的制卡逻辑是这样的:

Step 1. 在文档中选中文字并标记;

Step 2. 点击左侧的段落图标 -> 闪卡;

Step3. 将该段落加入某一卡包;

以上流程有这样几个缺点:① 分散用户精力,本来用户只需要专注于制卡本身,而上述机制会让用户纠结把卡放入哪个卡包。② 制卡过程繁琐,选中文字并标记其实就已经完成制卡了,没必要再多一个选择卡包的过程。③ 上述机制中一旦用户想变更整篇文章的卡包,就要手动地一个一个修改。④ 无法直观地看出某张卡片属于哪个卡包,必须通过上述的第二个步骤才能看出。

描述可能的最优解决方案 Describe the optimal solution

而取消卡包后,一切将变得很自然。比如某用户的文档树结构如下:

  • 数学
    • 分析
      • 数学分析
      • 实分析
      • 复分析
      • 泛函分析
    • 代数
      • 高等代数
      • 抽象代数
    • 几何
      • 解析几何
      • 微分几何
  • 历史
    • 中国史
      • 唐史
      • 宋史
      • 元史
      • 明史
    • 世界史
      • 欧洲史
      • 阿拉伯史
      • 美国史
      • 日本史

而上述结构就是天然的卡包,用户完成选中文字并标记后,不需要再去选择该卡片属于哪一个卡包。现代化的间隔重复笔记软件RemNote就是这样的使用逻辑。

举个例子,比如在《高等代数》这篇文档里面有一个段落是行列式的定义,在此处完成选中文字并标记后,这张卡片很自然地属于高等代数代数数学这3个卡包,无需用户再去选择,并且在复习卡片时,不管用户想复习所有数学知识,还是只想复习高等代数的知识,都会复习到这张卡片。

描述候选的解决方案 Describe the candidate solution

No response

其他信息 Other information

No response

@88250
Copy link
Member

88250 commented Jan 12, 2023

用户不使用文档树的话这个方案会有问题,所以不考虑了,谢谢。

@88250 88250 closed this as completed Jan 12, 2023
@luo-chuan
Copy link
Author

用户不使用文档树的话这个方案会有问题,所以不考虑了,谢谢。

如果一个用户对自己的笔记都不做分类的话,那我不相信他会对闪卡进行分类,况且当前的机制对管理卡片分类也极其不方便,参考我上面提到的第③④个缺点,甚至我不觉得他有使用闪卡的需求。

一般来说,使用闪卡的用户,都是为了学习某一领域的知识或者应付考试,而学习知识必然是系统性的,也就是要构建起知识的结构。也就是说,会使用闪卡的这部分用户必然是对笔记有树状分类的。我是建议思源引入间隔重复功能的用户之一( #6462 ),并且我使用过Remnote,所以我很清楚用户的需求。

@luo-chuan
Copy link
Author

@L-M-Sherlock 叶神怎么看?

@88250
Copy link
Member

88250 commented Jan 12, 2023

使用文档树有一些局限,具体来说比如这两个情况:

  • 不是所有文档树上的文档都需要制卡,如果需要界定,那么这也需要更多步骤
  • Dailynote 用法下文档树基本都是不分类的,这种情况下如何处理

所以我们更倾向于使用容器块结构制卡,比如已经支持的超级块制卡。

@luo-chuan
Copy link
Author

Dailynote的话,其实不需要太担心。比如具有dailynote的文档树如下:

  • 历史
    • Dailynote(历史)
      • 2023.01.12
      • 2023.01.11
    • 中国史
      • 唐史
      • 宋史
      • 元史
      • 明史
    • 世界史
      • 欧洲史
      • 阿拉伯史
      • 美国史
      • 日本史

方案一:就按照文档树即卡包的逻辑,不做任何调整,保持使用逻辑一致。比如2023.01.12这篇文档中产生的卡片同时属于2023.01.12Dailynote(历史)历史这3个卡包。

方案二:考虑到dailynote中的文档可能较多,可取消最后一级卡包。比如2023.01.12这篇文档中产生的卡片同时属于Dailynote(历史)历史这2个卡包。

方案三:如果用户甚至只有一个笔记本,连一级分类都没有,所有的笔记都是未分类的日记,那么可以采用标签机制来对卡片分类。比如,2023.01.12这篇文章是关于中日战争的,那么可对里面的段落打上历史/中国史历史/日本史两个二级标签,自然地,相关的卡片就属于中国史日本史历史这3个卡包。这样同时也就克服了我上面提到的第④个缺点,可以直观地看出卡片属于哪个卡包。(文档树即卡包、标签树即卡包这两种机制是可以同时存在的,是兼容的)

@Danielypzhang
Copy link

还是倾向于保留卡包的功能。可能后续要优化操作流程。现在的制卡操作是有点不方便,如果能够设置默认的卡包,操作可能就方便很多。

@L-M-Sherlock
Copy link

设置当前默认卡包可能不错。SuperMemo 就是可以设置当前默认的概念组。

@88250
Copy link
Member

88250 commented Jan 12, 2023

@luo-chuan 这三个备选方案应该是三选一吧?否则规则会更复杂,提升了用户的使用成本。如果是三选一的话,这三个方案有明显的弊端:

  1. 要排除不需要的路径需要大量设置,如果反过来是选择需要的路径,也需要设置路径,并且设置以后其他块就无法放在原来的路径下了
  2. 和方案 1 问题一样,不够灵活,需要大量设置路径,固化了块路径和卡包绑定
  3. 和方案 1 问题一样,就算假设用户只有一个笔记本,没有子路径,那么设置标签的操作成本和现在设置闪卡也没有区别了。另外,如果使用标签,那么现有的标签会造成数据兼容问题,比如我这里已经对一些块设置了标签,但是并不想把它们设置为闪卡,这个问题如何解决?

所以我建议考虑的改进方向是完善现有方案。

@luo-chuan
Copy link
Author

@88250 D大,怎么说呢,还是希望你能亲自体验一下RemNote。
我录了一个视频,可以看出RemNote只需要挖空就可以完成制卡,是不需要对卡片进行分类的,因为文档树本身就是卡包。
视频:RemNote文档树即卡包特性演示
关于你担心的DailyNote问题,我一会儿再录个视频,看看RemNote的解决方案。

@88250
Copy link
Member

88250 commented Jan 12, 2023

我之前体验过 RemNote 的。

使用文档树还有其他问题,比如

  • 无法通过简单的方式将一个块放到多个路径下,也就是说无法简单地将一张闪卡放到多个不同父路径的卡包中
  • 一旦文档移动了路径,所属卡包就会变化,这个不一定符合制卡时的预期
  • 考虑到将来的扩展性,比如后期我们要实现卡包导出,绑定了文档树的话导出就必须带着文档树导出,这样另一个用户导入卡包后有可能会造成和他已有的文档树路径重复,也破坏了他的文档树结构

总结来说就是绑定文档路径的方案有局限性,没有逻辑上的卡包灵活。

@zxhd863943427
Copy link
Contributor

赞同保留目前的卡包设计机制,考虑到思源的用户实际上分别实践着 daily note 和文件夹分类以及其他奇奇怪怪的笔记用法,照搬 RemNote 的效果只能方便到文件夹分类的用户,这实际上是不公平的。

我认为还是目前的制卡方式最合适,只不过需要稍微改进一下,如可以设置个快捷键和默认制卡卡包之类的。

@luo-chuan
Copy link
Author

@88250 D大。我下面这个视频将解开你的疑惑,看看RemNote是如何实现的。
视频:RemNote之DailyNote制卡
我在RemNote里添加了一篇日记,当然这篇日记的标题是日期,没有任何分类。日记中我编辑好了一张卡片,内容是“床前明月光,???。举头望明月,低头思故乡”。
那如何对日记里的卡片分类呢?利用RemNote的“复制嵌入块”功能,分别把卡片对应的段落粘贴到“语文/唐诗”以及“历史人物/李白”这两个目录中,然后,这张卡片便具有了这两个分类。

@88250
Copy link
Member

88250 commented Jan 12, 2023

演示上 RN 的操作步骤并不能减少用户的操作成本,和现在思源选块以后加入多个卡包在操作上没有区别,均是你在问题中提到的 3 个步骤,并且还需要引入了额外的概念来支持实现,这不是我们期望的改进。

@L-M-Sherlock
Copy link

我觉得加两个特性就可以了

  • 记住上次添加的卡包,自动加入
  • 复习所有卡包内的卡片

@luo-chuan
Copy link
Author

演示上 RN 的操作步骤并不能减少用户的操作成本,和现在思源选块以后加入多个卡包在操作上没有区别,均是你在问题中提到的 3 个步骤,并且还需要引入了额外的概念来支持实现,这不是我们期望的改进。

因为这个演示是针对纯粹的DailyNote用户进行的,他们没有分类的习惯,自然会繁琐,不管采用哪种方式。而对于不使用DailyNote的用户,“文档树即卡包”的方案将实现无感分类,这是达到了绝对高的效率的。下面我对纯粹的DailyNote用户的需求做一点分析。
关于纯粹的 DailyNote 用户,我提几点疑问。既然纯粹的 DailyNote 用户在记笔记时不喜欢分类,为什么到了制卡的时候,突然就要分类了?既然最终还是有分类的需求,为什么不能在制卡之前就完成分类呢?我理解,为了减轻记录的压力,所以不分类,但知识总是需要消化吸收的,早晚还是要对部分有价值的知识进行分类整理。我提出的“文档树即卡包”的方案只不过是让他们把对卡片的分类换种方式提前一步进行而已,并没有给他们添堵。

@luo-chuan
Copy link
Author

我觉得加两个特性就可以了

  • 记住上次添加的卡包,自动加入
  • 复习所有卡包内的卡片

我觉得不管是“记住上次添加的卡包”还是“设置默认卡包”都会容易造成卡片误分类,而一旦误分类,现有机制不易于对卡片管理,不能及时排查出那些误分类的卡片。
我还是觉得RemNote那种无感分类是最好的,不会造成误分类。

@luo-chuan
Copy link
Author

@88250 @L-M-Sherlock
我刚刚考虑了一下,可以采用一种妥协的方案,使 DailyNote 用户和文件夹用户都满意,从而避免争论。

那就是提供 2 个不同的闪卡复习入口。

第一个入口就是现有方案,通过左上角闪卡图标进入。

第二个入口就是,像 RemNote 一样,在文档树的位置右键。

这样一来,DailyNote 用户无需改变现有的习惯(虽然我不是很赞同这一习惯);而文件夹用户也能实现无感分类了。

@88250
Copy link
Member

88250 commented Jan 13, 2023

@luo-chuan

第二个入口就是,像 RemNote 一样,在文档树的位置右键

我描述一下你是不是这个意思:

  • 文档树上选择文档后右键选择 闪卡
  • 该文档中的所有标记和超级块制卡,并且卡包名称使用文档名

这样可以达到快速批量将该文档中的所有块制卡的目的,但是这样达不到文档树和卡包绑定的目的,实际上只是做了一个快速批量制卡,和打开文档批量选块后制卡没有太大差别。我不确定你提的这个妥协方案是不是这个意思,还需要讨论。

@luo-chuan
Copy link
Author

@luo-chuan

第二个入口就是,像 RemNote 一样,在文档树的位置右键

我描述一下你是不是这个意思:

  • 文档树上选择文档后右键选择 闪卡
  • 该文档中的所有标记和超级块制卡,并且卡包名称使用文档名

这样可以达到快速批量将该文档中的所有块制卡的目的,但是这样达不到文档树和卡包绑定的目的,实际上只是做了一个快速批量制卡,和打开文档批量选块后制卡没有太大差别。我不确定你提的这个妥协方案是不是这个意思,还需要讨论。

不是这个意思。我的意思是这两个入口是互相独立的,互不干扰。通过第二个入口进入卡片复习界面并不会导致第一个入口产生新卡包。第二个入口不是批量制卡,而是通过类似于查询语句来获得当前文档及其子文档中的所有卡片。

@88250
Copy link
Member

88250 commented Jan 13, 2023

提供一个全新的卡包特性的话目前不会考虑了,这个以后可能可以通过 API 支持扩展。

@luo-chuan
Copy link
Author

前面提到了标签制卡,这里做个补充。我录了个视频,展示了RemNote是如何通过标签来制卡的。
视频:RemNote标签制卡展示

@luo-chuan
Copy link
Author

借着这个机会,我顺便把 RemNote 的优势介绍了,供D大参考,也给大家做一个科普。

在 RemNote 中,一篇文档就是一个卡包。当然,这里并不是真正的为这篇文档创建了一个卡包,而是通过类似于查询语句的方式得到了这篇文档(及其子文档)中的所有卡片,在用户看来感觉就像是一个卡包一样。一张卡片,不仅属于当前文档的卡包,同时属于它的父文档的卡包以及祖先文档的卡包。比如“行列式的定义”这张卡片不仅属于“高等代数”卡包,同时属于“代数”、“数学”这两个卡包。思源笔记比起 obsidian、logseq 来说拥有完美的文档树,如果这一优势不被闪卡功能好好利用的话,其实是相当可惜的。

有了一篇文档就是一个卡包这一基础,进一步 RemNote 就可以实现一个标签就是一个卡包,可以简单理解为 RemNote 自动为每个标签都创建了一个页面,所有打上了这个标签的块都嵌入到了这个页面内。思源笔记的标签系统还能形成标签树,如果利用好的话也能成为独特的优势。在早些时候的讨论中我就提到过,标签是实现 DailyNote 卡片分类的一种解决方案,具体操作可以看这个视频( BV13A411o7yK

更进一步,RemNote 甚至可以实现自由组合卡包。RemNote 提供了一个功能叫做 Search Portal,可以在文档中插入一个搜索块,将带有某一标签、某一关键字的块嵌入进来。借助 Search Portal,用户可以实现自由组合卡包,比如可以将不同标签的块、含有特定关键字的块、嵌入块放进同一篇文档中,这样就得到了一个组合卡包。思源笔记中也有类似的功能,那就是 sql 语句查询,如果利用起来的话,也可以实现类似效果,甚至更个性化的效果。具体操作看下面这个视频:
视频:RemNote自由组合卡包演示

@88250
Copy link
Member

88250 commented Feb 18, 2023

基于之前的讨论,我们将进行如下改进:

  • 块标菜单增加
    • 快速制卡(快捷键 xxx)
    • 添加到卡包
  • 文档树/文档块标右键添加 闪卡 ,点击以后进入复习

总的来说就是让用户自己选择使用闪卡的方式:

  1. 使用卡包,在顶栏中根据卡包复习
  2. 使用文档,在文档块中复习

实现概要:

  • 用户选择 快速制卡 时将块添加到内置卡包中(20230218211946-2kw8jgx
  • 进入复习时根据块 ID 在内置卡包中过滤到期卡后得到待复习卡

内置卡包对于用户来说是透明的,在顶栏的闪卡菜单进入后也不会看到这个内置卡包,但是在 All 中可以看到该卡包中包含的闪卡。后面支持查询圈定范围 #7281 的话在 All 中过滤。

@88250 88250 reopened this Feb 18, 2023
@88250 88250 added this to the 2.7.6 milestone Feb 18, 2023
@88250 88250 changed the title 希望取消闪卡的卡包,因为文档树就是天然的卡包 支持基于文档复习闪卡 Feb 18, 2023
88250 added a commit that referenced this issue Feb 18, 2023
88250 added a commit that referenced this issue Feb 18, 2023
88250 added a commit that referenced this issue Feb 18, 2023
88250 added a commit that referenced this issue Feb 18, 2023
Vanessa219 added a commit that referenced this issue Feb 18, 2023
88250 added a commit that referenced this issue Feb 18, 2023
Vanessa219 added a commit that referenced this issue Feb 18, 2023
Vanessa219 added a commit that referenced this issue Feb 18, 2023
Vanessa219 added a commit that referenced this issue Feb 19, 2023
88250 added a commit that referenced this issue Feb 19, 2023
88250 added a commit that referenced this issue Feb 19, 2023
88250 added a commit that referenced this issue Feb 19, 2023
Vanessa219 added a commit that referenced this issue Feb 19, 2023
88250 added a commit that referenced this issue Feb 19, 2023
@88250 88250 closed this as completed Feb 20, 2023
@Achuan-2
Copy link
Member

通过【快速制卡】制作的卡是不能删除的吗

@88250
Copy link
Member

88250 commented Feb 21, 2023

@Achuan-2 在复习界面的预览中应该可以移除。

@Achuan-2
Copy link
Member

Achuan-2 commented Feb 21, 2023

@88250 移除之后,再打开复习依然是存在的

也有一个帖子报道了这个问题:https://ld246.com/article/1676794315541

@88250
Copy link
Member

88250 commented Feb 21, 2023

你是从 All 里面移除吗?

@Achuan-2
Copy link
Member

@88250 删除属性和在All都不能移除快速制卡的卡

@88250
Copy link
Member

88250 commented Feb 21, 2023

删除属性不行的;All 中移除 #7425

@Achuan-2
Copy link
Member

@88250 好滴

@Zuoqiu-Yingyi
Copy link
Contributor

@88250 最好默认卡包在卡包中可以显示, 我的卡片多了后从 All 里面翻不出来了...

@88250
Copy link
Member

88250 commented Feb 21, 2023

@Zuoqiu-Yingyi 复习的时候预览那里可以管理,内置卡包就不显示了,不然容易引起混淆。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants