matthayes / anki_cloze_anything

Build StatusRelease

Ez a projekt egy sablon alapú cloze implementációt biztosít, amely:

  • teljesen független az Anki Cloze Deletionjától,
  • nem igényel semmilyen módosítást az Ankiben (egy pluginon keresztül) a működéséhez,
  • és nagyobb rugalmasságot biztosít a cloze-kártya generálásában

Ez pusztán a kártyasablonban lévő JavaScript segítségével és az Anki beépített (fantasztikus) Selective Card Generation funkciójának újszerű alkalmazásával érhető el. Ennek nagy előnye, hogy már meglévő jegyzetekből is generálhatsz cloze-kártyákat, amelyekhez esetleg már vannak kártyáid. Nem függ sem az Anki Cloze jegyzettípustól, sem más jegyzettípusoktól, ami azt jelenti, hogy nem kell a kártyáidat egy új jegyzettípusra migrálni. Kompatibilis az Anki Desktop, AnkiMobile és AnkiDroid rendszerekkel.

A kezdés egyszerű. Letöltheti a megosztott paklit, vagy követheti a sablonok kézi beállítására vonatkozó utasításokat.

Az Anki funkcióinak JavaScript és kártyasablonok segítségével történő megismétlése azonban nem cél. A cél a végtelen rugalmasság. Bármely meglévő jegyzettípushoz (“cloze anything”) hozzáadhat cloze-kártyákat egyszerűen új mezők és kártyasablonok hozzáadásával az itt található utasítások alapján. A sablonokat teljesen módosíthatja is, egyszerűen csak útmutatóként használva őket.

Az alapértelmezett beállításokkal ez az Anki cloze funkcióit másolja. A sablon azonban nagymértékben konfigurálható, és olyan dolgokat is lehetővé tesz, amiket egyébként nem tudnál könnyen megtenni. Az alábbiakban összefoglaljuk a sablonok néhány hasznos funkcióját és ezt a megközelítést.

  • Más cloze törlések láthatóságának szabályozása. Normális esetben az Anki megmutatja a többi cloze-törlést azon kívül, amelyik éppen tesztelés alatt áll egy adott kártyához. Az itteni megközelítés lehetővé teszi ennek testreszabását, hasonlóan a Cloze (Hide All) és a Cloze Overlapper által biztosított funkciókhoz.
  • A cloze formátum testreszabása. Az Anki minden egyes cloze értéket vagy tipp esetén értékkel helyettesít. A sablonok segítségével ezt testre szabhatja. Használhat például aláhúzásokat, és a formátum lehet ___. Vagy mindig megadhatja a célzást, mint a ___ esetében. Továbbá a 3 karakteres fix szám helyett minden nem szóközös karaktert helyettesíthet. Így a ((c1::ab cdef::hint))-ből __ ____ .
  • Lehetne __ ____ .
  • A karakterek szelektív feltárása célzásként. Néha a kétértelműség miatt szükség lehet arra, hogy utalást adjunk arra, hogy mivel kezdődik egy szó. A sablon egyszerű szintaxissal támogatja ezt. Egyszerűen vegye körbe a megtartani kívánt karaktereket backtickkel. A ((c1::`a`bc `d`ef)) például a__ d__-ként jeleníthető meg. A tartalom bármely részét szelektíven feltárhatja, nem csak az elejét. Vegye figyelembe, hogy a a((c1::bc)) d((c1::ef)) is használható, azonban a backtick szintaxis kényelmesebb lehet.
  • Hozzáadja a klóz törlést egy meglévő jegyzethez. Tegyük fel, hogy már van egy jegyzete Kifejezés és Jelentés mezőkkel, és van egy lapja, amely a Kifejezés -> Jelentést teszteli. Most tegyük fel, hogy a Kifejezésnek egy olyan változatát szeretné, amely cloze törlést tartalmaz. Normális esetben az Anki segítségével a szöveget egy teljesen külön jegyzetbe kellene másolnia a Cloze jegyzettípus alapján. Ennek a kezelése nagy fejfájást okoz. Ehelyett a Cloze Anything megközelítéssel a szöveget egy ExpressionCloze mezőbe másolja ugyanabban a jegyzetben. Ezáltal sokkal könnyebbé válik a tartalom kezelése. A böngészőben egy egyszerű kereséssel könnyen megtalálhatja azokat a jegyzeteket, amelyekben nincs Cloze.
  • Több Cloze törlési mező hozzáadása egy meglévő jegyzethez. Tegyük fel, hogy van egy olyan jegyzettípusa, amely a szókincset teszteli VocabItem és Meaning mezőkkel. Tegyük fel, hogy hozzáadott néhány példa mezőt PéldaA és PéldaB, hogy példákat adjon a szókincselem használatára. A Cloze Anything megközelítéssel létrehozhat Cloze-verziókat ezekhez a példákhoz ExampleACloze és ExampleBCloze néven, és mindegyikből kártyákat készíthet.

