Portál AbcLinuxu, 17. května 2024 22:05

TeX – 13 (matematická sazba)

25. 3. 2014 | Petr Olšák
Články - TeX – 13 (matematická sazba)  

Matematici po staletí využívají plochu papíru k zaznamenání svých abstraktních myšlenek daleko kreativněji, než poskytuje běžná textová sazba: používají větší množství abeced, velikostí, značné množství speciálních značek. Vzájemné umístění znaků na papíře není vždy jen na jediném řádku. Sazárny účtovaly matematickou sazbu podle centimetru čtverečního (na rozdíl od počtu znaků v textu) a tato sazba byla drahá. Na památku toho ji ve zdrojovém textu TeXu vyznačujeme pomocí dolarů.

Knuth si dal velmi záležet na tom, aby TeX zvládal matematickou sazbu co nejlépe. Ukážeme si, s čím se potýkal a jak to vyřešil.

Obsah

Zdrojový text

link

K zápisu matematického vzorečku v TeXu stačí znát názvy použitých značek a výraz zhruba zapsat tak, jak bychom ho anglicky přečetli. Závorky {} nebudou v sazbě vidět a vyznačují úseky, které jsou samy „lokálním“ vzorečkem. Pomocí znaků ^_ se vyznačují exponenty a indexy. Celý vzorec je třeba obklopit do dolarů : $...$ nebo dvojdolarů $$...$$. V prvém případě budeme mít vzoreček uvnitř odstavce, ve druhém na samostatném řádku. Například

$$ \int_0^\infty e^{-x^2} {\rm d}x = {\sqrt\pi \over 2} $$

dá tento výsledek:

math1.jpg

Matematici si na TeXový zápis poměrně rychle zvykli. Často píšou svoje myšlenky přímo do počítače v TeXu bez potřeby vidět, jak vzoreček dopadne, a vyměňují si v této notaci své názory například v emailech.

Za pozornost v předchozí ukázce stojí zápis zlomku ve tvaru {čitatel \over jmenovatel}, ve kterém závorky {} vyznačují hranici zlomku a \over odpovídá myšlence „napsat vzorec tak, jak bychom ho anglicky přečetli“. Často se místo tohoto klasického TeXového zápisu zlomku setkáváme spíš s užitím makra \frac{čitatel}{jmenovatel}, což působí více programátorsky a strukturovaněji. Makro \frac je definováno jednoduše:

\def\frac#1#2{{#1\over#2}}

Matematická kurzíva

link

Nejčastěji se ve vzorci vyskytuje proměnná nebo písmenem označený libovolný matematický objekt (množina, funkce, prvek, vrchol). Takové písmeno musí být v kurzívě, zatímco ostatní znaky (operátory, relace, číslice, závorky) musejí být v antikvě. O to se stará TeX sám, takže stačí napsat $$a+b=c$$ a máme proměnné v kurzívě a znaky plus, rovná se v antikvě. Tedy:

math2.jpg

Někdy se ve vzorečku setkáme místo kurzívy s antikvou i pro písmena. Například při sazbě zkratek funkcí, operací nebo při psaní fyzikálních jednotek.

$$\sin^2 x + \cos^2 x = 1,\quad   a = b \pmod c,\quad   E = mc^2\ [{\rm J}]$$

math3.jpg

Pro kurzívu v matematických vzorcích Knuth vytvořil v písmu Computer Modern speciální font (1) cmmi, který se liší od textové kurzívy (2) cmti tím, že je mírně širší a v matematických vzorcích čitelnější. Neškolené oko ale moc nepozná rozdíl.

math4.jpg

Ačkoli je ta kurzíva odlišná, je vytvořena ze stejných zdrojů jen vhodně odlišnou parametrizací v Metafontu. Je-li použita jiná rodina písma než Computer Modern, není obvykle speciální kurzíva přístupná, takže je třeba i v matematických vzorcích použít běžnou textovou kurzívu tohoto písma.

Deklarace písma pro matematiku se provádí v souboru maker a je pro laika poměrně komplikovaná, protože nabízí poměrně velké možnosti. PlainTeX implicitně zavádí písmo z rodiny Computer Modern. CSplain nabízí soubory maker ams-tex.tex pro rozšířenou sadu Computer Modern a tx-math.tex pro zavedení TX fontů. LaTeX má na zavedení matematických fontů desítky různých makrobalíčků.

Operátory a další znaky

link

Jen málo matematických operátorů či dalších znaků najdeme přímo na klávesnici (plus, mínus, rovná se). Vesměs všechny další se zapisují pomocí vyhrazených názvů.

\pm, \times, \circ, \cap, \cup, \oplus, \leq, \geq, \sim, \in, \subset, \cdots, \ldots

math5.jpg

