Hlavní navigace

Počátky TeXu v Československu: paklík disket a příprava fontů na PC XT

Ladislav Lhotka

První českoslovenští uživatelé programu TeX pro digitální sazbu neměli před třiceti lety na růžích ustláno. Hrst vzpomínek jednoho z pamětníků je připomínkou osmdesátých narozenin Donalda Knutha.

Doba čtení: 6 minut

Dnes se dožívá osmdesáti let profesor Donald Ervin Knuth, jeden z mála dosud žijících zakladatelů informatiky jako vědního oboru (computer science). Jeho stěžejním dílem je zajisté monografie The Art of Computer Programming (TAOCP), mimořádná svým rozsahem, stylem výkladu, ale i časovým rozpětím, v jehož průběhu vznikala – totiž vzniká. První svazek (Fundamental Algorithms) vyšel v lednu 1967 a zatím poslední svazek 4A (Combinatorial Algorithms, Part 1) o neuvěřitelných 44 let později, v roce 2011. A ještě to není vše, Knuth stále pilně pracuje na dalších částech.

Přesto si ale myslím, že objektivně důležitější jsou Knuthovy praktické výsledky v oblasti počítačové typografie, tedy především program TeX pro automatizovanou sazbu, METAFONT pro tvorbu digitálních písem a také několik originálních a volně dostupných fontů, především rodiny Computer Modern. Celý systém po tři desetiletí funguje prakticky beze změn a přitom zejména TeX si stále udržuje početné komunity uživatelů po celém světě. Uživatelské rozhraní i jiné aspekty TeXu jsou už z dnešního pohledu poněkud zastaralé, těžko ale může být sporu o tom, že při správném použití jsou výstupy TeXu na dálku rozpoznatelné svou nekompromisní kvalitou. Zvlášť v oblasti sazby matematických formulí znamenal TeX opravdovou revoluci, a nevím o jiném systému, který by ho překonal.

TeX si koncem osmdesátých let minulého století našel řadu nadšených příznivců i v tehdejším Československu. Protože jsem byl jedním z prvních, dovolím si při této příležitosti s trochou nostalgie zavzpomínat na prehistorii TeXu u nás.

Začátkem roku 1987 jsme v Jihočeském biologickém centru Akademie věd získali první pécéčko. Šlo o asijský klon PC XT s procesorem Intel 8088 o závratné frekvenci 4,77 MHz. V lété téhož roku dovezl kolega ze stáže v Rakousku paklík disket, na nichž byla kompletní instalace programu PCTeX. Šlo o komerční implementaci – Knuth sice napsal TeX jako open source (tento termín ovšem v té době nebyl ještě znám), nešlo ho ale jen tak přeložit, protože se nevešel do paměti. Architektura XT měla totiž jen 640 KB RAM a k tomu poměrně primitivní memory management.

Instalace zabrala asi polovinu z dvaceti megabajtů hard disku, ale s xeroxovou kopií manuálů už bylo možné pustit se do prvních experimentů. Člověk se ovšem musel obrnit trpělivostí. Připravoval jsem tehdy asi třicetistránkový text a jenom samotné zpracování TeXem trvalo bratru 10 minut. Z té doby pramení můj odpor vůči velmi populární nadstavbě LaTeX, který mi vydržel dodnes – jak známo, kvůli křížovým referencím se musí text nechat LaTeXem projet dvakrát. Další desítky minut pak zabral tisk na jehličkové tiskárně, která musela chudák tisknout po mikrořádcích a ječela přitom jako cirkulárka. Výsledky ovšem byly fenomenální. Rozlišení bylo myslím 380 dpi, takže lepší než u pozdějších laserových tiskáren, a při použití nové pásky byl výstup opravdu luxusní. Nosil jsem tehdy v kapse složenou stránku se vzorkem tisku a na potkání s ním ohromoval všechny kolemjdoucí kolegy.

Po čase jsem se dozvěděl o několika dalších nadšených uživatelích TeXu a, ačkoliv tehdy ještě neexistoval e-mail, začali jsme si vyměňovat zkušenosti a zabývat se přizpůsobením TeXu pro sazbu českých textů. TeX totiž sice umožňoval kombinovat písmenka s háčky, čárkami i kroužkem, pro přímé psaní to ale bylo velmi nepohodlné (například „ř” se musí zapsat sekvencí \v{r}) a výsledná sazba ošklivá – akcenty byly příliš malé a nad písmeny špatně usazené. Kromě toho nebyl TeX schopen automaticky dělit slova na konci řádku podle českých pravidel.

Někdy v létě 1988 se konala konspirativní schůzka v přažské restauraci Savarin, jíž se kromě mne zúčastnil Petr Novák z FEL ČVUT a Jiří Veselý z Matematického ústavu MFF UK. Domluvili jsme na ní další postup. Jiří poté věnoval spoustu energie organizaci uživatelské komunity v Čechách i na Slovensku, což vedlo k pozdějšímu ustavení Československého sdružení uživatelů TeXu (CSTUG).