Egy opcionális bővítményt is biztosítunk, amely automatizálja az egyébként (minimális) kézi munka egy részét, amelyre e megközelítés követése esetén szükség lenne.

Kezdő lépések

Két lehetőség van a kezdésre:

  1. Töltse le a megosztott paklit, amit már elkészítettem az Ön számára, és használja a jegyzettípust (és a kártyasablonokat) a kártyái alapjaként.
  2. Kövesse a részletes utasításaimat a mezők és kártyasablonok beállításához. Ez a legjobb választás, ha egy meglévő jegyzettípushoz szeretnél cloze-t hozzáadni.

A plugin telepítése is ajánlott, hogy megkönnyítse a cloze-kártyák szerkesztését, de nem kötelező.

Így működik a sablon

Az Anki Cloze sablonjaihoz hasonlóan szükséged van egy mezőre, amely tartalmazza a cloze-tartalmat. Konvencióból jó ötlet, ha a mező neve Cloze-ra végződik, arra az esetre, ha később használni akarod a bővítményt. Tegyük fel, hogy elnevezzük ExpressionCloze-nek, ahogy az utasításban javasoltuk. A Cloze-tartalom beírása ebbe a mezőbe hasonló módon történik, mint az Anki Cloze sablonjainál. Az egyetlen különbség, hogy a {{c1::text}} formátum helyett a ((c1::text)) formátumot használja. Ezután az egyes cloze-kártyák engedélyezéséhez mezőkre van szükség. Tehát tegyük fel, hogy három klózkártyát szeretne támogatni. Ehhez a ExpressionCloze1, ExpressionCloze2 és ExpressionCloze3 mezőket kell hozzáadni. Ezekbe a mezőkbe bármilyen szöveget beírhat, hogy engedélyezze a megfelelő cloze-kártyát. A bővítmény konvencióból használja a 1.

Például tegyük fel, hogy az Ik heb honger kifejezés minden egyes szavához cloze-kártyát szeretne létrehozni. A mezőket így írná meg:

Ik heb honger mezők

A példa HTML megjelenítését lásd itt.

Mivel a cloze mezők mindegyikének nem üres értéke 1, a c1-től c3-ig mindegyikhez létrejön egy-egy kártya. Ha a ExpressionCloze3-ből törölted a 1 értéket, akkor csak a c1 és a c2 értékekhez generálódik egy kártya.

Vizsgáljuk meg, hogyan működik mindez. A korábban hivatkozott utasításban a következő sablon szerepel az első klózlaphoz. Vegyük észre, hogy a kártya elejének teljes tartalma a ExpressionCloze és ExpressionCloze1 alapján feltételes címkékkel van körülvéve. Ez azt jelenti, hogy mindkét mezőnek nem lehet üres ahhoz, hogy a kártya létrejöjjön, az Anki kártya generálásának módja miatt. Ha tehát valamelyik mező üres, a megfelelő kártya nem generálódik. A kihagyott szkript egyszerűen megnézi, hogy a data-card értéke milyen számmal végződik, majd ennek megfelelően frissíti a tartalmat a <div> klaszteren belül. Tehát ha a data-card értéke ExpressionCloze2, akkor tudja, hogy elrejti a ((c2::text))-et és megmutatja a többit.

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

