Tällä sivulla selitetään perusteita MathML-koodin kirjoittamisesta.
MathML-koodi perustuu käytännössä kahteen standardiin: MathML 3 (englanniksi) ja MathML Core (englanniksi). Koko MathML-kehitystä voi seurata W3C:n MathML-sivuilla (englanniksi).
MathML 3 on laajempi, mutta vanhempi versio MathML-standardista. Sen haasteena oli, että juurikaan mikään selain ei ryhtynyt työhön tukemaan sitä. Monissa selaimissa tämä standardi ei ole voimassa, mutta joitain sen vanhoja ominaisuuksia saatetaan tukea esimerkiksi Mozilla Firefoxissa.
MathML Core on suppeampi standardi, jota nykyiset, suurimmat selaimet tukevat.
Apuvälineiden toiminta perustuu siihen, että merkit on lisätty oikealla tavalla. Nettiympäristössä erilaiset merkit perustuvat Unicode-merkkeihin.
Voit tarkistaa ja kopioida itsellesi talteen tärkeitä Unicode-merkkejä.
math-elementtiKaikki matematiikka kirjoitetaan math-elementin sisälle.
Lähtökohtaisesti math-elementti ei tarvitse attribuutteja toimiakseen, mutta EPUB-kirjoissa (e-kirjoissa) kannattaa käyttää muotoa:
<math xmlns="http://www.w3.org/1998/Math/MathML">
...
</math>
Näiden perusteiden esimerkeissä tätä attribuuttia ei aina kirjoiteta.
Luvut ja niiden kaikki osat merkitään mn -elementin ("math-number") sisään:
Selaimessa:
Koodina:
<math>
<mn>2</mn>
</math>
Selaimessa:
Koodina:
<math>
<mn>0,453</mn>
</math>
Selaimessa:
Koodina:
<math>
<mn>0,777…</mn>
</math>
Selaimessa:
Koodina:
<math>
<mn>−7</mn>
</math>
Selaimessa:
Koodina:
<math>
<mn>2</mn>
</math>
Tuhaterottimena käytetään sitovaa välilyöntiä. Tämä estää luvun hajoamisen useille riveille, jos rivin pituus on lyhyt.
Selaimessa:
Koodina:
<math>
<mn>5 655 715</mn>
</math>
Muuttujia, funktioita, yksiköitä ja muita vastaavia symboleita, jotka tarkoittavat esimerkiksi suuretta, merkitään mi-elementillä ("math-identifier").
Selaimessa:
Koodina:
<math>
<mi>b</mi>
</math>
Selaimessa:
Koodina:
<math>
<mi>∞</mi>
</math>
Selaimessa:
Koodina:
<math>
<mi>α</mi>
<mo>,</mo>
<mi>π</mi>
</math>
Funktiotkin merkitään samalla mi-elementillä. Ne esitetään normaalina tekstinä automaattisesti, eikä kursiivilla, koska ne koostuvat useammasta kirjaimesta.
Selaimessa:
Koodina:
<math>
<mi>cos</mi>
<mo>,</mo>
<mi>ln</mi>
</math>
Yksiköiden ei ole tarkoitus olla kursiivilla, joten ne saa näyttämään normaalilta kirjoitukselta mathvariant="normal"-attribuutilla.
Esimerkiksi litran lyhenne selaimessa:
Koodina:
<math>
<mi mathvariant="normal">l</mi>
</math>
Laskutoimitusoperaattorit merkitään mo -elementin ("math-operator") sisään.
Selaimessa:
Koodina:
<math>
<mn>10</mn>
<mo>+</mo>
<mn>7</mn>
<mo>=</mo>
<mn>17</mn>
</math>
Selaimessa:
Koodina:
<math>
<mn>10</mn>
<mo>·</mo>
<mn>4</mn>
<mo>=</mo>
<mn>40</mn>
</math>
Kaikenlaiset sulkeet ovat myös operaattoreita.
Selaimessa:
Koodina:
<math>
<mn>20</mn>
<mo>−</mo>
<mo>(</mo>
<mn>10</mn>
<mo>+</mo>
<mn>7</mn>
<mo>)</mo>
<mo>=</mo>
<mn>3</mn>
</math>
Selaimessa:
Koodina:
<math>
<mi>α</mi>
<mo>+</mo>
<mi>x</mi>
</math>
Pilkku on operaattori, kun esitetään pisteitä koordinaatistossa, alkioita joukossa tai muuten listataan asioita MathML-koodissa.
Selaimessa:
Koodina:
<math>
<mo>{</mo>
<mn>1</mn>
<mo>,</mo>
<mn>2</mn>
<mo>,</mo>
<mn>3</mn>
<mi>…</mi>
<mo>}</mo>
</math>
Erityisoperaattorit, kuten integraali, sarjan summamerkintä tai nabla ovat operaattoreita.
Selaimessa:
Koodina:
<math>
<mo>∫</mo>
<mo>,</mo>
<mo>Σ</mo>
<mo>,</mo>
<mo>∇</mo>
</math>
Funktioita merkitään myös mi-elementeillä. Funktiot voivat olla yhden tai useamman merkin pituisia.
Funktioita kirjoittaessa täytyy muistaa näkymätön merkki, joka tarkoittaa "funktion käyttöä".
Selaimessa:
Koodina:
<math>
<mi>f</mi>
<mo>⁡</mo>
<mo>(</mo>
<mi>x</mi>
<mo>)</mo>
</math>
mi-elementtiä käytetään myös valmiiksi määriteltyihin ja vakiintuneisiin funktioihin, kuten trigonometrisiin funktioihin ja logaritmifunktioihin.
Selaimessa:
Koodina:
<math>
<mi>sin</mi>
<mo>⁡</mo>
<mo>(</mo>
<mi>x</mi>
<mo>)</mo>
</math>
Selaimessa:
Koodina:
<math>
<mi>ln</mi>
<mo>⁡</mo>
<mo>(</mo>
<mi>x</mi>
<mo>)</mo>
</math>
Selaimessa:
Koodina:
<math>
<mn>2</mn>
<mo>⁢</mo>
<mo>(</mo>
<mi>x</mi>
<mo>−</mo>
<mi>y</mi>
<mo>)</mo>
</math>
Neliöjuurimerkintä tehdään mqsrt-elementin avulla ja muut juurimerkinnät tehdään mroot-elementin avulla.
Selaimessa:
Koodina:
<math>
<msqrt>
<mn>2</mn>
</msqrt>
</math>
Selaimessa:
Koodina:
<math>
<msqrt>
<mi>h</mi>
<mo>+</mo>
<mn>2</mn>
</msqrt>
</math>
Muiden juurimerkintöjen kirjoittamisessa on tärkeää, että elementit ovat oikeassa järjestyksessä.
mroot-elementin tapauksessa juurrettava (eli juurimerkin alla oleva luku tai lauseke) tulee järjestyksessä ennen juuren indeksiä (eli juurimerkin päällä oleva luku tai lauseke).
Selaimessa:
Koodina:
<math>
<mroot>
<mn>9</mn>
<mn>3</mn>
</mroot>
</math>
Selaimessa:
Koodina:
<math>
<mroot>
<mn>9</mn>
<mi>n</mi>
</mroot>
<mo>=</mo>
<mn>3</mn>
</math>
Murtolukujen kirjoittamiseen käytetään mfrac-elementtiä. Tässäkin järjestyksellä on väliä.
Osoittaja (murtolukuviivan yläpuolella) kirjoitetaan ensin ja sen jälkeen nimittäjä (murtolukuviivan alapuolella).
Selaimessa:
Koodina:
<math>
<mfrac>
<mn>12</mn>
<mn>27</mn>
</mfrac>
</math>
Jos MathML-koodin keskelle pitää kirjoittaa normaalia tekstiä, niin se tehdään erillisen mtext-elementin avulla.
Selaimessa:
Koodina:
<math>
<mfrac>
<mtext>osoittaja</mtext>
<mtext>nimittäjä</mtext>
</mfrac>
</math>
MathML-koodissa pitää erikseen käyttää ryhmittelyelementtiä mrow, kun useampi luku tai lauseke halutaan esimerkiksi murtoluvun osoittajaksi tai nimittäjäksi.
mrow-elementti on kuin näkymättön sulkumerkintä, joka kertoo MathML-koodin kautta selaimelle tai lukuohjelmalle, miten matematiikka esitetään.
Selaimessa:
Koodina:
<math>
<mfrac>
<mrow>
<mn>1</mn>
<mo>−</mo>
<mn>5</mn>
</mrow>
<mn>6</mn>
</mfrac>
</math>
Selaimessa:
Koodina:
<math>
<mroot>
<mn>256</mn>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mroot>
</math>
Eksponentti tai yläindeksi merkitään msup-elementillä ("math-superscript").
Selaimessa:
Koodina:
<math>
<msup>
<mn>5</mn>
<mn>2</mn>
</msup>
</math>
mrow-elementtiä käytetään ryhmittelemään ylä- tai alaindeksin lausekkeita.
Selaimessa:
Vastaavasti alaindeksi merkitään msub-elementillä ("math-subscript").
Koodina:
<math>
<msup>
<mn>5</mn>
<mrow>
<mn>2</mn>
<mo>+</mo>
<mn>5</mn>
</mrow>
</msup>
</math>
Selaimessa:
Koodina:
<math>
<msub>
<mi>h</mi>
<mn>2</mn>
</msub>
</math>
Selaimessa:
Koodina:
<math>
<msub>
<mi>h</mi>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</math>
MathML-koodissa on erikseen elementti ylä- ja alaindeksille samaan aikaan msubsup.
Selaimessa:
Koodina:
<math>
<msubsup>
<mi>h</mi>
<mn>5</mn>
<mn>3</mn>
</msubsup>
</math>
Selaimessa:
Koodina:
<math>
<msubsup>
<mo>∫</mo>
<mi>a</mi>
<mi>b</mi>
</msubsup>
</math>
Selaimessa:
Koodina:
<math>
<msubsup>
<mrow>
<mo>(</mo>
<mi>h</mi>
<mo>/</mo>
<mn>2</mn>
<mo>)</mo>
</mrow>
<mn>5</mn>
<mn>3</mn>
</msubsup>
</math>
Selaimessa:
Koodina:
<math>
<msup>
<mrow>
<mo>(</mo>
<mfrac>
<mn>5</mn>
<mn>3</mn>
</mfrac>
<mo>)</mo>
</mrow>
<mn>3</mn>
</msup>
</math>
mover- ja munder-elementit mahdollistavat toisten merkkien kirjoittamisen toisen elementin päälle tai alle.
Selaimessa:
Koodina:
<math>
<mover>
<mi>x</mi>
<mo>‾</mo>
</mover>
</math>
Selaimessa:
Koodina:
<math>
<munder>
<mi>lim</mi>
<mrow>
<mi>x</mi>
<mo>→</mo>
<mn>4</mn>
</mrow>
</munder>
</math>
Ala- ja ylämerkintää voi kirjoittaa myös sisäkkäin.
Selaimessa:
Koodina:
<math>
<munder>
<mrow>
<munder>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>7</mn>
<mo>,</mo>
<mn>12</mn>
<mo>,</mo>
<mn>17</mn>
<mo>,</mo>
<mo>…</mo>
<mo>,</mo>
<mn>n</mn>
<mo>+</mo>
<mn>5</mn>
</mrow>
<mo>⏟</mo>
</munder>
</mrow>
<mtext>N kpl</mtext>
</munder>
</math>
Vastaavasti kuin ylä- ja alaindeksille, niin ylä- ja alamerkinnälle on myös yhdistetty munderover-elementti.
Selaimessa:
Koodina:
<math display="block">
<munderover>
<mo>Σ</mo>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>∞</mi>
</munderover>
</math>
Suuria operaattoreita ovat esimerkiksi sarjoissa käytettävä sigma (∑) tai tulossa käytettävä pii (∏).
Unicode-merkkeinä nämä ovat
Edellisessä esimerkissä summaoperaattori ∑ esitettiin omalla rivillään. Se tehdään display-attribuutin avulla. Sillä on kaksi mahdollista arvoa:
display="block"display="inline"Kaikella MathML-koodilla kirjoitetulla matematiikalla on oletuksena display="inline", sitä ei tarvitse kirjoittaa erikseen koodiin. Se mahdollistaa matematiikan kirjoittamisen tekstin sekaan luontevasti.
display-attribuutin arvo vaikuttaa erityisesti suurien operaattoreihin ulkonäköön.
Selaimessa:
Koodina:
<math display="block">
<munderover>
<mo>Σ</mo>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>∞</mi>
</munderover>
</math>
Ilman display="block"-attribuuttia lauseke sopii paremmin riville muun tekstin kanssa.
Selaimessa:
Koodina:
<math>
<munderover>
<mo>Σ</mo>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>∞</mi>
</munderover>
</math>
Tällä tavoin rivillä voi olla suurikin operaattori , mutta se silti rivitetään tekstin tasolle. Tässäkin voi jo huomata, miten riviväli suurenee merkinnän vuoksi.
Koodina:
<p>Tällä tavoin rivillä voi olla suurikin operaattori
<math displaystyle="true">
<munderover>
<mo>∑</mo>
<mrow>
<mi>n</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>∞</mi>
</munderover>
</math>, mutta se silti rivitetään tekstin tasolle.
Tässäkin voi jo huomata, miten riviväli suurenee merkinnän
vuoksi.</p>
Monirivinen matematiikka esitetään yleensä mtable-elementin avulla. Monirivistä matematiikkaa ovat esimerkiksi yhtälöparit, yhtälöryhmät, matriisit, determinantit ja yhtälönratkaisu.
mtable-elementtiin sisälle merkitään taulukon rivit mtr-elementillä (math table row) ja rivien sisään taulukon solut mtd-elementillä (math table data cell).
Yhtälönratkaisussa taulukkorakenne auttaa järjestämään lausekkeet oikeisiin kohtiin.
Selaimessa:
Koodina:
<math display="block">
<mtable>
<mtr>
<mtd>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mtd>
<mtd>
<mo>=</mo>
</mtd>
<mtd>
<mn>7</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>x</mi>
</mtd>
<mtd>
<mo>=</mo>
</mtd>
<mtd>
<mn>7</mn>
<mo>−</mo>
<mi>y</mi>
</mtd>
</mtr>
</mtable>
</math>
Selaimessa:
Koodina:
<math>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>3</mn>
</mtd>
<mtd>
<mn>4</mn>
</mtd>
<mtd>
<mn>3</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>2</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>9</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>3</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
<mtd>
<mn>2</mn>
</mtd>
<mtd>
<mn>1</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>6</mn>
</mtd>
<mtd>
<mn>2</mn>
</mtd>
<mtd>
<mn>9</mn>
</mtd>
<mtd>
<mn>0</mn>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
</math>
Sulkeet venyvät suurimman elementin mukaisiksi ellei sitä rajata mrow-elementin avulla. Tämä on tärkeä huomioida, kun samalla rivillä on erikokoisia lausekkeita.
Selaimessa:
Koodina:
<math>
<mi>f</mi>
<mo>⁡</mo>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>)</mo>
</mrow>
<mo>=</mo>
<mrow>
<mo>{</mo>
<mtable>
<mtr>
<mtd>
<mo>−</mo>
<mn>1</mn>
<mtext>, jos </mtext>
<mi>x</mi>
<mo><</mo>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>0</mn>
<mtext>, jos </mtext>
<mi>x</mi>
<mo>=</mo>
<mn>0</mn>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>1</mn>
<mtext>, jos </mtext>
<mi>x</mi>
<mo>></mo>
<mn>0</mn>
</mtd>
</mtr>
</mtable>
</mrow>
</math>
Yksiköiden merkitsemiseen on oma tapansa, jotta ne näkyvät oikein. Lisätietoa yksiköiden merkitsemisestä MathML Nordic Guidelines -dokumentissa.
Selaimessa:
Koodina:
<math>
<mn>100</mn>
<mo rspace="0.25em">⁢</mo>
<mi mathvariant="normal" intent=":unit">m</mi>
</math>
Selaimessa:
Koodina:
<math>
<mn>100</mn>
<mo rspace="0.25em">⁢</mo>
<mrow>
<mi mathvariant="normal" intent=":unit">m</mi>
<mo>/</mo>
<msup>
<mi mathvariant="normal" intent=":unit">s</mi>
<mn>2</mn>
</msup>
</mrow>
</math>
Matemaattista tekstiä kirjoitetaan niin, että se on osana muuta tekstiä. Se tarkoittaa, että matemaattisia kaavoja ei kirjoiteta lähtökohtaisesti omaan itsenäiseen elementtiinsä, vaan esimerkiksi kappale-elementin (p) sisälle.
Matemaattiset lausekkeet voivat myös päättää virkkeen tai niiden jälkeen voi tulla jokin muu välimerkki.
Selaimessa:
"Jos lisäksi on voimassa kaikilla alkioilla siten, että , sanotaan, että ryhmä on kommutatiivinen eli vaihdannainen. Kommutatiivista ryhmää kutsutaan nimellä Abelin ryhmä."
Koodina:
<p>"Jos lisäksi on voimassa kaikilla alkioilla
<math>
<mi>a</mi>
<mo>,</mo>
<mi>b</mi>
<mo>∈</mo>
<mi>G</mi>
</math>
siten, että
<math>
<mi>a</mi>
<mo>∘</mo>
<mi>b</mi>
<mo>=</mo>
<mi>b</mi>
<mo>∘</mo>
<mi>a</mi>
</math>, sanotaan, että ryhmä on kommutatiivinen eli
vaihdannainen. Kommutatiivista ryhmää kutsutaan nimellä
Abelin ryhmä.
Tämä pätee myös block-tyyliseen matematiikkaan. Tällöin välimerkit ja muut merkit pitää kirjoittaa matematiikan 'sisään'.
Selaimessa:
"Ryhmän esitys -dimensioisessa reaalisessa vektoriavaruudessa on ryhmähomomorfismi
Se on ryhmähomomorfismi ryhmästä yleiseen lineaariryhmään."
Koodina:
"Ryhmän <math><mi>G</mi></math> esitys
<math><mi>n</mi></math>-dimensioisessa reaalisessa
vektoriavaruudessa on ryhmähomomorfismi
<math display="block">
<mi>ρ</mi>
<mo>:</mo>
<mi>G</mi>
<mo>→</mo>
<mi>GL</mi>
<mo>(</mo>
<mi>n</mi>
<mo>,</mo>
<mi>R</mi>
<mo>)</mo>
<mtext>.</mtext>
</math>
<p>Se on ryhmähomomorfismi ryhmästä
yleiseen lineraariryhmään."</p>
Palaa sisällysluetteloon