My s Petrem jsme se naproti tomu začali věnovat hackingu. Vzhledem k tomu, že jsem měl tehdy k dispozici Knuthovu knihu The METAFONTbook, dohodli jsme se, že já připravím fonty a Petr se bude věnovat dělení. Vše nakonec dopadlo jinak. Petr si ode mne okopíroval METAFONTbook a propadnuv jeho nespornému kouzlu, začal experimentovat s písmenky. Ve spolupráci s grafiky pak postupně vznikly jeho CSfonty, které byly první kvalitní československou mutací Knuthovy rodiny Computer Modern. Petr je ještě před sametovou revolucí začal nabízet komerčně prostřednictvím jakéhosi softwarového družstva (to byla v té době jedna z mála povolených forem soukromého podnikání), ale později je věnoval CSTUGu k bezplatnému využití.

Na mne tím pádem zbylo dělení slov. V TeXu je implementován dělicí algoritmus, který vyvinul Knuthův student Frank M. Liang. Tomuto algoritmu je ale třeba dodat seznam vzorů, který vlastně reprezentuje rozhodovací strom pro dělení mezi všemi možnými dvojicemi písmen. PCTeX měl takový seznam vzorů jen pro angličtinu, pro češtinu ho bylo tedy nutno vytvořit.

Půjčil jsem si v knihovně prastarou knihu Jiřího Hallera Jak dělit slova (SPN 1956) a začal studovat. Základní vzory dělení v češtině i slovenštině jsou typu v-kv a vk-kv, kde v označuje samohlásku a k souhlásku. Seznam všech možných kombinace jsem snadno vygeneroval programem a ručně z něj eliminoval nemožné skupiny hlásek. Nejobtížnější částí bylo zpracování předpon, kde se možnosti dělení zpravidla postupně větví (například pře-, před-, přede-). Podobné to bylo i s příponami.

Hallerova kniha také obsahovala nepříliš rozsáhlý slovník, v jehož slovech byla vyznačena všechna přípustná dělení. Ten jsem celý prošel a zanesl do seznamu vzorů s uvážením všech možných variant a výjimek. Neměl jsem podobný slovník pro slovenštinu, a proto jsem nakonec opustil původní myšlenku zpracovat zároveň také slovenskou část vzorů. Tohoto úkolu se později zhostila slovenská kolegyně Jana Chlebíková.

Po zhruba dvou týdnech usilovné práce byla první verze vzorů hotova. S výsledkem jsem byl s ohledem na vložené úsilí spokojen – TeX byl schopen s mými vzory sázet český text docela uspokojivě a ruční opravy byly potřeba jen zřídka. Největší potíže působila složená slova, která bylo postupně třeba doplňovat do seznamu výjimek. Jedním humorným případem zapomenuté výjimky bylo špatné dělení slova Českos-lovensko.

Moje vzory dělení byly českými uživateli TeXu používány a postupně vylepšovány zhruba do poloviny devadesátých let, kdy se objevily profesionálně vyvinuté vzory určené původně pro jiné DTP programy. Jejich autor umožnil mírně ořezanou verzi, která i tak dávala lepší výsledky než mé vzory, bezplatně využívat v TeXu. Své vzory jsem ještě nedávno nacházel v některých distribucích Linuxu, zřejmě proto, že byly nepochybně open source software.

CSTUG byl zaregistrován jako občanské sdružení 9. května 1990 a zasloužil se o vývoj dalších nástrojů potřebných pro kvalitní českou a slovenskou sazbu. Na dodnes používaném formátu CSplain pracoval tým pod vedením Petra Olšáka, potřebné modifikace LaTeXu (CSLaTeX) zase vytvořil Jiří Zlatuška.

Ačkoliv TeX různými způsoby využívám dodnes, období intenzivního zapojení do činnosti CSTUGu pro mne skončilo celkem symbolicky v roce 1996, kdy Donald Knuth získal čestný doktorát od Masarykovy univerzity. Měl jsem možnost s ním hovořit po přednášce a také během následujícího oběda s výborem CSTUG, a poznat ho i jako skromného a sympatického člověka se spoustou různých zájmů.

Na oslavu Knuthova jubilea se ve švédském městě Piteå právě koná sympozium Knuth80: Algorithms, Combinatorics, and Information. Dnes odpoledne se tamtéž koná i světová premiéra Knuthovy varhanní skladby Fantasia Apocalyptica. Připijme i my Donaldu Knuthovi virtuálně na zdraví a popřejme jemu i sobě, aby ještě stihl napsat mnoho zajímavých stránek o umění počítačového programování.

Našli jste v článku chybu?