Toto je jen příklad. Ve skutečnosti jsou k dispozici stovky znaků, bez nichž se složitější sazba neobejde. V uživatelských příručkách k TeXu najdeme tabulky těchto znaků.

Všechny matematické znaky v TeXu jsou deklarovány na úrovni makrojazyka pomocí „mathkódů“. Ty vyznačují, ze kterého fontu a slotu je třeba znak vyzvednout, a dále, jakého typu znak je: obyčejný objekt, binární operátor, relace, otevírací/zavírací závorka atd. Podle typu znaku TeX pozná, jaké má vložit mezi znaky mezery. Například ve vzorci $1+1=2$ TeX pozná, že čísla jsou obyčejné objekty, plus je binární operátor a rovnítko je relace. Na základě toho vloží kolem binárního operátoru mírné mezery a kolem relace mírně větší mezery (1). Uživatel toto mezerování neřeší, výsledek dopadne stejně, když napíše $1+1=2$$1 + 1 = 2$, protože vstupní mezery mezi dolary TeX ignoruje. Na druhé straně, bez použití dolarů (v textovém módu) dopadne ten vzoreček v obou případech mizerně: buď tam nemáte žádné mezery (2), nebo tam jsou velké mezery (3).

math6.jpg

Některé operátory (suma, integrál) se nazývají „velké operátory“. Ve vzorci uvnitř odstavce jsou menší a na samostatném řádku větší. Indexy a exponenty v tomto případě fungují jako popisky k operátorům, které se v sazbě umisťují typicky nad a pod operátor:

$$ \sum_{k=0}^\infty {1\over 2^k} = 2 $$

math7.jpg

Povšimněte si, že je rozdíl, když napíšete znak mínus mezi dolary: $-1$ a bez dolarů: -1. V prvém případě (1) dostanete správně mínus, ve druhém (2) nesprávně spojovník, který svědčí o tom, že to vysázel nějaký diletant, který nerozpozná spojovník od mínusu.

math8.jpg

Matematické abecedy

link

Při označování všeho možného matematikům záhy dojdou písmena latinské abecedy. V takovém případě použijí alternativní abecedy, mezi kterými je nejčastěji využita abeceda řecká (1) $\alpha\beta\gamma$, pak kaligrafické znaky (2) $\cal ABC$ nebo (3) $\script ABC$, dále fraktura (4) $\frak ABC$ a zdvojené znaky (5) $\bbchar ABC$.

math9.jpg

Při návrhu matematického fontu tedy nestačí připravit stovky až tisíce různých značek, ale též tyto další matematické abecedy. Vše musí mít pro zvolenou rodinu textového písma jednotný ráz. Dlouhou dobu neexistovala jiná úplná výbava písma pro matematiku než Computer Modern, protože udělat pořádný matematický font není žádná legrace. TeX sice řeší nastavení fontu pro textovou sazbu a pro matematiku zcela nezávisle, ale vyměnit jen sazbu textů za jiné písmo a ponechat matematiku v Computer Modern skoro jistě povede k paskvilu. Je to tím, že většina písem je odvozena z dynamické nebo přechodové antikvy, zatímco Computer Modern je statická antikva, která se k dynamické vůbec nehodí.

Později vznikly varianty matematického písma Euler, LucidaTimes. Dnes je k dispozici několik dalších matematických rodin písma: TXfonts (pro Times), TeXgyre math fonts (Pagella, Termes, Bonum), XITS (pro Times), Asana, Cambria math, Minion.

Různé velikosti

link

Pro indexy resp. exponenty se používá sazba typicky zmenšená na 70 % a pro indexy indexů resp. exponenty exponentů (a další možné kombinace) je vhodné písmo zmenšit na 50 % základní velikosti. Další zmenšování už se neužívá, tj. indexy indexů indexů už mají stejnou velikost jako indexy indexů.

Pomocí maker TeXu se pro indexy a indexy indexů (resp exponenty) zavádějí fonty zcela zvlášť a mohou mít velikost nastavenu libovolně. Navíc to mohou být fonty, které nezmenšují svou velikost jen tupě geometricky, ale jsou pro menší sazbu speciálně uzpůsobeny (zejména s ohledem na lepší čitelnost v malých velikostech). Například pro základní sazbu matematické kurzívy v 10pt je v plainTeXu zaveden font (1) cmmi10, pro indexy (2) cmmi7 a pro indexy indexů (3) cmmi5. Jsou to různé fonty, což poznáme, když je všechny geometricky zvětšíme na společnou velikost (4). V Metafontu jsou všechny tyto fonty vykresleny společným programem jen s odlišnou parametrizací.

math10.jpg

