Hlavní navigace

TeX pro každého - TeX a jeho nástupci

Stanislav Brabec 9. 12. 2002

Poslední novinkou, která se společně s dalšími změnami v TeXu objevila, bylo osmibitové kódování. Tím v roce 1990 D. E. Knuth vývoj TeXu uzavřel. TeX však není dokonalý a dnes se dozvíme, na co nestačí. Vývoj se nezastavil a vzniklo několik alternativních projektů. Dnes se podíváme na možné budoucí směry vývoje typografie a sazby strukturovaných dokumentů.

Rozšíření TEXu

Některé projekty jsou založeny přímo na kódu TEXu. Původní TEX nepodporuje sazbu zprava doleva. Její řešení pomocí maker je nepohodlné, a tak jedním z prvních rozšíření byl TEX–XET. Na vícejazyčnou sazbu se zaměřil i MLTEX. V projektu ε-TEX (eTEX) našel TEX–XET své uplatnění jako jedno z rozšíření. Kromě zmíněné obousměrné sazby jsou však rozšíření, která ε-TEX obsahuje, subtilnější povahy a dokáže je ocenit spíš zkušený tvůrce maker: větší počet registrů, lepší podpora aritmetiky, lepší možnosti ladění, větší možnosti manipulace s metrikou písma. Nová primitiva v podstatě hladce zapadají do původního konceptu TEXu. Proto také ε-TEX projde téměř dokonale testem kompatibility s původním TEXem. ε-TEX je dnes standardní verzí TEXu v distribucích a je jen na nás, zda jej spustíme v rozšířeném, nebo kompatibilním režimu.

Dalším směrem, kterým se snahy o rozšíření TEXu ubíraly, bylo kvalitní řešení sazby jazyků se znakovým písmem. Počet znaků značně přesahuje dostupných 256 a sazba v takových jazycích byla možná pouze za pomoci neohrabaných maker neustále přepínajících písma obsahující podmnožiny znaků. Proto vznikl projekt Ω (Omega) – unikódová portace TEXu. Její registry jsou šestnáctibitové, šestnáctibitové je i kódování písma. Ω definuje vstupní a výstupní procesy, které mohou provést nejenom překódování, ale i další jednoduché úkony. I Ωuž dospěla do použitelného stadia a je standardní součástí distribucí.

Posledním směrem pro rozšíření TEXu se stala změna výstupního formátu – vznikl pdfTEX, jehož výstupem není DVI, ale PDF soubor. PdfTEX definuje množství nových primitiv, která umožňují manipulaci s objekty ve formátu PDF – obrázky, hypertextovými objekty, záložkami, barvami, ale dokonce i s vloženými JavaScriptovými objekty a multimédii. PdfTEX je jedním z nejsilnějších programů pro vytváření komplikovaných PDF souborů. I pdfTEX používá kódový základ původního TEXu. Dobře se snese s ε-TEXem a jejich sloučením vzniká pdfeTEX. Jde o další projekt, který dnes naleznete v každé distribuci TEXu.

Nedostatky TEXu

Koncepce TEXu jako makrojazyka bez jakékoliv podpory strukturování přímo v jádře systému může být sporná, ovšem třeba LaTEX ukazuje, že není nepřekonatelná a že s pomocí maker lze takovou nadstavbu vytvořit.

Zásadnější problémy však přináší koncepce oddělení preprocesoru od sázecí části – v mnoha situacích není možné zpětně zjistit (jinak než analýzou výstupu nebo protokolu), jak se TEX vlastně rozhodl. Zásah do sazby nad rámec existujících primitiv musí provést sazeč ručně.

Stejně zásadní jsou i problémy, které vyvolává striktní oddělení řádkového a stránkového zlomu nebo zacházení s objekty jako obdélníkovými boxy.

Poslední třída problémů vyplývá z monolitické koncepce – nemůžeme tedy napsat například nový modul pro dělení slov v jazycích, kde Liangův algoritmus nedává dokonalé výsledky (jazyky, kde se složená slova dělí ve švu).

Zde je malá ukázka věcí, které v TEXu nevyřešíme (bez enormního množství práce či kódu mimo TEX):

  • Makro, které by vkládalo obtečené obrázky do vnějšího horního rohu stránky. Při velké snaze se nám podaří napsat makra, která to dokáží u sazby na rejstřík (budou mít asi 30 kB), ale pro obecnou sazbu to nevyřešíme.
  • Primitivum \brokenpenalty (penalta za zlom stránky v místě, kde se dělí slovo) je nepoužitelné u sazby na rejstřík. V okamžiku zlomu stránky již nelze ovlivnit, zda v tom místě bude rozdělené slovo.
  • Povolit tři rozdělení slova nad sebou, ale čtyři zakázat. Vše, co TEX umí, je \doublehyphen­demerits, což na toto nestačí.
  • Makro, které by dokázalo odhalit a rozbít řeku (nepěkný shluk mezer mezi slovy v řádcích pod sebou) anebo opakování stejných slov pod sebou na začátku a konci řádku.
  • Napsat makro na iniciálu, které by podle tvaru písmena přisunulo následující znak (v běžné velikosti) – například u kombinace „Ty“ – zde totiž nelze použít standardní páry pro podřezávání.
  • Napsat makro, které by umělo předepsat, že poslední stránka kapitoly bude zaplněna od jedné třetiny do dvou třetin.
  • Napsat makro, které by obteklo obrys obrázku (TEX nemá žádnou informaci o obsahu obrázku).
  • Zjistit, jak dlouhý byl poslední řádek minulého odstavce lze jen za určitých podmínek, a to pouze pomocí speciálních triků v matematickém režimu.

