matthayes / anki_cloze_anything

Stav sestaveníVydání

Tento projekt poskytuje implementaci cloze založenou na šablonách, která:

  • je zcela nezávislá na mazání cloze v Anki,
  • nevyžaduje žádné úpravy Anki (prostřednictvím zásuvného modulu), aby fungovala,
  • a poskytuje větší flexibilitu při generování karet cloze

Toho je dosaženo čistě pomocí JavaScriptu v šabloně karty a nové aplikace vestavěné (úžasné) funkce Selektivní generování karet v Anki. Velkou výhodou je, že můžete generovat cloze karty z existujících poznámek, pro které již můžete mít karty. Nemá žádnou závislost na typu poznámek Anki Cloze ani na jiných typech poznámek, což znamená, že nemusíte migrovat své karty na nový typ poznámek. Je kompatibilní s aplikacemi Anki Desktop, AnkiMobile a AnkiDroid.

Začít je snadné. Můžete si buď stáhnout sdílený balíček, nebo postupovat podle pokynů pro ruční nastavení šablon.

Kopírování funkcí Anki pomocí JavaScriptu a šablon karet však není cílem. Cílem je nekonečná flexibilita. Můžete přidat cloze karty k jakémukoli existujícímu typu poznámky („cloze anything“) jednoduše přidáním nových polí a šablon karet na základě pokynů, které najdete zde. Šablony můžete také zcela upravit a použít je pouze jako vodítko.

S výchozím nastavením to kopíruje funkci Anki pro cloze. Šablona je však vysoce konfigurovatelná a umožňuje vám dělat věci, které jinak snadno udělat nelze. Níže je uveden přehled některých užitečných funkcí šablon a tohoto přístupu.

  • Ovládání viditelnosti ostatních mazání cloze. Za normálních okolností Anki zobrazí další cloze delece kromě té, která je právě testována pro danou kartu. Zde uvedený přístup umožňuje toto přizpůsobit, podobně jako funkce, které poskytují Cloze (Hide All) a Cloze Overlapper.
  • Přizpůsobit formát cloze. Anki nahradí každou hodnotu cloze buď , nebo v případě nápovědy. Šablony umožňují toto přizpůsobení. Můžete například použít podtržítka a nechat formát ___. Nebo byste mohli vždy uvést hint, jako v případě ___ . Také místo pevného počtu 3 znaků byste mohli nechat nahradit každý znak, který neobsahuje mezeru. Takže by se z ((c1::ab cdef::hint)) mohlo stát __ ____ .
  • Selektivní odhalování znaků jako nápověda. Někdy můžete kvůli nejednoznačnosti potřebovat nápovědu, čím slovo začíná. Šablona má jednoduchou syntaxi, která to podporuje. Znaky, které chcete zachovat, jednoduše obklopte zpětnými háčky. Například ((c1::`a`bc `d`ef)) lze zobrazit jako a__ d__. Selektivně můžete odhalit libovolnou část obsahu, nejen jeho začátek. Všimněte si, že byste mohli udělat také a((c1::bc)) d((c1::ef)), nicméně syntaxe se zpětnými tečkami může být pohodlnější.
  • Přidání mazání cloze do existující poznámky. Předpokládejme, že již máte poznámku s poli Výraz a Význam a kartu, která vás testuje na Výraz -> Význam. Nyní předpokládejme, že chcete verzi Vyjádření s klozetovým mazáním. Za normálních okolností byste v Anki museli text zkopírovat do zcela samostatné poznámky založené na typu poznámky Cloze. To je velká bolest hlavy, kterou je třeba zvládnout. Místo toho s přístupem Cloze Anything zkopírujete text do pole ExpressionCloze ve stejné poznámce. Díky tomu je správa obsahu mnohem jednodušší. Poznámky, které nemají cloze, můžete snadno najít pomocí jednoduchého vyhledávání v prohlížeči.
  • Přidání více polí pro odstranění cloze do existující poznámky. Předpokládejme, že máte typ poznámky, který vás zkouší ze slovní zásoby, s poli VocabItem a Meaning. Předpokládejme, že jste přidali několik příkladových polí ExampleA a ExampleB, abyste uvedli příklady použití položky slovní zásoby. Pomocí přístupu Cloze Anything můžete vytvořit cloze verze pro každý z těchto příkladů jako ExampleACloze a ExampleBCloze a vykreslit karty z každého z nich.