A sablonok a cloze törléseknél is támogatják a tippeket, mint az Anki rendszerében. Például az alábbi példában a heb helyett lenne a helyett.

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

Konfiguráció

A sablon több beállítással is szabályozhatja a cloze törlések megjelenítését. Minden beállítás a div-hoz kerül hozzá, ahogy az alább látható a data-cloze-show-before esetében.

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

data-cloze-replace-char

Ez szabályozza, hogy milyen karakterrel helyettesítse a clozed értékeket. Az alapértelmezett egy pont, ., ami megegyezik az Ankival. Ha ehelyett aláhúzásokat szeretne használni:

data-cloze-replace-char="_"

data-cloze-replace-same-length

Ez egy true vagy false érték, amely szabályozza, hogy a clozed értékeket fix 3 karakteres helyettesítéssel vagy a tartalomban meglévővel azonos számú helyettesítő karakterrel helyettesítse. Az alapértelmezett érték false, ami megegyezik az Anki cloze viselkedésével.

Ha true értékre állítjuk, akkor a ((c1::abcd)) értéket értékkel helyettesítenénk.

Megjegyezzük, hogy ha true értékre állítjuk, akkor a szóközöket megőrzi. Így tehát ((c1::abc def)) ___ ___ lesz. Vagyis csak a nem szóközös karakterek kerülnek kicserélésre.

data-cloze-always-show-blanks

Ez egy true vagy false érték, amely szabályozza, hogy az üres részek akkor is megjelenjenek-e, ha van egy utalás. Az alapértelmezett érték false, ami megegyezik az Anki viselkedésével. Vagyis a ((c1::abc)) lesz, de a ((c1::abc::hint)) lesz. Ha true-re állítjuk, akkor az utóbbiból lesz.

Ez a beállítás általában hasznosabb, ha a data-cloze-replace-same-length, data-cloze-replace-char és az alábbi formázási beállításokkal együtt használjuk.

data-cloze-blanks-format, data-cloze-hint-format és data-cloze-blanks-and-hint-format

Ezek három különböző forgatókönyv esetén szabályozzák a cloze formátumát:

  • data-cloze-blanks-format: Formátum, amelyet akkor használnak, ha csak üres részek jelennek meg. Az alapértelmezett formátum .
  • data-cloze-hint-format: Formátum, amelyet akkor használnak, ha csak a célzás jelenik meg. Az alapértelmezett formátum .
  • data-cloze-blanks-and-hint-format: Az üres részek és a súgó megjelenítésekor használt formátum. Az alapértelmezett formátum: .

Tegyük fel, hogy inkább az üres lapok kitöltése stílusban szeretné használni a cloze-kártyákat. De még mindig szeretné megjeleníteni a tippeket, ha rendelkezésre állnak.

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

Ez a következő átalakításokat eredményezné:

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

data-cloze-show-before és data-cloze-show-after

A data-cloze-show-before és data-cloze-show-after beállításokat az alábbi részletben látható módon lehet hozzáadni a sablonhoz. Ezek szabályozzák, hogy az aktuális klóz előtt és után megjelenjenek-e más klózált értékek.

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

A fenti snippetben mindkét érték all értéket kap, ami az alapértelmezett. Ez azt jelenti, hogy az aktuális klóz előtt és után minden klóz törlése megjelenik. Tegyük fel például, hogy a tartalom:

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

A második lap, amely a c2-nak felel meg, az alábbiak szerint jelenne meg:

Ik ... honger

A all érték mellett a beállítások más lehetséges értékei a következők:

  • none, ami miatt egyik klóz törlés előtt/után sem jelenik meg.
  • Egy 0-nál nagyobb numerikus érték. Ha például mindkét beállításnál 1-et állít be, akkor az aktuális cloze előtt és után az első cloze törlések fognak megjelenni, de a többi nem.

