V minulém díle jste se naučili vyjádřit své sbohem krutému světu, ve kterém žijete. Stačila vám na to tři slova. Dnes se pokusíte rozloučit o něco lépe a s o něco větší grácií. Již vám nepostačí pouhá tři slova a budete chtít celou větu, celý odstavec nebo rovnou celou stránku.
Z předchozího odstavce (nebo z titulku) jste si jistě domysleli, že se dnes budeme bavit o znakových sadách (fontech či písmech, chcete-li). Znakové sady existují od doby, co si lidé vyvinuli první písmo, jehož jednotlivé znaky nosili v hlavách a při nejbližší příležitosti je sázeli do nejprve kamenů, potom na papyrus, na papír, na promítací plátno a na obrazovku počítače. Za Guttenberga lidé naučili umění uchovávat a kopírovat znakové sady dřevo. Následně se tímto materiálem stalo železo, poté snadno odlévatelný tiskařský kov, poté na malou chvíli materiál podobný filmu. V posledních letech lidé pokročili a naučili uchovávat znakové sady energii v jejích nejrůznějších nehmotných formách (magnetismus, elektrický náboj, parasitní kapacity).
Jak tedy nyní sedíte u vašeho počítače a třímáte v rukou myš, měli byste si uvědomit, že pokaždé, když stisknutím klávesy zobrazujete nějaký znak, provádíte činnost, která je nepředstavitelně stará a tak nadčasová, že přetrvá i samotné lidstvo. Úctyhodné, že? A proto byste měli i k elektronické sazbě přistupovat s úctou. Pokud vytisknete dokument a objevíte nějakou hrubici… ať už gramatickou, typografickou nebo estetickou, měli byste ji opravit a dokument vytisknout znovu. Když jsem sázel svůj první domácí úkol na DSA v TeXu (se spoustou matematiky), tiskl jsem ho šestkrát. Člověk, který nějaký dokument píše, v něm potom velice obtížně hledá chyby, které by byly pro jiného očividné.
K věci. Původní plain TeX funguje tak, že máte v adresářové struktuře distribuce TeXu rozházeny tisíce souborů se znakovými sadami (ve formátu t1 – Adobe Type1 a metafontovém mf) a k nim na úplně jiných místech soubory s odpovídající metrikou (ve formátu tfm – TeX Font Metric). K tomu, aby TeX nějakou znakovou sadu použil, bezpodmínečně tyto soubory s metrikou potřebuje. Ono jeden by řekl, že by to nemusel být zas až takový problém, ale vezměte v úvahu, že souborů k jedné rodině musíte posbírat v jednom případě hned 10. V jiném připadě třeba přes 40. Vysvětlím.
Každý řez písma (roman, kurzíva, tučný, polotučný) vyžaduje vlastní t1 (popř. mf) a tfm. U precizních písmových rodin má každý řez dobrých 5 různých velikostí – čili to máme 4 soubory pro velikost 5, 4 pro 7, 4 pro 10, 4 pro 11, 4 pro 12. 4 soubory je ale mnohdy číslo značně podhodnocené. Mnoho rodin písma obsahuje vlastní znakové sady pro matematické symboly (opět v různých velikostech) a další vlastní znakové sady pro rozšířenou matematiku. Šílenství, že? Další nepříjemná věc je, že podle názvu souboru začátečník nepozná, o jaký font se vlastně jedná. Například cs-qcsr je znaková sada Century Schoolbook roman :). Tyto názvy potřebujete přesně znát, pokud chcete onen font použít.
Proto je to v XeTeXu uděláno jinak. Fonty se identifikují systémovými názvy a jsou brány (zejména jejich tvar) ze systémové banky fontů (v MS Windows jsou to všechny „nainstalované“ fonty). Obrovskou výhodou je, že to nemusí být pouze Type1 (nebo mf) fonty, ale mohou být i TrueType, OpenType nebo AAT. Ono pokud jste dostatečně šikovní, dokážete TeX donutit spolupracovat se zcela libovolným formátem písma, protože ve skutečnosti TeX znaky jako takové vůbec nezajímají. Zajímá ho pouze metrika (tfm). To je ale první liga, kterou zatím ani nesledujete.
Jak tedy nějaký vámi vybraný font „nahrát“?
\font\a = "Jmeno:mapping=tex-text:+liga" at 10dd
XeTeX se pokusí najít v systému font Jmeno. Pokud ho nenajde, pochopitně vám začne nadávat. Pokud najde, pokusí se u nich aktivovat prvky, které specifikujete za dvojtečkami. „mapping=tex-text“ znamená, že se budou v textu tradičně nahrazovat dva spojovníky za sebou za en-pomlčku a tři spojovníky za em-pomlčku (čtverčíkovou). „+liga“ aktivuje opentypovou featuru (nevím, jak bych to česky nazval) liga (což jsou běžné ligatury – fi, fl, ffl). Slovy „at 10dd“ nebo „at10dd“ říkáte, že chcete kuželku písma o velikosti deseti bodů. Míru si můžete zvolit libovolně (některé známé míry jsou cc (Cicero=12dd), pt, pc (Pica=12pt), mm). XeTeX si následně vygeneruje tfm metriku a tu potom používá.
Písmo si samozřejmě můžete vybrat jaké chcete. Nejlépe byste udělali s Baskervillem nebo Jannonem, ale pravděpodobně je nemáte k disposici. Zde nabízím malý vzorník ucházejících volně dostupných písem a porovnání s Baskervillem (kde je jasně nejhezčí):
Vzorník písem
Jsou seřazeny podle jejich kvality (souzeno mnou). Kdybych neměl Baskerville, stále bych používal Century Schoolbook – je výborně čitelný. Následující výpis uvádí celé definice. Stačí si jen vybrat.
\font\schola = "TeX Gyre Schola:mapping=%
tex-text:+liga" at 10dd
\font\pagella = "TeX Gyre Pagella:mapping=%
tex-text:+liga" at 10dd
\font\bonum = "TeX Gyre Bonum:mapping=%
tex-text:+liga" at 10dd
\font\termes = "TeX Gyre Termes:mapping=%
tex-text:+liga" at 10dd
\font\century = "Century Schoolbook:mapping=%
tex-text:+liga" at 10dd
Tyto fonty bohužel neobsahují žádné nadstandardní opentype featury, jako volitelné ligatury (:+dlig), vzácné ligatury (:+rlig), historické ligatury (:+hlig), stylistické alternativy (:+salt), skákavé číslice (:+onum), proporcionální číslice, tabulkové číslice, apod. Baskerville ale všechno toto obsahuje, takže definice by mohly vypadat následovně.
\font\bask = "Baskerville10Pro:mapping=tex-text%
:+dlig:+hlig:+liga:+rlig:+clig:+salt:+onum" at 10dd
\font\baskk = "Baskerville10Pro:mapping=tex-text:%
-liga" at 10dd
Kdybychom použili každou zvlášť, výstup by vypadal následovně.
S a bez OpenType Fetures
Definiční řádky jsou zlomeny komentářem (znak %), aby nepřelezly řádku. Ve vašem kódu procento odmažte a definici napište na jeden řádek. Lámání řádků komentářem je TeXový fenomén a určitě jste se s ním nesetkali naposledy. Dělá se to proto, že TeX bere znak pro nový řádek jako součást textu určeného k sazbě a může se vám stát, že když budete vaše makra lámat „enterem“, objeví se vám v dokumentech nežádoucí mezery, které se posléze těžko hledají. Pokud před enterem napíšete znak pro uvození komentáře (%), je znak pro odřádkování zakomentován a nemůže se tudíž objevit v sazbě.
Jak definované fonty používat? Na to už jste zřejmě přišli během článku (užitím \jmeno). Uvedu ale ještě pár dobrých zvyklostí.
V TeXu se vyskytují skupiny (bloky kódu), které vytvářejí obory názvů (namespaces) a platnosti. Skupina je uvozena znaky „{“ a „}“. Vše, co se mezi těmito znaky stane (s mnoha a mnoha výjimkami :) ) mezi nimi zůstává. Čili změníte-li aktuální font v jednom oboru názvů, který skončí, změna už nebude platit. Je dobré definovat si font v oboru názvů nejvyšší úrovně – čili ihned na začátku – a veškeré změny fontů realizovat ve skupinách. Mohli byste sice napsat
\hlavnifont
Ahoj,
\jinyfont
jak to jde?
\hlavnifont
Měj se.
,ale lépe je napsat
\hlavnifont
Ahoj,
{\jinyfont jak to jde?}
Měj se.
, což vyprodukuje naprosto stejný výstup.
Existuje věc, kterou musíte udělat okamžitě po nastavení písma s velikostí kuželky n. Pokud to neuděláte, vaše sazba bude ošklivá a zcela nepoužitelná. Musíte nastavit vzálenost účaří jednotlivých řádek (laicky řečeno nastavit řádkový proklad). Pokud použijete kuželku písma 10dd a ponecháte standardní vzdálenost účaří, budou na sobě řádky sedět a v tomto nastavení ještě nepravidelně, takže výsledek bude opravdu ošklivý. Potřebujete nastavit registr \baselineskip. Hodnota tohoto registru by u běžné literatury standardní velikosti písma nikdy neměla být větší než n+3, spíše by měla být n+2. Pokud máte kuželku písma 10dd, musíte nastavit \baselineskip=12dd!
Nyní, když už si umíte vybrat znakovou sadu dle vašich představ, vás to svádí k produkování celých vět… odstavců… stránek, či dokonce kapitol! To ale ještě nemůžete. Váš výstup by neodpovídal normě a v horším případě by ani nebyl hezký. Vzpomínáte, jak jsem v prvním díle psal o dělení slov?
\uselanguage{czech}
Nebylo to úplně všechno, co potřebujete k tomu, abyste dodrželi standardy a tradice. Za tento řádek je bezpodmínečně nutné vložit ještě tyto:
\frenchspacing
\lefthyphenmin=2
\righthyphenmin=3
Makro \frenchspacing nastaví evropské „mezerování“ za interpunkčními znaménky. Podle americké typografické normy (kterou TeX pochopitelně rád svým uživatelům vnucuje) se za interpunkčními znaménky nechávají mírně větší mezery než jak je tomu zvyklostí v evropě, kde se naopak používají mezery kratší. Protože my dodržujeme tradice za každou cenu, pochopitelně \frenchspacing zapneme. \righthyphenmin určuje kolikapísmenný zbytek minimálně musí po dělení slova zůstat na vrchní řádce, zatímco \lefthyphenmin určuje, kolikapísmenný zbytek minimálně musí pokračovat na řádce nové. Podle české normy jsou tato čísla 3 a 2.
Dále ještě musíme definovat české uvozovky, protože v XeTeXu nemáme tu možnost používat styl czech.sty, který je výsadou csTeXu (a i kdybychom měli, stejně by nám nefungovaly, protože v unicode jsou namapovány jinde).
\def\uv#1{{}\char8222{}#1{}\char8220{}}
Tímto kódem trochu předbíhám tento díl tutoriálu, ale chci, aby vaše následující pokusy již měly nějakou úroveň. Vždy, když při psaní budete chtít dát nějaký text do uvozovek, vložíte jej jako parametr makru \uv například takto – \uv{Sbohem, krutý světe,} řekl a následně stiskl tlačítko, které spustilo sazbu.
Dnešní díl byl poněkud delší, za to se omlouvám, ale stále mám pocit, že bych mohl psát dál. To, co jsem v dnešním článku popsal, vystihuje danou problematiku jenom nekonečně malým kouskem… jako jedno dx v určitém integrálu nebo podobně :).
Na závěr bych si dovolil uvést úplný dokument složený z toho, co jsme se zatím naučili (a pár… inu… dost věcí, které ještě neumíme, abych vám dal příležitost hrát si a zkoumat). Zdrůrazňuji, že dokument je určen ke zpracování XeTeXem a zdůrazňuji, že musíte použít kvalitní distribuci (například TeXlive), která obsahuje použitý font (TeX Gyre Schola).
Zdrojový soubor lze stáhnout zde: basker.tex.
Výstup by měl (bude) vypadat takto: basker.pdf.
Dejte se do toho :). Experimentujte, nastavujte různé hodnoty, přepisujte podle vaší libosti :).