结合组织模式捕获和钻取模块来学习词汇

Dro*_*ror 5 emacs elisp org-mode

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

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

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

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

我认为上述模板必须在以下方面进行改进:

标题当前第一个输入字符串是(新)字,标题是固定的.标题如何是相同(输入)字?我认为以下结果是可取的:

* Vocabulary
** Foo :drill:
Foo
*** Answer
What is foo
Run Code Online (Sandbox Code Playgroud)

实际上更好的方法是拥有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 %t\n %^{Extended word (may be empty)} \n** Answer \n%^{The definition}")
Run Code Online (Sandbox Code Playgroud)

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

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

小智 2

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

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

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

有关排序,请参阅 Cc ^ (org-sort)。

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