Tegyük fel például, hogy a data-cloze-show-before="1" és data-cloze-show-after="1" értékeket állította be. Létrehoz egy kártyát a következő klóz-tartalommal:

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

A harmadik kártya, amely a c3-nak felel meg, így jelenne meg:

hamlet

Figyeljük meg, hogy az aktuális klóz kékkel van kiemelve, a többi pedig szürke. Ezt az utasításban megadott CSS szabályozza.

Ezzel szemben a data-cloze-show-before="all" és data-cloze-show-after="none" esetében a harmadik lap így jelenne meg:

hamlet2

data-cloze-keep-regex

Ez egy reguláris kifejezést tartalmaz, amely meghatározza, hogy a szöveg mely részeit nem kell üresekkel helyettesíteni, mintha backtickkel lennének körülvéve. Alapértelmezés szerint tartalmazza az alapvető latin betűs írásjeleket, amelyeket a legtöbb felhasználó szeretne megjeleníteni a klózban. A különböző írásjegyekből származó írásjelek átfogóbb készletét a következőkkel lehet beállítani:

data-cloze-keep-regex="]"

Hála annak, hogy ez a mező egy reguláris kifejezés, mindenféle speciális forgatókönyvhöz használhatja. Ha például a záradék elejétől az első kettőspontig tartó szöveget szeretné megjeleníteni az alapvető latin betűs írásjelek mellett, de minden mást el akar rejteni, akkor használhatja a:

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

Ez az opció csak akkor fejti ki hatását, ha a data-cloze-replace-same-length be van állítva.

Konfiguráció felülbírálása

Ha bizonyos kártyák esetében felül szeretnéd írni az alapértelmezett konfigurációs értékeket, ennek egyik módja, hogy hozzáadsz egy mezőt a konfiguráció tárolására:

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

Ezután a ExpressionClozeConfig esetében ezt kitöltheted egy kártya esetében:

data-cloze-show-before="all"

Hogyan működik a bővítmény

A bővítmény két dolgot tesz, hogy megkönnyítse a Cloze törlések szerkesztését, ha ezt a megközelítést követi:

  • Kapcsolódik az Anki gombjához a szerkesztőben, így az Anki Cloze típusán alapuló jegyzeteken kívül más jegyzetekre is használhatja.
  • Szinkronizálja a ExpressionCloze mező (vagy hasonló nevű mező) szerkesztéseit a többi ExpressionCloze1, ExpressionCloze2 stb. mezővel, amelyek lehetővé teszik a megfelelő Cloze-kártyákat.

A gomb ugyanúgy viselkedik, ha az Anki Cloze-típusán alapuló jegyzettípusok valamelyikén használja. Ellenkező esetben azonban, ha a mező neve Cloze-re végződik, mint például ExpressionCloze, akkor a kiválasztott szöveget betekeri, mint például a ((c1::text)) esetében. Ez ugyanaz, mint az Anki normál viselkedése a Cloze mezőkkel, kivéve, hogy zárójeleket használ a görbe zárójelek helyett.

A gombnak van egy további hasznos funkciója: ha megnyomja, miközben egy üres, Cloze végződésű mezőn van a fókusz, akkor egy másik, azonos nevű mező szövegét másolja be a Cloze utótag levonásával. Például, ha a gombra kattint, miközben a ExpressionCloze mezőre fókuszál, akkor a Expression.

A Cloze mezőt a gomb használata nélkül is módosíthatja. A bővítmény figyeli a változásokat és azonosítja az olyan mintákat, mint a ((c1::text)). A megfelelő cloze-mezőket a cloze-törlések jelenlététől függően üressé teszi, vagy 1-t tartalmaz. Ha például a ExpressionCloze-et ((c1::Ik)) ((c2::heb)) ((c3::honger)).-vel tölti ki, akkor a ExpressionCloze1, ExpressionCloze2 és ExpressionCloze3 mindegyikéhez 1-et fog kitölteni. Ha úgy szerkeszted, hogy ((c1::Ik)) ((c2::heb)) honger. legyen, akkor a ExpressionCloze3-et üressé teszi.

Menu Actions

A plugin két műveletet ad hozzá a böngészőben a Szerkesztés -> Cloze Anything alatt. Mindkettő a böngészőben kiválasztott bármilyen jegyzetre hat.

Teljes mező automatikus klózolása

Ez automatikusan klózol egy teljes mezőt. Tegyük fel például, hogy van egy ExpressionCloze és egy Expression nevű mező. Ha a ExpressionCloze üres, akkor ez a művelet hatására a Expression tartalma átmásolódik a ExpressionCloze-be, és a ((c1::content))-hez hasonló cloze-t készít belőle. A művelet a ExpressionCloze1-t is frissíti, hogy a cloze-kártya létrejöjjön. Ez akkor hasznos, ha sok rövid tartalmú jegyzete van, ahol a teljes tartalmat cloze-olni szeretné. Sokkal hatékonyabb ezeket ömlesztve cloze-olni, mint egyesével.

Megjegyezzük, hogy ez lényegében a cloze-t egy Termelési kártya elkészítésére használja (azaz adott az anyanyelvi jelentés, előállítja a kifejezést a tanult nyelven). Akkor miért nem készítünk egyszerűen egy Production card sablont ahelyett, hogy a cloze-t használnánk? Bizonyos esetekben ez hatékonyabb lehet, mint a cloze használata. Van azonban néhány ok, amiért hasznos lehet a cloze:

  • A jegyzetei lehetnek egyszerű kifejezések keverékei, ahol egyetlen cloze-t szeretne a teljes tartalomhoz, és összetettebb kifejezéseké, ahol két vagy több cloze-t szeretne. Ezzel a művelettel kiválaszthatja az egyszerű kifejezéseket a böngészőben, és ömlesztve klózolhatja őket.
  • A jegyzetei összességében lehetnek egyszerű kifejezések. De előfordulhat, hogy néhány jegyzet esetében az átnézéskor úgy találja, hogy azok összetettebbek, mint gondolta. Lehet, hogy egy cloze helyett kettőre vagy többre kell változtatnia. A cloze használatával rugalmasan meggondolhatja magát a jövőben anélkül, hogy át kellene térnie egy másik jegyzettípusra.

Hiányzó kártyák létrehozása

Ez alapvetően csak biztosítja, hogy a Cloze mező szinkronban legyen a megfelelő mezőkkel, amelyek a kártya generálásáért felelősek. Például, ha a ExpressionCloze-hez ((c1::Ik)) ((c2::heb)) ((c3::honger)). tartozik, akkor ez biztosítja, hogy a ExpressionCloze1, ExpressionCloze2 és ExpressionCloze3 mindegyikét egy 1 töltse ki. A ExpressionCloze4 viszont üres lenne, ha létezik. Ezt a műveletet általában nem szükséges használni a bővítmény használata közben, mivel a bővítmény biztosítja, hogy ezek a mezők frissüljenek a tartalom módosításakor. De ha importál, vagy ha a plugin használata előtt szerkeszti a jegyzeteket, akkor ezzel a művelettel javíthatja a mezőket, hogy szinkronban legyenek.

Előnyök és hátrányok

Előnyök:

  • A meglévő jegyzettípusokhoz új mezők és kártyasablonok hozzáadásán kívül egyéb módosítások nélkül hozzáadhatók a Cloze kártyák.
  • Az Anki beépített Cloze típusával összehasonlítva nagyobb rugalmasságot élvez a Cloze kártyák megjelenítésében. Kiválaszthatja, hogy a többi cloze-érték közül hányat jelenítsen meg, ahelyett, hogy mindig az összeset megjelenítené. Ez a funkció hasonló a Cloze (Hide All) és a Cloze Overlapper által nyújtott funkcióhoz.
  • Támaszkodik a JavaScriptre és az Anki beépített funkcióira, például a szelektív kártyagenerálásra. Mivel a Cloze funkcionalitás a sablonokban van implementálva, nincs szükség az Anki pluginon keresztül történő módosítására ahhoz, hogy működjön. Ez nagymértékben csökkenti annak esélyét, hogy az Anki jövőbeli frissítései megtörik ezt a megközelítést.
  • Nincs szükség külső JavaScriptre. Minden szükséges JavaScript megtalálható a sablonokban.

