Schedule each side of two-sided card separately

Issue #15 resolved
Matus Goljer
created an issue


So, in learning vocab, I find it really useful to present both sides of the card in the same session. Learning the word just one way is not a good idea. It also often happens, one direction is much easier than the other.

As I understand it now, org-drill presents random side of two-sided card. This is in my opinion pretty unacceptable solution. There are couple ways to solve this: one would be to create a separate card for each direction. But this won't couple both sides together for one session.

Ideally, both directions would be presented at the same time for the first session, and then they'd allow different scheduling of each direction (based on how difficult each respective direction was). I've looked a bit around the options, and the custom presenter, but I don't know how to implement something like that in the current system.

I'm trying to switch from Anki to org-drill, since it being org allows for much more formatting, storing of notes, links etc than anki. My decks are 4000-5000 cards large, so I can't expect it would "just so happen" they would sync randomly (with smaller decks that would happen often, because of the limited choice).

So, am I making sense? Do you think this is something that could be implemented relatively simply?

Comments (4)

  1. Paul Sexton repo owner

    What you are describing is in effect having two drill items per "double sided card". There is no way that you can have a double sided card as a single drill item but have each side scheduled separately, because that would require storing two separate sets of scheduling info within one item.

    There are two ways you can get what you want. The most straightforward way is to simply generate two separate drill items for each double-sided card. I'm not sure how easily Anki will let you do this for your existing items, but for new items it should be very easy for you to write an org-capture template that pastes in two drill items.

    The other way, that will require some emacs lisp programming, is to write your own custom card type, and for each double sided card have an outline item that contains two drill items as subheadings. Each of those drill items should be of your custom card type, which should fetch properties from the master card, i.e.

    * Master card
      :NOUN_ENGLISH: "the cat"
      :NOUN_SPANISH: "el gato"
    ** Side 1     :drill:
      :DRILL_CARD_TYPE: my_special_type_english
    ** Side 2     :drill:
      :DRILL_CARD_TYPE: my_special_type_spanish

    Note that the master card is NOT a drill item - it just acts as a shared database for the two dependent drill items. They can then fetch the "NOUN_SPANISH" and "NOUN_ENGLISH" properties and display them somehow during testing.

    Have a look at the "conjugate" card type (look at functions containing "verb-conjugation" in org-drill.el).

  2. Matus Goljer reporter

    Thanks for the reply.

    Maybe to describe the process in cleaner way, in anki, when you start a session, it picks 35 (or whatever number) of cards, and then presents you 70 things to review, that is each side of each picked card. This is convenient because you are at the same time tested on both directions of the translation.

    I still don't see how can I ensure this with the "master card" setup, as that would still not guarantee both sides would be tested in the single session (for example, if I have 500 cards scheduled for the same day, it might not pick them in pairs but randomly).

    Maybe I'm just too used to the way anki does it, and in reality it wouldn't be a problem. I'll probably try the one-card-per-each-side approach (what you described as first option) to see if it works for me. If not, I don't have problem to write some elisp and even contribute it back (for other anki refugees), but that would require digging into the internals a bit more.

  3. Log in to comment