K dispozici je také volitelný doplněk, který automatizuje část jinak (minimální) ruční práce, která by byla při použití tohoto přístupu nutná.

Začínáme

Jsou dvě možnosti, jak začít:

  1. Stáhněte si sdílený balíček, který jsem pro vás již připravil, a použijte typ poznámky (a šablony karet) jako základ pro své karty.
  2. Postupujte podle mých podrobných pokynů, jak nastavit pole a šablony karet. To je nejlepší volba, když chcete přidat cloze do existujícího typu poznámek.

Instalaci pluginu také doporučuji, abyste si usnadnili úpravu cloze karet, ale není to nutné.

Jak funguje šablona

Podobně jako u Ankiho šablon cloze potřebujete pole, které bude obsahovat cloze obsah. Z konvence je dobré, aby název pole končil na Cloze pro případ, že budete chtít plugin použít později. Předpokládejme, že jej pojmenujete ExpressionCloze, jak je navrženo v návodu. Obsah Cloze se do tohoto pole zadává podobným způsobem jako u šablon Cloze v Anki. Jediný rozdíl je v tom, že místo formátu {{c1::text}} použijete ((c1::text)). Poté potřebujete pole pro povolení každé z karet cloze. Předpokládejme tedy, že chcete podporovat tři cloze. Přidali byste pole ExpressionCloze1, ExpressionCloze2 a ExpressionCloze3. Do těchto polí zadáte libovolný text, který povolí příslušnou kartu cloze. Z konvence zásuvný modul používá 1.

Předpokládejme například, že chcete vytvořit cloze karty pro každé ze slov ve výrazu Ik heb honger. Pole byste zapsali takto:

Ik heb honger pole

Vyobrazení tohoto příkladu v HTML naleznete zde.

Protože každé z cloze polí má neprázdnou hodnotu 1, bude pro každé z polí c1c3 vytvořena karta. Pokud jste odstranili 1 z ExpressionCloze3, pak se karta vygeneruje pouze pro c1 a c2.

Podívejme se, jak to celé funguje. V dříve odkazovaném návodu je pro první kartu cloze následující šablona. Všimněte si, že celý obsah přední strany karty je obklopen podmíněnými značkami založenými na ExpressionCloze a ExpressionCloze1. To znamená, že obě pole musí být vzhledem ke způsobu, jakým funguje generování karet Anki, neprázdná, aby se karta vytvořila. Pokud je tedy některé z těchto polí prázdné, odpovídající karta se nevytvoří. Vynechaný skript se jednoduše podívá na číslo, kterým končí hodnota pro data-card, a podle toho aktualizuje obsah v kloze <div>. Pokud je tedy hodnota data-card ExpressionCloze2, pak ví, že má skrýt ((c2::text)) a zobrazit ostatní.

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

Šablony také podporují nápovědy při mazání cloze, stejně jako v systému Anki. Například v níže uvedeném příkladu by místo bylo místo heb uvedeno .

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

Konfigurace

Šablona má několik nastavení pro řízení způsobu vykreslování cloze delecí. Všechna nastavení jsou přidána do div, jak je uvedeno níže pro data-cloze-show-before.

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

data-cloze-replace-char

Tím se řídí, jakým znakem se mají nahradit cloze hodnoty. Výchozí hodnota je tečka, ., což je stejné jako u Anki. Pokud chcete místo toho použít podtržítko:

data-cloze-replace-char="_"

data-cloze-replace-same-length

Jedná se o hodnotu true nebo false, která řídí, zda mají být clozed hodnoty nahrazeny pevnou tříznakovou náhradou nebo stejným počtem náhradních znaků, jaký existuje v obsahu. Výchozí hodnota je false, což je stejné jako chování Anki při cloze.

Pokud by byla nastavena hodnota true, pak by ((c1::abcd)) bylo nahrazeno .

Všimněte si, že nastavení této hodnoty na true způsobí zachování mezer. Takže pak by se z ((c1::abc def)) stalo ___ ___. To znamená, že budou nahrazeny pouze znaky bez mezer.

data-cloze-always-show-blanks