Hátrányok:

  • Szükséges a JavaScript, ami azért működik, mert az Anki kártyákat weblapként kezeli. Az Anki szerzője azonban megjegyzi, hogy a Javascript funkcionalitást mindenféle támogatás és garancia nélkül nyújtja. Így van egy nagyon kicsi esély arra, hogy egy jövőbeli Anki frissítés hatással lehet a kártyák megjelenítésére, és változtatásokat igényel a sablonban, amit én azonnal végrehajtanék, mivel függök attól, hogy ez a megközelítés működik-e.
  • Mivel a cloze funkcionalitás nem az Anki, hanem a sablonokban van implementálva, gyakorlatilag ugyanazt a sablont kell minden egyes kártyasablonba bemásolni. Továbbá, ha szerkesztést végez az egyik cloze sablonon, akkor a tartalmát a többi sablonra is át kell másolnia.
  • A type: előtag hozzáadása a válasz beírásának engedélyezéséhez nem támogatott.

Kompatibilitás

Anki verziók

A kártyasablonok kompatibilisek az Anki Desktop, AnkiMobile és AnkiDroid rendszerekkel.

A plugin az Anki Desktop 2.1 verzióval működik. Nem tervezem a 2.0 támogatás hozzáadását.

Más pluginok

Nem teszteltem még a plugin kölcsönhatásait más cloze pluginokkal, mint például a Cloze (Hide All) és a Cloze Overlapper. Ha problémával találkozol, kérlek, írj egy problémát, és mindent megteszek, hogy kijavítsam.

A következő bővítményekről jelentették, hogy kompatibilitási problémáik vannak ezzel a bővítménnyel:

  • Billentyűparancsok testreszabása (Ctrl+Shift+C esetleg nem működik megfelelően)

Inspiráció

Az Anki cloze rendszeréből származó inspiráción kívül van néhány kapcsolódó Anki cloze bővítmény, amely inspirációt adott az itt található funkciókhoz. Köszönet minden szerzőnek az Anki és ezekbe a pluginokba fektetett gondolatokért, amelyek segítettek az új ötletek kifejlesztésében.

  • Cloze (Hide All)
  • Cloze Overlapper

Plugin kiadások

  • 0.1 – Első kiadás (2019-12-17)
  • 0.2 – A menü akciók hozzáadása Teljes mező automatikus lezárása és Hiányzó kártyák létrehozása (2019-12-29)

Sablon kiadások

  • (2019-12-17) Első kiadás
  • (2019-12-24) A sablon mostantól számokat is engedélyez a mezőneveken belül.
  • (2020-01-03) További konfigurációs lehetőségek. Backtickek a karakterek megtartásához, mint tippek.
  • (2020-05-31) CSS hozzáadása az aktuális klózhoz, hogy kiemelje azt a kártya hátoldalán. Az aktuális klóz betűsúlyának módosítása félkövérre. Lásd Issue #7

Licenc

Copyright 2019-2020 Matthew Hayes

Licensed under the Apache License, Version 2.0 (“License”);ezt a fájlt csak a Licencnek megfelelően használhatja.A Licenc egy példányát a

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

Hacsak a vonatkozó törvények nem írják elő, vagy írásban nem állapodtak meg, a Licenc alapján terjesztett szoftverek “AS IS” ALAPON kerülnek terjesztésre, SEMMILYEN SZAVAZÁS ÉS FELTÉTEL NÉLKÜL, akár kifejezett, akár hallgatólagos.A Licenc szerinti engedélyeket és korlátozásokat szabályozó konkrét nyelvezetet lásd a Licencben.