Specifikace MathML 3.0: výpočty „pod sebe“

Martin Smola 5. 12. 2012

Jak lze zapisovat tzv. „dvojrozměrné“, „dvoudimensionální“ či „elementární“ matematické zápisy pomocí specifikace MathML 3.0? Pojďme se podívat na to, jak se sčítá, odečítá, násobí nebo dělí pod sebe a naučme se spoustu nových vlastností a tagů, které můžeme využít i v jiných oblastech zápisu matematiky.

Vítejte u dnešního dílu o specifikaci MathML 3.0. Vysvětlíme si zápis sčítání, odečítání, násobení a dělení „pod sebe“. Tato část specifikace má svoje vlastní tagy, které si postupně rozebereme a uvedeme si několik příkladů od každé početní operace.

Hlavním tagem, definujícím tyto matematické operace, které specifikace popisuje jako dvojrozměrný matematický zápis výpočtu, je <mstack></mstack>. V překladu něco jako matematická/ý „hromada“, „stoh“… Do těchto tagů zapisujeme vše, co se má zobrazovat jako „dvojrozměrný“ zápis.

Jeden z podstatných tagů pro zápis tohoto druhu početních operací je horizontální čára, kterou lze využít nejen zde, ale i například v zápisu soustav rovnic. Zapisujeme ji nepárovým tagem <msline/> „Math Stack Line“.

Jednotlivé řádky následně obalujeme do tagů <msrow></msrow>, „Math Stack Row“.

Ostatní čísla a operátory, zapisujeme stejně, jako v ostatních oblastech MathML 3.0. Tedy <mn> 478 </mn> „Math Number“ a <mo> + </mo> „Math Operator“.

Pro zajímavost si uvedeme ještě nepárový tag <none/>, který nám vytvoří prázdný znak.

Bohužel jsme se pomalu prokousali k části MathML, kterou ještě žádný velký prohlížeč nepodporuje, avšak na podpoře se pracuje a s budoucími verzemi prohlížečů bude jistě specifikace plně podporována.

Sčítání a odečítání

Součet a rozdíl pod sebe vytvoříme tedy následovně:

  <math xmlns="http://www.w3.org/1998/Math/MathML">
      <mstack> <!-- Tag obalující celý zápis -->
        <mn>251</mn> <!-- Horní číslo, není v <msrow></msrow> -->
        <msrow> <mo>+</mo> <none/> <mn>48</mn> </msrow> <!-- Ostatní řádky kromě první a poslední s výsledkem, obalujeme do <msrow></msrow> -->
        <msline/> <!-- Horizontální čára, oddělující výpočet od výsledku -->
        <mn>299</mn> <!-- Výsledek pod čarou  -->
      </mstack> <!-- uzavření dvourozměrného zápisu -->
  </math>

Asi není třeba zvlášť vysvětlovat odečítání, které má stejný zápis, jen změníme znaménko:

Násobení

Další šikovný tag je <msgroup></msgroup>. „Math Stack Group“ je skupina odřádkovaných čísel, kterým lze nastavit, o kolik se další řádka odsadí od předchozí. To využijeme především u násobení a dělení. Zápis poté vypadá takto:

<math xmlns="http://www.w3.org/1998/Math/MathML">
<mstack>
  <msgroup>
    <mn>123</mn>
    <msrow><mo>&#xD7;<!-- Znak násobení --></mo><mn>321</mn></msrow>
  </msgroup>
  <msline/> <!-- první horizontální čára -->
  <msgroup shift="1"> <!-- odsazení jednotlivých řádků -->
    <mn>123</mn>
    <mn>246</mn>
    <mn>369</mn>
  </msgroup>
  <msline/> <!-- druhá horizontální čára -->
</math>

Dělení

U dělení pod sebe používáme stejných triků jako u násobení jen u tagu <msgroup> nastavíme hodnotu shift=„-1“. Řádky se nám tedy budou odsazovat o jeden znak směrem doprava. (Opačně jak u násobení s hodnotou shift=„1“.) Tag <msgroup> použijeme v tomto případě na odsazování dvojic, které budou tvořeny vnořenými <msgroup> s defaultním shift=„0“. Pro <msline/> použijeme atribut length=„2“, tedy horizontální čára přes dva znaky.

widgety

Výsledek poté vypadá následovně:

<math xmlns="http://www.w3.org/1998/Math/MathML">
<mstack>
  <msgroup>
    <mn>1306</mn>
    <msrow><mo>:</mo><mn>3</mn><mo>=</mo><mn>435,3</mn></msrow>
  </msgroup>
  </msgroup shift="1">
        <msgroup>
             <mn>12</mn>
             <msline length="2"/>
        </msgroup>
        <msgroup>
             <mn>10</mn>
             <mn>9</mn>
             <msline length="2"/>
        </msgroup>
        <msgroup>
             <mn>16</mn>
             <mn>15</mn>
             <msline length="2"/>
        </msgroup>
        <msgroup>
             <mn>1</mn>
             <mn>9</mn>
             <msline length="2"/>
        </msgroup>
        <msgroup>
             <mn>1</mn>
        </msgroup>
    </msgroup>
</math>

Naučili jsme se opět mnoho nového ohledně specifikace MathML 3.0. Doufám, že bude tímto článkem rozšířeno povědomí o těchto vlastnostech specifikace a tím i přispěno k její budoucí podpoře v prohlížečích. Tímto bych ukončil dnešní díl a těšte se na příští týden.

Našli jste v článku chybu?
Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

120na80.cz: Pálení žáhy: která jídla ne a co nás uzdraví?

Pálení žáhy: která jídla ne a co nás uzdraví?

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

DigiZone.cz: Samsung EVO-S: novinka pro Skylink

Samsung EVO-S: novinka pro Skylink

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Podnikatel.cz: Instalatér, malíř a elektrikář. "Vymřou"?

Instalatér, malíř a elektrikář. "Vymřou"?

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT