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

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

Sdílet

Ilustrační obrázek
Autor: Depositphotos – stori
Ilustrační obrázek
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.

zabbix_tip

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.