Možný následník TEXu – NTS

Podstatně vyšší ambice si dal projekt NTS. Podobně jako ostatní projekty začal s TEXem. Na rozdíl od ostatních však nepracuje s původním kódem, ale jde v podstatě o kompletní reimplementaci TEXu. Zatímco původní TEX je programový monolit napsaný v jazyce WEB/Pascal, nový NTS je napsaný objektově v jazyce Java. Proto bylo dosažení co nejvyšší kompatibility s TEXem mimořádně náročným úkolem. Dnes, po deseti letech od zahájení projektu, je ve stadiu beta testů a odlišnosti od TEXu jsou pouze mikroskopické.

Daní za objektovou orientaci je mnohonásobné zpomalení NTS oproti TEXu.

Proč byla tato náročná práce podstoupena? Přes dobrou dokumentaci zdrojového kódu TEXu jsou vzhledem k množství vazeb mezi částmi kódu rozsáhlejší zásahy do jádra původního TEXu velmi komplikované – každý takový zásah může mít neočekávaný vliv na původní funkčnost TEXu. Již sám fakt, že za poslední čtvrtstoletí tak nikdo neučinil, hovoří sám za sebe.

Naproti tomu kód NTS by měl být mnohem průhlednější a srozumitelnější a již dnes existují první implementace, které mění jeho funkci – například modul pro nalití textu do oblasti omezené více obdélníky.

V blízké budoucnosti lze očekávat další moduly – nové algoritmy pro zlom stran a dělení slov, ale třeba i moduly pro integraci grafiky.

Alternativní přístupy

TEX a jeho logika není jediným přístupem, jak vytvořit sazbu. Dlouhá léta byl jedinou alternativou groff a jeho nadstavby (známe je například z UNIXových manuálových stránek).

Teprve vznik SGML znamenal změnu – vznikl kvalitní a obecný značkovací jazyk. SGML nyní konkuruje formátXML (což je lépe zpracovatelná podmnožina SGML s restriktivnější syntaxí). Důležité však je, že vznikly i standardy XSLT a FO, které poskytují návod na převod XML do textové podoby.

Porovnáme-li TEX s XML, vidíme značný rozdíl v přístupu. Zatímco TEX je makrojazyk s typografickými příkazy, struktura dokumentu není v TEXu nijak pevně daná. Vzniká až jako důsledek maker z nějaké nadstavby. Implementaci obsahů a křížových referencí zajišťují složitá makra.

Naproti tomu pro XML je prvotním struktura dokumentu. Teprve XSLT + FO nabízejí příkazy pro vytvoření grafické podoby dokumentu. Oddělení vzhledu od obsahu je tedy povinné. Vytvoření rejstříků, obsahů a jiných referencí je triviálním kódem na několik řádků. Pokud však náš požadavek přesáhne možnosti FO, je problematické toho dosáhnout. S podobným problémem se setkáváme i v TEXu, ale až při podstatně vyšší úrovni kontroly nad vzhledem dokumentu (viz omezení popsaná výše).

Existuje však možnost využití obou přístupů – dokument vytvoříme v XML a jeho formátování popíšeme pomocí XSLT + FO. Speciální procesor se pak společně s TEXem postará o vlastní sazbu. Takto funguje například passiveTEX. Lze tak použít i ConTEXt.

Budoucnost

Vidíme, že zatím chybí koncept typografického systému, který by spojoval možnosti strukturovaného popisu dokumentů, ale zároveň by umožnil jemné ovlivňování grafické podoby, a to až do mikrotypografických detailů. Lze však předpokládat, že v budoucnu vzniknou nové moduly pro NTS, které podobné věci zvládnou, případně že již nebudou založeny na makrojazyce. Lze si představit modul NTS jako sdílenou knihovnu, která se bude starat o kvalitní zlom textu ve webovém prohlížeči, XML procesoru nebo WYSIWYG sázecím programu. To vše je zatím hudbou budoucnosti…

Našli jste v článku chybu?

10. 12. 2002 18:30

cronin (neregistrovaný)

Nejake veci z vlastnej tvorby som svojho casu dal na wwweb, ale uz nejako to nestiham doplnat. Takze veci na stranke su iba pre *zaciatocnikov*. Linka:

http://alife.fei.tuke.sk/~babjak/latex.html



9. 12. 2002 22:55

Jirka Kosek (neregistrovaný)

Podpora pro UTF-8 (pouze české znaky) je k dispozici na adrese

ftp://math.feld.cvut.cz/pub/cstex/base/utf8cs.tex



Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU