Matematiktilgængelighed
MathML, MathJax og den lange vej
I tyve år har nettet gengivet prosa godt og matematik dårligt. Naturfremstilling af MathML i Chromium 109 og en stille modnet Speech Rule Engine har endelig vendt udviklingen. Denne primer kortlægger, hvordan brikkerne passer sammen, og hvilken man skal række efter i 2026.
1. Native MathML i 2026
Det første, man skal sige klart, er, at den lange, langsomme diskussion om, hvorvidt browsere bør gengive matematik native, er afgjort. Firefox har gengivet MathML siden begyndelsen af 2000’erne; WebKit leverede en brugbar implementering i Safari i 2013; den hidtidige modstander, Chromium, landede endelig MathML Core i version 109 i januar 2023. Denne ene udgivelse frigav platformen: i midten af 2026 taler de store browsermotorer på alle desktops og næsten alle telefoner MathML som et førsteklasses sprog. Flugtvejsløsningen, som nettet standardiserede på i næsten tyve år — gengiv matematik som et billede med et alt-attribut, som skærmlæserbrugeren skal have tillid til — er ikke længere det ansvarlige standardvalg.
Det, der ændrede sig i 2023, er snævrere end overskriften antyder. Chromium implementerede ikke hele MathML 3; det implementerede MathML Core, en delmængde bevidst afgrænset til de elementer, browsere kan gengive pålideligt, og som hjælpeteknologier kan navigere i. Grundskolematematisk notation (lang division, regnebær, staklægning) er ikke i Core. Linjeskift inde i en lang ligning er i Core, men heuristikkerne er konservative. Visse avancerede stretchable operatorer gengives stadig inkonsekvent på tværs af motorer. Men grundstrukturen — brøker, rodtegn, ned- og opgangsskrifter, matricer, integraler, summation, operatorordlisten — er nu i alle motorer, der betyder noget.
Den tilgængelighed smæssige konsekvens er direkte. En side, der udsender MathML direkte i DOM, leverer et semantisk udtryk, som en skærmlæser kan udtale, navigere i og genudtale i et andet detaljeringsniveau. En side, der udsender et billede med et alt-attribut, leverer en enkelt sætning, som skærmlæserbrugeren ikke kan bore sig ned i, ikke kan genudtale og ikke kan kopiere ind i en lommeregner. I ti år var afvejningen reel, fordi Chromium ikke kunne gengive MathML, og at falde tilbage til billeder betød færre ødelagte sider. Denne afvejning holder ikke længere.
MathML Core er den delmængde af MathML 3, browsermotorerne aftalte at levere interoperabelt. Hvis man i dag udsender MathML fra en build-pipeline, er Core målet. Grundskolematematisk notation og avancerede layoutudvidelser lever i den bredere MathML 3-specifikation; betragt dem som progressive forbedringer, der stadig drager fordel af et MathJax-fallback.
„En side, der udsender et billede med et alt-attribut, leverer en enkelt sætning, som skærmlæserbrugeren ikke kan bore sig ned i, ikke kan genudtale og ikke kan kopiere ind i en lommeregner.“
2. MathJax: fra renderer til polyfill
MathJax var broen, der holdt matematik på nettet læselig under den lange Chromium-kløft. Siden sin første udgivelse i 2010 tog MathJax LaTeX eller MathML i kilden og producerede stiliseret HTML eller SVG-output, som enhver browser kunne gengive. Det meste af sin levetid var det det primære gengivelseslag for matematisk indhold på nettet — Wikipedia, arXiv, MathOverflow, Stack Exchange og langt de fleste akademiske udgivelsesplatforme leverede MathJax på hver side.
Den rolle, MathJax spiller i 2026, er anderledes. Med Chromium, der gengiver MathML native, er jobbet som renderer-of-last-resort udført. Det, MathJax gør nu, og gør bedre end noget andet, er at placere sig foran legacy-LaTeX-kilder og omdanne dem til rent MathML, som browseren gengiver direkte. Versionerne v3 og v4 blev omskrevet med dette for øje: LaTeX-inputparseren er moden, MathML-outputtet er standardoverensstemmende, og runtime kan konfigureres til at udsende MathML og derefter træde til side og lade browseren overtage layoutarbeidet. Biblioteket er større end ønskværdigt på en kritisk-sti-side, men det er den mest pålidelige LaTeX-til-MathML-konverter på nettet.
3. LaTeX til MathML i praksis: godt versus dårligt markup
Det meste matematisk indhold på nettet har en LaTeX-kilde et sted opstrøms. Spørgsmålet er, hvor LaTeX-til-MathML-konverteringen sker — på byggetidspunktet, ved runtime eller aldrig. Det mønster, der vinder på alle tilgængelighed saxer, er konvertering til MathML på byggetidspunktet med det gengivne MathML udsendt direkte i sidens HTML. Det mønster, der taber på alle akser, er at levere et billede af en LaTeX-gengivelse med et alt-attribut, der parafraserer ligningen.
- Ligningen lever i DOM som semantisk markup.
- Skærmlæseren udtaler operator, operand og struktur — og lader brugeren navigere i deludtryk.
- Browsere gengiver det native; nul runtime-JavaScript på den kritiske sti.
- Søgemaskiner og AI-resuméværktøjer kan læse udtrykket som tekst.
- Kopiér-indsæt producerer en brugbar repræsentation, ofte retur-konverterbar til LaTeX.
- Ligningen er et fladt billede; strukturen er usynlig for hjælpeteknologi.
- Skærmlæseren udtaler den ene alt-sætning; ingen navigation, ingen genudtale, ingen detailjeringsniveaukontrol.
- Billedet skalerer dårligt med læserzoom og operativsystemets tekststørrelse.
- Søgemaskiner og AI-værktøjer ser “billede af ligning” og intet mere.
- Kopiér-indsæt producerer en PNG; læseren kan ikke flytte matematikken ind i en lommeregner.
Mange CMS-platforme leverer stadig rå LaTeX inde på siden og lader et runtime-bibliotek (ofte MathJax) opdage og konvertere det ved indlæsning. Resultatet gengives, men kun efter et script har kørt — en ikke-triviel tilgængelighed smæssig straf på langsomme netværk og en målbar layout-shift-omkostning. Konvertér på byggetidspunktet, når det er muligt; reserver runtime-konvertering til legacy-kilder, der ikke kan genopbygges.
4. Skærmlæsernavigation i matematik
At gengive matematikken er halvdelen af jobbet. Den anden halvdel er navigation: en lang ligning kan ikke lineariseres til en enkelt udtalt sætning uden at læseren mister tråden. Alle store skærmlæsere leverer nu en “matematiktilstand”, der lader brugeren gå ind i en brøk, vandre langs tæller, dykke ned i et nedgangsskrifte, springe ud til moderudtrykket og genudtale det aktuelle deludtryk i et andet detaljeringsniveau. Implementeringerne adskiller sig i modenhed, tastaturgenveje og — afgørende — hvilken tale-regelbibliotek de deler.
| Skærmlæser | Native MathML | Tale-motor | Navigation | Modenhed |
|---|---|---|---|---|
| NVDA (Windows) | Ja | MathCAT (moderne), historisk MathPlayer-tilføjelse | Deludtryk-gang, detaljeringsniveauer, brailleoutput | Produktionsklar |
| JAWS (Windows) | Ja | MathCAT | Deludtryk-gang, matematik-kun gennemgangscursor | Produktionsklar |
| VoiceOver (macOS, iOS) | Ja | Apples interne, delvist afledt af MathML-semantik | Elementvælger-navigation; mindre granulær end NVDA/JAWS | Brugbar, mindre rig |
| ChromeVox (ChromeOS, Chrome) | Ja | Speech Rule Engine (SRE) direkte | Deludtryk-gang via SRE-regler | Stærk i klassekontekster |
| Orca (Linux) | Delvis | SRE via browser; Orca selv afhænger af tilgængeligt-træ-tekst | Begrænset; afhænger af browser | Variabel |
MathPlayer var den originale Design Science-tilføjelse, der lærte NVDA at udtale MathML; den er udfaset. MathCAT er dens moderne efterfølger — aktivt vedligeholdt, Rust-baseret, den anbefalede backend til både NVDA og JAWS i dag. MathML er selve markeringen: det input begge biblioteker forbruger. Henvisninger til MathPlayer i en spec eller leverandørdok fra 2026 er normalt historiske og bør læses som “matematik-tale-tilføjelsen” i ånd.
5. Speech Rule Engine stille i baggrunden
Bag næsten alle moderne matematik-tale-oplevelser på nettet ligger et projekt, de fleste ingeniører aldrig har hørt om: Speech Rule Engine eller SRE. SRE startede inde i Googles ChromeVox-team i midten af 2010’erne og er nu et open source-bibliotek vedligeholdt primært af Volker Sorge. Det tager MathML ind og udsender en struktureret talt form — på tværs af flere sprog, flere detaljeringsniveauer og flere regelsæt (MathSpeak, ClearSpeak, ChromeVox-classic). Det er også motoren, der driver den matematik-navigationstilgængelighed, MathJax eksponerer på sit eget gengivne output, og det refereres af både MathCAT og adskillige browser-side tilgængelighed-eksperimenter.
Grunden til, at SRE betyder noget som infrastruktur, er, at uden et kanonisk udtalelsesbibliotek ville alle skærmlæsere opfinde deres egen måde at sige x i anden plus y i anden er lig med r i anden. Med SRE konvergerer de store implementeringer mod et lille sæt sanktionerede regelsæt, hvilket betyder, at en lærer, der skriver en ligning i et lærebøgersopfordringsværktøj, nogenlunde kan forudsige, hvordan en elev, der bruger NVDA, JAWS eller ChromeVox, vil høre det. Konvergensen er ikke fuldstændig — VoiceOver er undtagelsen — men den er reel og voksende.
MathSpeak versus ClearSpeak
De to mest kendte regelsæt leveres inde i SRE. MathSpeak er den ældre, mere bogstavelige stil — “brøk et over to slut-brøk” — og er designet til præcision i braille-stil. ClearSpeak er nyere, mere naturlig lyd — “en halv” — og er standarden i de fleste klasserumsimplementeringer i dag. At skifte mellem de to er en detailjeringsstilpræference, ikke en anden motor.
Flersproget understøttelse
SRE leverer oversatte regelsæt til engelsk, fransk, tysk, italiensk, spansk og et voksende sæt yderligere sprog. Oversættelserne er ikke maskingenerede — de er skrevet af SRE-vedligeholdere og bidragydere med hjælp fra undervisere, der underviser i matematik på disse sprog. Dette er et af de få steder i webtilgængelighed, hvor lokaliseringen er tilstrækkelig komplet til at man kan stole på den.
Brailleoutput, ikke kun tale
SRE udsender Nemeth- og UEB-matematikbraille fra MathML, hvilket er den vej, de fleste moderne brailledisplays bruger til at gengive matematik. Den samme MathML-kilde, der driver det talte output, driver brailleoutputtet — præcis den arkitektoniske egenskab, et tilgængelighed-infrastrukturlag bør have.
6. Anbefalinger pr. dokumenttype
Det generelle princip — lever MathML, konvertér fra LaTeX på byggetidspunktet når muligt, læn dig op ad SRE for tale — gælder for alle dokumenttyper. Detaljerne skifter med fladen. Nedenfor er konkrete anbefalinger for de fire dokumentklasser, som de fleste tilgængelighed-teams leverer.
Webartkler og blogindlæg
Hvis platformen understøtter det, gengiv MathML direkte i indlægsteksten — de fleste statiske sitegeneratorer kan kalde Temml eller Pandoc på byggetidspunktet og udsende MathML i HTML. Hvis platformen er et legacy-CMS, der kun accepterer LaTeX, indlæs MathJax v4 i MathML-outputtilstand og lad det konvertere ved runtime, men cache aggressivt. Lever ikke PNG-billeder af ligninger.
Akademiske tidsskriftsartikler
Korpuset er overvejende LaTeX, og udgivelsespipeline er det rette sted at konvertere. Pandoc, MathJax i batch-tilstand eller forlagets egen LaTeXML-pipeline kan udsende HTML med MathML og en PDF i samme kørsel. Tilgængelighed-gevinsten er stor: en skærmlæserbruger, der læser en artikel online, får navigerbare ligninger frem for en PDF, hvis matematik er rasteriseret. Par HTML/MathML-outputtet med en tagged PDF-udgave til offlinelæsning.
Lærebøger og langt kursusindhold
EPUB 3 med indlejret MathML er standarden, og moderne læsesystemer (Apple Books, Thorium, ACE-testede produktionslæsere) håndterer det korrekt. Forfat én gang i MathML, lever den samme EPUB til synende og skærmlæserbrugere, og stol på SRE-drevet tale i hjælpeteknologilaget. Undgå at bage ligninger ind i rasterbilleder, selv om typografien ser bedre ud — tilgængelighed-omkostningen er ikke polereringen værd.
Klasserumsslides og liveundervisning
Slides er den rodigste flade — PowerPoint og Google Slides håndterer hver matematik forskelligt, og præsentationstilstand falder ofte tilbage til billeder. Det forsvarlige standardvalg i 2026 er at forfatte matematikken i et slideværktøj, der eksporterer MathML (eller at komponere slides som HTML), og at dele et parallelt HTML- eller EPUB-handout med de samme ligninger som MathML inden foredraget. Handoutet, ikke slidedækket, er det artefakt, en skærmlæserstuderende kan navigere i under og efter undervisningen.
På tværs af alle fire dokumenttyper gælder det samme princip: udsend MathML, lad browseren gengive det, lad SRE-drevet tale og braille håndtere hjælpeteknologilaget, og betragt enhver pipeline, der producerer et ligningsbillede, som en fejl, der skal rettes. Browsermotor-konvergensen i 2023 gjorde dette princip endelig overkommeligt. Skærmlæser-konvergensen mod SRE gjorde det endelig konsekvent.
Konklusion: den lange vej og dertil den nu fører
Matematiktilgængelighed på nettet har været den langsomste af de store tilgængelighed-fronter at modnes. Standarderne var klar i 1998. Skærmlæserne var klar, på et basalt niveau, i midten af 2000’erne. Browsermotorerne tog til 2023. Integrationen mellem disse tre lag — markup, gengivelse, tale — klikkede kun virkelig på plads hen over anden halvdel af det år, da MathCAT erstattede MathPlayer inde i NVDA, da JAWS adopterede den samme backend, og da ChromeVox og MathJax konvergerede mod den samme underliggende Speech Rule Engine.
Det arbejde, der er tilbage, ligger i kanterne. Grundskolematematisk notation er ikke i MathML Core, og de platforme, der underviser i aritmetik i de tidlige klassetrin, er stadig nødt til at falde tilbage på MathML 3-udvidelser eller billeder. VoiceOveres matematik-navigation er brugbar, men mindre granulær end det, Windows-brugere får. Browserlinjeskift inde i meget lange ligninger er konservativt, og visse stretchable operatorer gengives stadig ujævnt på tværs af motorer. Disse er reelle problemer og værd at løse. De er ikke den samme slags problem som “Chromium kan slet ikke gengive matematik” var i årtiet før 2023.
For et ingeniørteam, der leverer en ny produktflade i 2026 med matematisk indhold, er standardvalget: udsend MathML, generér det fra LaTeX på byggetidspunktet, når kilden tillader det, fald tilbage på MathJax v4 til legacy-LaTeX, der ikke kan forbehandles, og stol på skærmlæser-stakken — NVDA plus MathCAT, JAWS plus MathCAT, ChromeVox plus SRE, VoiceOver native — til at håndtere talelaget. Den lange vej er ikke slut. Men for første gang fører den et sted hen, der er læseligt.
„Standarderne var klar i 1998. Browsermotorerne tog til 2023. Integrationen klikkede endelig på plads hen over anden halvdel af det år.“