结合组织模式捕获和演练模块来学习词汇



我想使用 org-modecapture 模块创建我想学习的新单词的数据库,然后使用 drill 模块来学习它们(闪存卡样式)。

在我的org-capture-templates中,我添加了以下内容:

("v" "Vocabulary" entry
               (file+headline (concat org-directory "/vocab.org")
                              "Vocabulary")
               "* Word :drill:n%^ n** Answer n%^")

这是我从这里借来的一个相当幼稚的模板。它工作正常,但太有限了。不幸的是,我对elisp相当陌生,我不知道如何改进它。

我认为上述模板需要在以下几个方面进行改进:

标题

目前,第一个输入字符串是(新)单词,标题是固定的。标题怎么可能是相同的(输入)词?我认为以下结果是可取的:

* Vocabulary
** Foo :drill:
Foo
*** Answer
What is foo

实际上,更好的方法是拥有 3 个输入字符串。

  1. 新单词(例如foo ),将成为标题。
  2. 如果第二个为空,则它获得与 (1) 相同的字符串。否则,将字符串连接到 (1) 中的字符串。例如,作为第二输入bar将产生foo bar。这将是条目的内容。
  3. 这个词的定义应该出现在answer副标题中。

重复(再次看到这个) 如果在以后的某个时候我尝试再次捕获foo,我想知道它,并被指示编辑已经存在的条目 - 跳过所有输入。

排序 捕获后我认为对单词列表进行排序会很好。考虑到每个条目的标题都是单词本身,这应该不会太难。在这种情况下,人们可能可以使用org-sort-entries函数。

我知道这是一个相当大的问题,但我也认为,如果可以在这里解决,它将对许多用户非常有用。


编辑:


使用@juan_g建议,我改进了我的模板,现在是:

("v" "Vocabulary" entry
               (file+headline (concat org-directory "/vocab.org")
                              "Vocabulary")
               "* %^{The word} :drill:n %tn %^{Extended word (may be empty)} n** Answer n%^{The definition}")

我没有设法将第二个输入的默认值设置为第一个。我尝试了类似%^{Extended word (may be empty)|%1}的东西,但它返回^A这没有帮助。

无论如何,这个改进版本似乎已经可以使用。

关于输入问题,在组织模式手册中: 9.1.3.2 模板扩展,有 %\1 特殊转义码:

% 插入在第 n 个 %^{提示符} 处输入的文本,其中 n 是一个数字,从 1 开始。

重复问题可能需要一些Emacs Lisp编码。

有关排序,请参阅 C-c ^(组织排序)。

顺便说一句,org-drill似乎确实是一个非常有趣的软件包,基于SuperMemo的间隔重复算法。

您需要一个额外的"\",因此 %\\1 按预期工作。

最新更新