Jedná se o hodnotu true nebo false, která řídí, zda se mají zobrazovat prázdné znaky i v případě, že existuje nápověda. Výchozí hodnota je false, což je stejné chování jako u Anki. To znamená, že ((c1::abc)) by se stalo , ale ((c1::abc::hint)) by se stalo . Při nastavení true se pak z druhého jmenovaného stane .

Toto nastavení bývá užitečnější při použití s data-cloze-replace-same-length, data-cloze-replace-char a níže uvedenými nastaveními formátování.

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

Tato nastavení ovládají formát cloze pro tři různé scénáře:

  • data-cloze-blanks-format: Formát používaný v případě, že se zobrazují pouze prázdná místa. Výchozí formát je .
  • data-cloze-hint-format: Formát používaný v případě, že se zobrazuje pouze nápověda. Výchozí formát je .
  • data-cloze-blanks-and-hint-format: Formát používaný při zobrazení prázdných míst a nápovědy. Výchozí formát je .

Předpokládejme, že chcete pro své cloze karty spíše styl vyplňování prázdných míst. Stále však chcete zobrazit nápovědu, pokud je k dispozici.

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="_"

To by vedlo k následujícím transformacím:

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

data-cloze-show-before a data-cloze-show-after

Nastavení data-cloze-show-before a data-cloze-show-after lze přidat do šablony, jak je uvedeno v úryvku níže. Ta řídí, zda se mají zobrazit další cloze hodnoty před a za aktuálním cloze.

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

V úryvku výše mají obě nastavení hodnotu all, která je výchozí. To znamená, že se zobrazí všechny klozety před a za aktuálním klozetem. Předpokládejme například, že obsah je:

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

Druhá karta, odpovídající c2, by byla vykreslena takto:

Ik ... honger

Kromě hodnoty all jsou další možné hodnoty těchto nastavení:

  • none, což způsobí, že se nezobrazí žádné z mazání cloze před/po.
  • Číselná hodnota větší než 0. Pokud například nastavíte tuto hodnotu na 1 pro obě nastavení, pak se zobrazí první mazání cloze před a po aktuálním cloze, ale žádné další.

Předpokládejme, že jste nastavili data-cloze-show-before="1" a data-cloze-show-after="1". Vytvoříte kartu s následujícím obsahem cloze:

((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;))

Třetí karta, odpovídající c3, by byla zobrazena takto:

hamlet

Všimněte si, že aktuální cloze je zvýrazněna modře a ostatní jsou šedé. To se řídí pomocí CSS uvedeného v návodu.

Alternativně by se pro data-cloze-show-before="all" a data-cloze-show-after="none" třetí karta vykreslila takto:

hamlet2

data-cloze-keep-regex

Tento výraz obsahuje regulární výraz, který určuje, které části textu nemají být nahrazeny mezerami, jako by byly obklopeny zpětnými znaky. Ve výchozím nastavení obsahuje základní interpunkční znaménka latinky, která by většina uživatelů chtěla v cloze zobrazit. Obsáhlejší sadu interpunkčních znamének z různých písem lze nastavit pomocí:

data-cloze-keep-regex="]"

Díky tomu, že je toto pole regulárním výrazem, můžete jej použít pro všechny druhy pro speciální scénáře. Chcete-li například kromě základní interpunkce latinky zobrazit text od začátku klauzule až po první dvojtečku, ale vše ostatní skrýt, můžete použít:

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

Tato volba má účinek pouze tehdy, je-li nastavena data-cloze-replace-same-length.

Přepsání konfigurace

Pokud byste chtěli přepsat všechny výchozí konfigurační hodnoty pro určité karty, jedním ze způsobů, jak toho dosáhnout, je přidat pole pro uložení konfigurace:

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

Pak byste pro kartu ExpressionClozeConfig mohli vyplnit toto:

data-cloze-show-before="all"

Jak zásuvný modul funguje

Zásuvný modul dělá dvě věci, aby vám usnadnil úpravu mazání cloze při použití tohoto přístupu:

  • Vztahuje se k tlačítku v editoru Anki, takže jej můžete použít i na jiné poznámky než ty, které jsou založeny na typu Cloze Anki.
  • Synchronizuje úpravy z pole ExpressionCloze (nebo podobně pojmenovaného pole) do ostatních polí ExpressionCloze1, ExpressionCloze2 atd. umožňujících odpovídající cloze karty.

