Worum es geht
Anki-KaTeX-Markdown habe ich
im Februar 2021 geschrieben. Es ist ein Add-on für Anki, das zwei Notiztypen
anlegt, deren Karten Markdown und Mathematik darstellen: $...$ für Formeln im
Text und $$...$$ für abgesetzte Formeln, gerendert mit KaTeX. Das README
nennt zwei Gründe: KaTeX gilt als schneller als MathJax, und Markdown ist eine
einzige Syntax für die gesamte Formatierung einer Karte. Ankis eigene
MathJax-Syntax mit \(...\) und \[...\] funktioniert weiterhin. Das Add-on
ist auf AnkiWeb veröffentlicht,
das Repository hat 86 Sterne, 12 Forks und 20 offene Issues.
Was das Add-on tut
Beim Laden eines Profils prüft das Add-on, ob die Notiztypen
"KaTeX and Markdown Basic" (Felder Front und Back) und
"KaTeX and Markdown Cloze" (Felder Text und Back Extra) vorhanden sind, und
legt sie an, falls sie fehlen. Danach kopiert es die Bibliotheken in den
Medienordner der Sammlung: KaTeX mit seinen Schriften und der
mhchem-Erweiterung für Chemie, markdown-it mit dem Plugin markdown-it-mark für
==markierten== Text und highlight.js für Codeblöcke. Die Vorlagen bereits
vorhandener Notiztypen überschreibt es nicht. Ein Kommentar im Code nennt den
Grund: Nutzer haben sie möglicherweise angepasst.
Im Editor fügt das Add-on unter den Feldern eine Vorschau ein, die bei jedem Tastendruck die ersten beiden Felder rendert.
Wie eine Karte gerendert wird
Jedes Feld steht in einem versteckten Element, zum Beispiel
<div id="front"><pre>{{Front}}</pre></div>. Ein Skript in der
Kartenvorlage lädt jede Bibliothek aus dem Medienordner. Lässt sich eine Datei
dort nicht laden, holt es dieselbe Bibliothek von einem CDN. In einem Issue von
2021 habe ich festgehalten, dass die Apps auf dem Handy die lokalen Dateien
nicht finden und deshalb das CDN nutzen. Das README sagt, dass die Karten auf
jedem Gerät mit Internetverbindung funktionieren.
Das Rendern läuft dann in zwei Schritten. Das Skript wandelt das HTML, das
Ankis Editor speichert (<br>, <div>, <span>, ), zurück in reinen
Text und startet das Auto-Render von KaTeX mit diesen Begrenzern:
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
],
throwOnError: false
Da throwOnError abgeschaltet ist, erscheint eine Formel mit Syntaxfehler an
ihrer Stelle, und der Rest der Karte wird trotzdem gerendert. Anschließend
rendert markdown-it das Ergebnis, mit erlaubtem HTML und highlight.js für
Codeblöcke, die eine Sprache angeben. Erst danach wird das Element sichtbar,
damit der ungerenderte Quelltext nicht kurz aufblitzt.
Weil die Mathematik vor dem Markdown gerendert wird, gilt auch ein $ in einem
Codeblock als Formelbegrenzer. Darum geht es in mehreren Issues.
Was Nutzer sich wünschen
Die Issues lassen sich in einige Gruppen einteilen:
- Dollarzeichen in Code:
${variable}in einem JavaScript-Block löst KaTeX aus (#24), und #48 zeigt nach einem$rohes KaTeX-HTML. Beide sind offen. - Mobile Apps: Das Issue mit den meisten Kommentaren (25) ist
#3, ein
fehlgeschlagenes Laden von
katex.min.jsunter Android im März 2021. Für iOS gibt es eine eigene offene Meldung (#21). - Nachtmodus: Codeblöcke behielten einen hellen Hintergrund und waren nicht mehr lesbar (#29, #45).
- Die Vorschau im Editor: Sie wurde in #8 gewünscht und vier Tage später ergänzt. #35 (macOS, 4 Reaktionen) und #38 (Windows) melden, dass die Vorschau nicht erscheint. Beide sind offen.
- Eigene Notiztypen: Nutzer wünschen sich mehr Felder, eine umgekehrte Karte oder einen Cloze-Typ, der die Lücken einzeln aufdeckt. Ein Nutzer hat eine Anleitung geschrieben, wie man die Skripte in eigene Notiztypen übernimmt (#31, 21 Kommentare, 5 Reaktionen).
Was sich über die Releases geändert hat
Der größte Teil der Arbeit fiel zwischen Februar und August 2021 an: lokale Kopien der Bibliotheken mit dem CDN als Rückfallebene im März, ein kurzes Einblenden nach einer Meldung über Flackern (#5), das im April wieder entfiel, highlight.js im Juni, die Editor-Vorschau, mhchem und gestaltbare Lücken im Juli und markdown-it-mark im August. Im Juli habe ich versehentlich zu viele Änderungen zurückgenommen, wodurch die Chemie-Unterstützung bis Mitte August nicht funktionierte.
Im September 2022 habe ich einen GitHub-Actions-Workflow ergänzt, der den
Add-on-Ordner zu MDKaTeX.ankiaddon packt und bei jedem Push als Release
veröffentlicht. Die Versionsnummer ist die Laufnummer des Workflows, deshalb
hat die Liste Lücken: V.16 und V.17 stammen aus dem September 2022, V.18 bis
V.21 aus dem Mai 2023, als ich die Vorschau an den Editor einer neueren
Anki-Version angepasst habe. Im März 2022 hatte ich in #31 geschrieben, dass
ich das Projekt aus Zeitmangel mehr oder weniger aufgegeben hatte.
2023 schickte ein Mitwirkender einen Pull Request mit farbigen Cloze-Karten, besseren Codeblöcken, maskierten Dollarzeichen und Unterstützung für den Nachtmodus (#44). Ich habe mich gegen das Mergen entschieden, weil das Ersetzen der Notiztypen die Anpassungen zerstören könnte, die Nutzer an ihren lokalen Kopien gemacht hatten, und vorgeschlagen, stattdessen auf seine Version zu verweisen. Er hat sie als eigenes AnkiWeb-Add-on veröffentlicht, das neue Notiztypen anlegt. Keiner der sechs Pull Requests im Repository wurde gemergt.
V.24 vom 18.10.2026 behebt die Codeblöcke im Nachtmodus. _highlight.css hat
jetzt dunkle Farben unter .nightMode und .night_mode, mit einem
niedrigsten Token-Kontrast von 5,4:1. Das Add-on kopiert eine Datei nur dann in
den Medienordner, wenn sie dort noch nicht liegt. Ein aktualisiertes Stylesheet
erreichte bestehende Sammlungen deshalb nie. Seit V.24 ersetzt es
_highlight.css beim Start. Damit wurden #29 und #45 geschlossen.
Code und Releases liegen unter github.com/Jwrede/Anki-KaTeX-Markdown.