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

5. 12. 2012
Doba čtení: 4 minuty

Sdílet

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.

ict ve školství 24

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.

Autor článku

Martin Smola je studentem ČVUT, věnuje se programování, web-designu, grafice a psaní článků. Pracuje na vlastním projektu 4dgraph.com, který umožňuje sdílet fotky, grafiku a textury.