matthayes / anki_cloze_anything

Build StatusRelease

Questo progetto fornisce una implementazione cloze basata su template che:

  • è completamente indipendente da Anki’s Cloze Deletion,
  • non richiede alcuna modifica ad Anki (tramite un plugin) per funzionare,
  • e fornisce maggiore flessibilità nella generazione di carte cloze

Questo è ottenuto puramente tramite JavaScript nel template della carta e una nuova applicazione della (fantastica) funzione Selective Card Generation integrata di Anki. Il grande vantaggio di questo è che è possibile generare carte cloze da note esistenti, per le quali si possono già avere carte. Non ha alcuna dipendenza dal tipo di nota Cloze di Anki o da qualsiasi altro tipo di nota, il che significa che non devi migrare le tue carte ad un nuovo tipo di nota. È compatibile con Anki Desktop, AnkiMobile e AnkiDroid.

Iniziare è facile. Puoi scaricare il mazzo condiviso o seguire le istruzioni per impostare i modelli manualmente.

Riplicare le funzionalità di Anki con JavaScript e modelli di carte non è comunque l’obiettivo. L’obiettivo è la flessibilità infinita. Puoi aggiungere le carte cloze a qualsiasi tipo di nota esistente (“cloze anything”) semplicemente aggiungendo nuovi campi e modelli di carte in base alle istruzioni che trovi qui. Puoi anche modificare completamente i modelli, usandoli semplicemente come guida.

Con le impostazioni predefinite questo replica la funzionalità cloze di Anki. Tuttavia il modello è altamente configurabile e ti permette di fare cose che altrimenti non potresti fare facilmente. Sotto c’è un riassunto di alcune utili caratteristiche dei modelli e di questo approccio.

  • Controlla la visibilità delle altre cancellazioni cloze. Normalmente Anki mostrerà le altre cancellazioni cloze oltre a quella attualmente in prova per una particolare scheda. L’approccio qui permette di personalizzare questo, in modo simile alla funzionalità fornita da Cloze (Hide All) e Cloze Overlapper.
  • Personalizzare il formato cloze. Anki sostituisce ogni valore cloze con o nel caso di un suggerimento. I modelli ti permettono di personalizzare questo. Per esempio, potresti usare i trattini bassi e avere il formato ___. Oppure potresti includere sempre il suggerimento, come in ___ . Inoltre, invece di un numero fisso di 3 caratteri, potresti sostituire ogni carattere non spaziale. Così potresti avere ((c1::ab cdef::hint)) che diventa __ ____ .
  • Rivela selettivamente i caratteri come suggerimento. A volte, a causa di ambiguità, potreste aver bisogno di un suggerimento su come inizia una parola. Il template ha una semplice sintassi per supportare questo. Semplicemente circondate i caratteri che volete mantenere con i backtick. Per esempio, ((c1::`a`bc `d`ef)) potrebbe essere reso come a__ d__. Potete rivelare selettivamente qualsiasi parte del contenuto, non solo all’inizio. Si noti che si potrebbe anche fare a((c1::bc)) d((c1::ef)), tuttavia la sintassi del backtick potrebbe essere più conveniente.
  • Aggiungi la cancellazione cloze a una nota esistente. Supponiamo che tu abbia già una nota con i campi Espressione e Significato e una scheda che ti mette alla prova su Espressione -> Significato. Ora supponiamo che tu voglia una versione di Expression con cancellazioni cloze. Normalmente con Anki dovresti copiare il testo in una nota completamente separata basata sul tipo di nota Cloze. Questo è un grosso mal di testa da gestire. Invece con l’approccio Cloze Anything si copia il testo in un campo ExpressionCloze nella stessa nota. Questo rende molto più facile gestire il contenuto. Puoi facilmente trovare le note che non hanno un cloze attraverso una semplice ricerca nel browser.
  • Aggiungi più campi di cancellazione cloze ad una nota esistente. Supponiamo che tu abbia un tipo di nota che ti mette alla prova sul vocabolario con i campi VocabItem e Meaning. Supponiamo che abbiate aggiunto alcuni campi di esempio ExampleA e ExampleB per fornire esempi di come viene usato l’elemento del vocabolario. Con l’approccio Cloze Anything puoi creare versioni cloze per ognuno di questi esempi come ExampleACloze e ExampleBCloze e rendere le schede da ognuno di essi.

E’ anche fornito un plugin opzionale che automatizza parte del lavoro manuale altrimenti (minimo) che sarebbe richiesto quando si segue questo approccio.

Come iniziare

Ci sono due opzioni per iniziare:

  1. Scaricate il mazzo condiviso che ho già preparato per voi e usate il tipo di nota (e i modelli di scheda) come base per le vostre schede.
  2. Seguite le mie istruzioni dettagliate su come impostare i campi e i modelli di scheda. Questa è la scelta migliore quando vuoi aggiungere cloze ad un tipo di nota esistente.

Si raccomanda anche di installare il plugin per rendere più facile la modifica delle schede cloze, ma non è obbligatorio.

Come funziona il modello

Simile ai modelli cloze di Anki, hai bisogno di un campo per contenere il contenuto cloze. Per convenzione è una buona idea che il nome del campo finisca in Cloze nel caso si voglia usare il plugin in seguito. Supponiamo di chiamarlo ExpressionCloze, come suggerito nelle istruzioni. Il contenuto Cloze viene inserito in questo campo in modo simile a quello dei modelli Cloze di Anki. L’unica differenza è che invece del formato {{c1::text}} si usa ((c1::text)). Hai poi bisogno di campi per abilitare ciascuna delle schede cloze. Quindi, supponiamo che tu voglia supportare tre cloze. Aggiungerai i campi ExpressionCloze1, ExpressionCloze2 e ExpressionCloze3. Si inserisce qualsiasi testo che si desidera in questi campi per abilitare la scheda cloze corrispondente. Per convenzione il plugin usa 1.

Per esempio, supponiamo che vogliate creare delle schede cloze per ciascuna delle parole dell’espressione Ik heb honger. Dovresti scrivere i campi in questo modo:

Ik heb honger fields

Per un rendering HTML di questo esempio, vedi qui.

Perché ciascuno dei campi cloze ha un valore non vuoto di 1, verrà generata una scheda per ciascuno dei c1 attraverso c3. Se hai cancellato il 1 da ExpressionCloze3 allora verrà generata una scheda solo per c1 e c2.

Diamo un’occhiata a come funziona tutto questo. Le istruzioni a cui si fa riferimento prima hanno il seguente modello per la prima scheda cloze. Notate che l’intero contenuto della parte anteriore della scheda è circondato da tag condizionali basati su ExpressionCloze e ExpressionCloze1. Questo significa che entrambi i campi devono essere non vuoti perché la scheda venga creata, a causa del modo in cui funziona la generazione delle schede Anki. Quindi se uno di questi campi è vuoto, la scheda corrispondente non viene generata. Lo script omesso guarda semplicemente il numero con cui finisce il valore di data-card e poi aggiorna il contenuto del cloze <div> di conseguenza. Così se il valore di data-card è ExpressionCloze2 allora sa di nascondere il ((c2::text)) e mostrare gli altri.

{{#ExpressionCloze}}{{#ExpressionCloze1}}<div data-card="{{Card}}" data-cloze-show-before="all" data-cloze-show-after="all">{{ExpressionCloze}}</div>{{Meaning}}<script>// .. ommitted ...</script>{{/ExpressionCloze1}}{{/ExpressionCloze}}

I modelli supportano anche i suggerimenti nelle cancellazioni cloze, come nel sistema di Anki. Per esempio, per l’esempio qui sotto, heb verrebbe sostituito con invece di .

((c1::Ik)) ((c2::heb::verb)) ((c3::honger)).

Configurazione

Il template ha diverse impostazioni per controllare come vengono rese le cancellazioni cloze. Tutte le impostazioni sono aggiunte al div come mostrato sotto per data-cloze-show-before.

<div data-card="{{Card}}" data-cloze-show-before="all">{{ExpressionCloze}}</div>

data-cloze-replace-char

Questo controlla con quale carattere sostituire i valori cloze. Il default è un punto, ., che è lo stesso di Anki. Se invece vuoi usare i trattini bassi:

data-cloze-replace-char="_"

data-cloze-replace-same-length

Questo è un valore true o false che controlla se i valori cloccati devono essere sostituiti con una sostituzione fissa di 3 caratteri o con un numero uguale di caratteri di sostituzione come esistono nel contenuto. Il valore predefinito è false, che è lo stesso del comportamento del cloze di Anki.

Se impostato su true, allora ((c1::abcd)) verrebbe sostituito con .

Nota che impostando questo valore a true, verranno preservati gli spazi. Quindi ((c1::abc def)) diventerebbe ___ ___. Cioè, solo i caratteri non spaziali sono sostituiti.

data-cloze-always-show-blanks

Questo è un valore true o false che controlla se gli spazi bianchi devono essere mostrati anche se c’è un suggerimento. Il valore predefinito è false, che è lo stesso comportamento di Anki. Cioè, ((c1::abc)) diventerebbe , ma ((c1::abc::hint)) diventerebbe . Quando è impostato su true, allora quest’ultimo diventa .

Questa impostazione tende ad essere più utile quando è usata con data-cloze-replace-same-length, data-cloze-replace-char, e le impostazioni di formattazione sotto.

data-cloze-blanks-format, data-cloze-hint-format, e data-cloze-blanks-and-hint-format

Queste controllano il formato cloze per tre diversi scenari:

  • data-cloze-blanks-format: Formato usato quando vengono visualizzati solo gli spazi vuoti. Il formato predefinito è .
  • data-cloze-hint-format: Formato usato quando viene visualizzato solo il suggerimento. Il formato predefinito è .
  • data-cloze-blanks-and-hint-format: Formato usato quando vengono visualizzati gli spazi vuoti e il suggerimento. Il formato predefinito è .

Supponiamo che tu voglia più di uno stile di riempimento degli spazi vuoti per le tue carte cloze. Ma vuoi comunque visualizzare i suggerimenti, se disponibili.

data-cloze-always-show-blanks="true" data-cloze-blanks-format="{blanks}" data-cloze-hint-format="" data-cloze-blanks-and-hint-format="{blanks} " data-cloze-replace-char="_"

Questo porterebbe alle seguenti trasformazioni:

  • ((c1::abc)) => ___
  • ((c1::abc:hint)) => ___

data-cloze-show-before e data-cloze-show-after

Le impostazioni data-cloze-show-before e data-cloze-show-after possono essere aggiunte al template come mostrato nello snippet sotto. Queste controllano se altri valori cloze prima e dopo il cloze corrente sono mostrati.

data-cloze-show-before="all" data-cloze-show-after="all"

Nello snippet sopra, entrambi hanno il valore all, che è il valore predefinito. Questo significa che tutte le cancellazioni del cloze prima e dopo il cloze corrente saranno visualizzate. Per esempio, supponiamo che il contenuto sia:

((c1::Ik)) ((c2::heb)) ((c3::honger)).I am hungry.

La seconda carta, corrispondente a c2, sarebbe resa come segue.

Ik ... honger

A parte il valore all, altri possibili valori per queste impostazioni sono:

  • none, che fa sì che nessuna delle cancellazioni cloze venga visualizzata prima/dopo.
  • Un valore numerico maggiore di 0. Per esempio, se lo imposti a 1 per entrambe le impostazioni, allora le prime cancellazioni di blocco prima e dopo il blocco corrente saranno mostrate, ma non le altre.

Per esempio, supponiamo che tu abbia impostato data-cloze-show-before="1" e data-cloze-show-after="1". Crei una scheda con il seguente contenuto del blocco:

((c1::To be, or not to be, that is the question:))((c2::Whether 'tis nobler in the mind to suffer))((c3::The slings and arrows of outrageous fortune,))((c4::Or to take Arms against a Sea of troubles,))((c5::And by opposing end them: to die, to sleep;))

La terza scheda, corrispondente a c3, sarebbe resa così:

hamlet

Nota che il blocco attuale è evidenziato in blu e gli altri sono grigi. Questo è controllato dal CSS fornito nelle istruzioni.

In alternativa, per data-cloze-show-before="all" e data-cloze-show-after="none" la terza carta sarebbe resa così:

hamlet2

data-cloze-keep-regex

Questa contiene un’espressione regolare che determina quali parti del testo non dovrebbero essere sostituite da spazi vuoti, come se fossero circondate da backtick. Per impostazione predefinita contiene segni di punteggiatura di base in caratteri latini, che la maggior parte degli utenti vorrebbe mostrare nel cloze. Un insieme più completo di segni di punteggiatura di diversi script può essere impostato usando:

data-cloze-keep-regex="]"

Grazie al fatto che questo campo è un’espressione regolare, puoi usarlo per tutti i tipi di scenari speciali. Per esempio, se volete mostrare il testo dall’inizio della clausola fino ai primi due punti, oltre alla punteggiatura di base in scrittura latina, ma nascondere tutto il resto potete usare:

data-cloze-keep-regex="^.*?:|"

Questa opzione ha effetto solo se data-cloze-replace-same-length è impostato.

Sovrascrivere la configurazione

Se vuoi sovrascrivere qualsiasi valore di configurazione predefinito per certe carte, un modo per ottenere questo è aggiungere un campo per contenere la configurazione:

<div data-card="{{Card}}" {{ExpressionClozeConfig}}>{{ExpressionCloze}}</div>

Quindi per ExpressionClozeConfig potresti compilare questo per una carta:

data-cloze-show-before="all"

Come funziona il plugin

Il plugin fa due cose per rendere più facile la modifica delle cancellazioni cloze quando si segue questo approccio:

  • Si aggancia al pulsante di Anki nell’editor in modo da poterlo usare su altre note oltre a quelle basate sul tipo Cloze di Anki.
  • Sincronizza le modifiche dal campo ExpressionCloze (o da un campo con nome simile) agli altri campi ExpressionCloze1, ExpressionCloze2, ecc. che abilitano le corrispondenti schede cloze.

Il pulsante si comporta allo stesso modo se usato su uno dei tipi di note basate sul tipo Cloze di Anki. Altrimenti però, se il nome del campo finisce in Cloze, come ExpressionCloze, allora avvolgerà il testo selezionato, come in ((c1::text)). Questo è lo stesso comportamento normale di Anki con i cloze, eccetto che usa le parentesi invece delle parentesi graffe.

Il pulsante ha un’ulteriore utile caratteristica per cui se lo premi mentre un campo vuoto che finisce in Cloze ha il focus, copierà il testo da un altro campo con lo stesso nome meno il suffisso Cloze. Per esempio, se cliccate il pulsante mentre il focus è su ExpressionCloze allora copierà il testo da Expression.

Potete anche modificare il campo cloze senza usare il pulsante . Il plugin monitora i cambiamenti e identifica i modelli come ((c1::text)). Fa sì che i campi cloze corrispondenti siano vuoti o contengano 1 a seconda della presenza di cancellazioni cloze. Per esempio, se compilate ExpressionCloze con ((c1::Ik)) ((c2::heb)) ((c3::honger)). allora compilerà 1 per ognuno di ExpressionCloze1, ExpressionCloze2 e ExpressionCloze3. Se lo modifichi per diventare ((c1::Ik)) ((c2::heb)) honger. allora renderà ExpressionCloze3 vuoto.

Azioni del menu

Il plugin aggiunge due azioni nel browser sotto Edit -> Cloze Anything. Entrambe operano su qualsiasi nota selezionata nel browser.

Auto-cloze Full Field

Questo fa automaticamente un cloze da un intero campo. Per esempio, supponiamo che tu abbia un campo chiamato ExpressionCloze e Expression. Se ExpressionCloze è vuoto, allora questa azione fa sì che il contenuto di Expression sia copiato in ExpressionCloze e trasformato in un cloze come ((c1::content)). Aggiorna anche ExpressionCloze1 per causare la generazione della scheda cloze. Questo è utile quando si hanno molte note con contenuti brevi in cui si vuole bloccare l’intero contenuto. E’ molto più efficiente scrivere questi in blocco piuttosto che uno per uno.

Nota che questo essenzialmente è usare cloze per fare una Production card (cioè, dato il significato nella tua lingua madre, produrre l’espressione nella lingua che stai imparando). Allora perché non fare semplicemente un modello di scheda di produzione invece di usare il cloze? In alcuni casi questo può essere più efficace che usare cloze. Tuttavia ci sono un paio di ragioni per cui cloze potrebbe essere utile:

  • I tuoi appunti possono essere un misto di espressioni semplici dove vuoi avere un unico cloze per l’intero contenuto ed espressioni più complesse dove vuoi due o più cloze. Con questa azione puoi scegliere le espressioni semplici nel browser e bloccarle in blocco.
  • Le tue note possono essere complessivamente espressioni semplici. Ma potresti scoprire che per alcune note, al momento della revisione, sono più complesse di quanto pensavi. Invece di un solo cloze potresti volerlo cambiare con due o più. Usando cloze si ha la flessibilità di cambiare idea in futuro senza dover migrare verso un tipo di nota diverso.

Crea carte mancanti

Questo fondamentalmente si assicura solo che il campo Cloze sia in sincronia con i campi corrispondenti responsabili della generazione delle carte. Per esempio, se ExpressionCloze ha ((c1::Ik)) ((c2::heb)) ((c3::honger)). allora questo si assicurerà che ExpressionCloze1, ExpressionCloze2, e ExpressionCloze3 siano riempiti ciascuno con un 1. Ma ExpressionCloze4 verrebbe reso vuoto, se esiste. Questa azione non è generalmente necessaria da usare mentre si usa il plugin perché il plugin assicura che questi campi siano aggiornati quando si cambia il contenuto. Ma se fai un’importazione o se modifichi le note prima di usare il plugin, questo può essere usato per sistemare i campi in modo che siano sincronizzati.

Pro e contro

Pro:

  • Le carte cloze possono essere aggiunte ai tipi di note esistenti senza alcuna modifica oltre all’aggiunta di nuovi campi e modelli di carte.
  • Rispetto al tipo Cloze integrato di Anki, hai più flessibilità nel modo in cui le carte cloze sono rese. Puoi scegliere quanti degli altri valori cloze mostrare, invece di mostrarli sempre tutti. Questa funzionalità è simile a quella fornita da Cloze (Hide All) e Cloze Overlapper.
  • Si basa su JavaScript e sulle caratteristiche incorporate di Anki come Selective Card Generation. Poiché la funzionalità Cloze è implementata nei modelli, non sono necessarie modifiche ad Anki tramite un plugin per farla funzionare. Questo riduce enormemente la possibilità che futuri aggiornamenti di Anki interrompano questo approccio.
  • Nessun JavaScript esterno richiesto. Tutto il JavaScript necessario esiste nei modelli.

Cons:

  • Richiede JavaScript, che funziona perché le schede Anki sono trattate come pagine web. Tuttavia, l’autore di Anki nota che la funzionalità Javascript è fornita senza alcun supporto o garanzia. Quindi c’è una piccolissima possibilità che un futuro aggiornamento di Anki possa avere un impatto sul rendering delle schede e richiedere modifiche al template, che verrebbero prontamente eseguite da me data la mia dipendenza dal funzionamento di questo approccio.
  • Perché la funzionalità cloze è implementata nei template, piuttosto che in Anki, lo stesso template deve essere effettivamente copiato in ogni template di scheda. Inoltre se fai una modifica a uno dei modelli cloze devi copiare il contenuto anche negli altri.
  • L’aggiunta del prefisso type: per abilitare la digitazione nella risposta non è supportata.

Compatibilità

Versioni Anki

I modelli di schede sono compatibili con Anki Desktop, AnkiMobile, e AnkiDroid.

Il plugin funziona con Anki Desktop 2.1. Non ho intenzione di aggiungere il supporto 2.0.

Altri plugin

Non ho ancora testato le interazioni del plugin con altri plugin cloze come Cloze (Hide All) e Cloze Overlapper. Se riscontri un problema, per favore segnala un problema e farò del mio meglio per risolverlo.

I seguenti plugin sono stati segnalati come aventi problemi di compatibilità con questo plugin:

  • Personalizza le scorciatoie da tastiera (Ctrl+Shift+C potrebbe non funzionare correttamente)

Ispirazione

In aggiunta all’ispirazione tratta dal sistema cloze di Anki stesso, ci sono un paio di plugin cloze Anki correlati che hanno fornito qualche ispirazione per le caratteristiche trovate qui. Grazie a tutti gli autori per il pensiero messo in Anki e questi plugin che hanno aiutato a sviluppare nuove idee.

  • Cloze (Hide All)
  • Cloze Overlapper

Rilasci dei plugin

  • 0.1 – Initial release (2019-12-17)
  • 0.2 – Aggiungere azioni di menu Auto-cloze Full Field e Create Missing Cards (2019-12-29)

Template Releases

  • (2019-12-17) Rilascio iniziale
  • (2019-12-24) Template ora permette i numeri all’interno dei nomi dei campi.
  • (2020-01-03) Opzioni di configurazione aggiuntive. Backticks per mantenere i caratteri come suggerimenti.
  • (2020-05-31) Aggiungere CSS per il cloze corrente per evidenziarlo sul lato posteriore della scheda. Cambia il peso del carattere per il cloze corrente in grassetto. Vedi il numero 7

Licenza

Copyright 2019-2020 Matthew Hayes

Licenziato secondo la Licenza Apache, versione 2.0 (la “Licenza”); non puoi usare questo file se non in conformità alla Licenza.È possibile ottenere una copia della licenza all’indirizzo

http://www.apache.org/licenses/LICENSE-2.0

A meno che non sia richiesto dalla legge applicabile o concordato per iscritto, il software distribuito sotto questa licenza è distribuito “COSÌ COM’È”, SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, né esplicite né implicite.

Vedere la licenza per il linguaggio specifico che disciplina i permessi e le limitazioni della licenza stessa.