Podobně Knuth připravil rozdílně vykreslené fonty pro různé velikosti vesměs všech řezů písma Computer Modern (antikva, textová kurzíva, tučný, bezserifový atd.). Je to inspirováno praxí z původní ruční sazby. Dnes se k této myšlence některé OpenType fonty znovu vracejí a zavádějí feature „Optical size“. Jen to musejí písmomalíři pro každou velikost nakreslit zvlášť, zatímco Knuth vytvořil celkem zhruba 90 fontů rodiny Computer Modern vesměs ze společných parametrizovaných popisů znaků v Metafontu.

Osa vzorce a další metrické údaje

link

Zatímco v textové sazbě je opticky nejdůležitější účaří a střední dotažnice, v matematické sazbě je významná jiná vodorovná linka, která prochází středem znaků plus, mínus, je osou většiny operátorů a přesně půlí všechny závorky ve všech velikostech. Tato matematická osa je mírně výše než účaří a celý vzorec ji musí respektovat. Například v tomto vzorečku

$$ {\bi A} = {1\over2} \pmatrix {a&b&c\cr d&e&f} \cdot \pmatrix {x\cr y\cr z} $$

math11.jpg

si spíše všimneme matematické osy (procházející rovnítkem, zlomkovou čarou a tečkou) než účaří. V matematickém fontu musí tedy být uložen metrický údaj o vzdálenosti matematické osy od účaří.

Kromě toho matematický font obsahuje čtrnáct dalších metrických údajů: posun exponentu nahoru ve volném (1) nebo stísněném režimu (2), posun indexu dolů, tloušťka zlomkové čáry, mezerování kolem zlomkové čáry, kolem velkých operátorů atd. V TeXooku v dodatku G je pak přesně popsáno, jak TeX s těmito metrickými údaji pracuje, aby vytvořil matematický vzorec. Uživatel to nepotřebuje vědět, mu stačí, že vzorec vypadá dobře.

math12.jpg

Pečlivý uživatel může vzorec dále doladit vkládáním různých dodatečných mezírek (kladných nebo záporných), ale není to obvyklé.

Zvětšovací objekty

link

Vnořené závorky se v matematice rozlišují podle velikostí:

$$ \alpha \bigl(f(x)+f(y)\bigr) = f(\alpha x) + f(\alpha y) $$

math13.jpg

Závorky musejí také vždy na výšku obklopit výraz, který uzavírají. Ve zdrojovém textu je nutné obklopovaný výraz vyznačit znaky \left...\right. Například:

$$
  \|f\| = \left(\int_0^1 f^2(x) {\rm d}x\right)^{1\over2},\quad
  \left\|\sum_{i=1}^k f_i\right\| \leq \sum_{i=1}^k \|f_i\|.
$$

math14.jpg

V matematické sadě fontů musí být připraven speciální font se zvětšovacími objekty, jako jsou závorky různých druhů. Zvětšování není spojité, ale po skocích. Ve fontu je sada připravených velikostí včetně komponentů, ze kterých lze v případě potřeby poskládat závorku libovolné větší velikosti. Jednotlivé velikosti jsou ve fontu vzájemně propojeny odkazy. TeX se po použití \left...\right o výběr správné velikosti stará sám.

math15.jpg

Kromě závorek jsou ve speciálním fontu připraveny různě velké znaky pro véčko odmocniny, přitom vodorovnou čáru TeX doplní automaticky dle šířky výrazu.

$$\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1-x}}}}$$

math16.jpg

Konečně jsou v TeXu připraveny různé matematické akcenty, které mají možnost se pro změnu natahovat ve vodorovném směru.

$$
  \overrightarrow{x+y} = \vec x + \vec y, \qquad
  n^k = \underbrace{n\cdot n\cdots n}_{k\times}
$$

math17.jpg

Někdy se matematik potřebuje rozšoupnout:

math18.jpg

Tato poslední ukázka byla vytvořena pomocí makrobalíčku XYpic, pěkný návod vytvořil Aaron Lauda.

Seriál TeX (dílů: 15)

První díl: TeX – 1 (seznamujeme se), poslední díl: TeX – 15 (mikrotypografie).
Předchozí díl: TeX – 12 (boxy v rukou programátora maker)
Následující díl: TeX – 14 (spolupracující software)

Další články z této rubriky

Týden na ScienceMag.cz: Působivá simulace pádu do černé díry
Týden na ITBiz: Platby výkupného za ransomware vzrostly za poslední rok na pětinásobek
Týden na ScienceMag.cz: O krok blíže k molekulárním počítačům
Týden na ITBiz: Kvalita a přesnost dat generovaných AI rozhodne o důvěře zaměstnanců v umělou inteligenci
Týden na ScienceMag.cz: Kosmologové se opět zkouší vypořádat se s problémem Hubbleovy konstanty

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.