Tlačítko se chová stejně při použití na některém z typů poznámek založených na typu Cloze Anki. V opačném případě však, pokud název pole končí na Cloze, jako například ExpressionCloze, zabalí vybraný text, jako například v ((c1::text)). Je to stejné jako běžné chování Anki s Cloze, jen místo kulatých závorek používá závorky.

Tlačítko má navíc užitečnou funkci, kdy pokud jej stisknete, když má prázdné pole končící na Cloze fokus, zkopíruje text z jiného pole se stejným názvem bez přípony Cloze. Například pokud stisknete tlačítko, zatímco máte fokus na ExpressionCloze, pak se zkopíruje text z Expression.

Tlačítko můžete upravit i bez použití pole Cloze. Zásuvný modul sleduje změny a identifikuje vzory jako ((c1::text)). V závislosti na přítomnosti mazání cloze způsobí, že příslušná pole cloze budou buď prázdná, nebo budou obsahovat 1. Pokud například vyplníte ExpressionCloze pomocí ((c1::Ik)) ((c2::heb)) ((c3::honger))., pak vyplní 1 pro každé z polí ExpressionCloze1, ExpressionCloze2 a ExpressionCloze3. Pokud jej upravíte na ((c1::Ik)) ((c2::heb)) honger., pak bude ExpressionCloze3 prázdný.

Akce v nabídce

Zásuvný modul přidá do prohlížeče dvě akce v části Upravit -> Cloze Anything. Obě pracují s jakoukoli poznámkou vybranou v prohlížeči.

Automatické cloze celého pole

Tato akce automaticky vytvoří cloze z celého pole. Předpokládejme například, že máte pole s názvy ExpressionCloze a Expression. Pokud je ExpressionCloze prázdné, pak tato akce způsobí, že se obsah Expression zkopíruje do ExpressionCloze a vytvoří cloze jako ((c1::content)). Rovněž aktualizuje ExpressionCloze1, aby způsobila vygenerování cloze karty. To je užitečné, když máte hodně poznámek s krátkým obsahem, u kterých chcete cloze celý obsah. Je mnohem efektivnější je clozeovat hromadně než po jednom.

Všimněte si, že se v podstatě jedná o použití cloze k vytvoření produkční karty (tj. vzhledem k významu ve vašem rodném jazyce vytvořte výraz v jazyce, který se učíte). Proč tedy místo použití cloze prostě nevytvořit šablonu produkční karty? V některých případech to může být efektivnější než použití cloze. Existuje však několik důvodů, proč by cloze mohlo být užitečné:

  • Vaše poznámky mohou být směsí jednoduchých výrazů, kde chcete mít jeden cloze pro celý obsah, a složitějších výrazů, kde chcete mít dva nebo více cloze. Pomocí této akce můžete v prohlížeči vybrat jednoduché výrazy a hromadně je cloze.
  • Vaše poznámky mohou být celkově jednoduché výrazy. Při prohlížení však můžete zjistit, že u některých poznámek jsou složitější, než jste si mysleli. Místo jednoho cloze je možná budete chtít změnit na dva nebo více. Použitím cloze získáte flexibilitu, abyste mohli v budoucnu změnit názor, aniž byste museli přecházet na jiný typ poznámek.

Vytvořit chybějící karty

Tím se v podstatě jen zajistí synchronizace pole Cloze s příslušnými poli odpovědnými za generování karet. Například pokud ExpressionCloze((c1::Ik)) ((c2::heb)) ((c3::honger))., pak to zajistí, že ExpressionCloze1, ExpressionCloze2 a ExpressionCloze3 jsou každá vyplněna 1. Pole ExpressionCloze4 by však bylo prázdné, pokud existuje. Tuto akci není obecně nutné při používání zásuvného modulu používat, protože zásuvný modul zajišťuje aktualizaci těchto polí při změně obsahu. Pokud však provádíte import nebo upravujete poznámky před použitím zásuvného modulu, lze tuto akci použít k opravě polí, aby byla synchronizována.

Pros a proti

Pros:

  • Karty Cloze lze přidat do stávajících typů poznámek bez jakýchkoli úprav kromě přidání nových polí a šablon karet.
  • V porovnání s vestavěným typem Cloze v Anki máte větší flexibilitu v tom, jak jsou karty Cloze vykresleny. Můžete si vybrat, kolik dalších hodnot cloze se má zobrazit, místo aby se vždy zobrazovaly všechny. Tato funkce je podobná té, kterou poskytují typy Cloze (Skrýt vše) a Cloze Overlapper.
  • Vztahuje se na JavaScript a vestavěné funkce Anki, jako je selektivní generování karet. Vzhledem k tomu, že funkce Cloze je implementována v šablonách, nejsou pro její fungování nutné žádné úpravy Anki prostřednictvím zásuvného modulu. To výrazně snižuje pravděpodobnost, že budoucí aktualizace Anki tento přístup naruší.
  • Není vyžadován žádný externí JavaScript. Veškerý potřebný JavaScript existuje v šablonách.

Nevýhody:

  • Záleží na JavaScriptu, což funguje, protože s kartami Anki se zachází jako s webovými stránkami. Autor Anki však upozorňuje, že funkce Javascriptu jsou poskytovány bez jakékoliv podpory nebo záruky. Existuje tedy velmi malá šance, že by budoucí aktualizace Anki mohla ovlivnit vykreslování karet a vyžadovat změny v šabloně, které bych vzhledem ke své závislosti na funkčnosti tohoto přístupu neprodleně provedl já.
  • Protože je funkce cloze implementována v šablonách, nikoli v Anki, je třeba do každé šablony karty efektivně kopírovat stejnou šablonu. Také pokud provedete úpravu jedné ze šablon cloze, musíte obsah zkopírovat i do ostatních.
  • Přidání předpony type: umožňující zadání odpovědi není podporováno.

Kompatibilita

Verze Anki

Šablony karet jsou kompatibilní s Anki Desktop, AnkiMobile a AnkiDroid.

Plugin funguje s Anki Desktop 2.1. Nemám v plánu přidat podporu verze 2.0.

Další zásuvné moduly

Ještě jsem netestoval interakci zásuvného modulu s dalšími zásuvnými moduly Cloze (Hide All) a Cloze Overlapper. Pokud narazíte na problém, nahlaste prosím problém a já se ho pokusím vyřešit.

Problémy s kompatibilitou s tímto pluginem byly hlášeny u následujících pluginů:

  • Přizpůsobení klávesových zkratek (Ctrl+Shift+C nemusí fungovat správně)

Inspirace

Kromě inspirace čerpané ze samotného systému Anki cloze existuje několik souvisejících pluginů Anki cloze, které poskytly inspiraci pro funkce, které se zde nacházejí. Děkujeme všem autorům za myšlenky vložené do Anki a těchto zásuvných modulů, které pomohly rozvinout nové nápady.

  • Cloze (Hide All)
  • Cloze Overlapper

Vydání zásuvných modulů

  • 0.1 – Počáteční vydání (2019-12-17)
  • 0.2 – Přidání akcí v menu Automatické uzavření celého pole a Vytvoření chybějících karet (2019-12-29)

Vydání šablony

  • (2019-12-17) Počáteční vydání
  • (2019-12-24) Šablona nyní umožňuje číslování v názvech polí.
  • (2020-01-03) Další možnosti konfigurace. Zpětné odkazy pro zachování znaků jako nápovědy.
  • (2020-05-31) Přidání CSS pro aktuální cloze pro jeho zvýraznění na zadní straně karty. Změna váhy písma pro aktuální cloze na tučné. Viz vydání č. 7

Licence

Copyright 2019-2020 Matthew Hayes

Licencováno pod licencí Apache, verze 2.0 (dále jen „Licence“);tento soubor můžete používat pouze v souladu s Licencí.Kopii Licence můžete získat na adrese

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

Pokud to nevyžadují příslušné právní předpisy nebo to není písemně dohodnuto, je software distribuovaný podle Licence šířen na základě „TAK, JAK JE“, BEZ ZÁRUK A PODMÍNEK JAKÉHOKOLI DRUHU, ať už výslovných, nebo předpokládaných.

Konkrétní znění upravující oprávnění a omezení podle Licence najdete v Licenci.