Ve světě TeXu velmi rychle narazíte na spoustu *TeX pojmů,
např. TeX, e-TeX, pdfTeX, XeTeX, LuaTeX, plain TeX, LaTeX, ConTeXt
a další. Zde se v nich pokusíme udělat pořádek
a ukázat si rozdíly mezi nimi na příkladech.
TeX: Jazyk, program, sazební systém a ekosystém
TeX je makrojazyk pro sazbu dokumentů navržený v 70.
a 80. letech minulého století americkým profesorem Donaldem
Ervinem Knuthem. Na rozdíl od většiny ostatních systémů na přípravu
dokumentů klade TeX nezvyklý důraz na sazbu matematiky. Základním
prostředkem abstrakce v TeXu jsou uživatelská makra, jejichž
výskyty ve vstupním dokumentu jsou při zpracování nahrazovány
definicemi. TeXem rovněž rozumíme interpret jazyka TeXu
(TeXový kompilátor).
V širší rovině označujeme TeXem sazební systém sestávající
z Knuthova TeXového kompilátoru, programu
Metafont (který probereme v budoucím
cvičení) a rodiny písem Computer Modern. V této
podobě Knuth systém během 80. let minulého století uveřejnil. Od
roku 1990 již tento systém není v aktivním vývoji
a dochází pouze k odstraňování chyb. Čísla verzí programů
TeXu a Metafontu
postupně konvergují
k iracionálním číslům π a e; po smrti Donalda Knutha
se verze programů změní na zmíněné konstanty a veškeré
neopravené implementační chyby budou již pouze dokumentovány.
Díky svobodnému
a otevřenému zdrojovému kódu se kolem TeXu (sazebního systému)
utvořila aktivní komunita uživatelů a došlo ke vzniku
bohatého ekosystému odvozených kompilátorů,
formátů, makrobalíků, fontů
a rozšiřujících programů. Ty jsou od roku 1992
shromažďovány na internetovém archivu
CTANu
a distribuovány ve formě TeXových distribucí (ty jsme stručně
probrali v úvodním
cvičení). Často se proto setkáme s tím, že libovolné
softwarové řešení postavené na součástech TeXových distribucí je
volně označováno jako TeX (v akademickém světě jde typicky
o spojení kompilátoru pdfTeXu
s formátem LaTeXu).
TeXové kompilátory (TeX engines)
Část *TeX termínů odkazuje na různé implementace kompilátorů
TeXového zdrojového textu, tzn. binární programy, které načtou
zdrojový text a převedou jej na vysázený výstupní dokument.
Samotný kompilátor rozumí jen naprosto základním příkazům, tzv.
primitivům jazyka. Právě rozsah podporovaných primitiv tvoří
nejzásadnější rozdíly mezi různými kompilátory TeXu.
Původní TeX Donalda Knutha
-
Kompilátor
odpovídající původnímu popisu TeXu, jak jej definoval
Donald
Knuth v knize The TeXbook,
respektive některé jeho modernější revizi rozšířené o další
primitiva:
-
TeX82 – TeX verze 2 z roku 1982 podporující
stále jen 7bitový vstup.
-
TeX90 – TeX verze 3 z roku 1990 podporující
již 8bitový vstup.
-
V moderních TeXových distribucích se používá pouze při použití
formátu plain.
-
Původní implementace TeXu zavedla v roce 1979 pro popis výsledné
vysázené podoby dokumentu na zařízení nezávislý binární formát
DVI
(Device
Independent File Format). Tento formát je TeXem stále běžně
podporován, většina uživatelů však dává přednost přímému
generování dokumentů ve formátu PDF, které umožňují některé
novější implementace TeXových kompilátorů.
e-TeX
-
e-TeX je původní TeX
rozšířený o řadu nových primitiv, např. pro obousměrnou
sazbu (rozšíření TeX–XeT).
-
e-TeX rozšíření jsou vestavěna do všech novějších kompilátorů,
takže e-TeX samotný se používá zřídka.
pdfTeX
-
pdfTeX implementuje e-TeX
a přidává řadu vlastních primitiv, zejména pro podporu
výstupu do formátu PDF a využití jeho různých speciálních
vlastností, nebo pro ovládání mikrotypografických rozšíření
(která probereme
v budoucím cvičení).
-
pdfTeX umí produkovat nejen PDF, ale také formát
DVI z Knuthova TeXu. Z toho důvodu
je dnes pdfTeX typicky používán při kompilaci TeXových
dokumentů do DVI i PDF.
-
pdfTeX je v současnosti de-facto standardním kompilátorem pro
přípravu TeXových dokumentů.
XeTeX
-
Kompilátor XeTeX
implementuje rozšíření e-TeX a některá primitiva zavedená
pdfTeXem.
-
Velkým rozdílem XeTeXu oproti výše zmíněným TeXovým
kompilátorům je, že nativně pracuje s UTF-8 kódovaným
zdrojovým textem na vstupu.
-
Oproti výše zmíněným TeXovým kompilátorům umožňuje využívat fonty
dostupné v operačním systému (využívá knihovny daného systému),
nikoliv jen fonty z TeXové distribuce připravené pro použití
TeXem.
-
Prezentace schopností XeTeXu byla předmětem přednášky „XeTeX:
TeX plus Unicode plus OpenType minus complexity“, kterou
Jonathan Kew přednesl v roce 2007 na FI MU. Ke
stažení jsou k dispozici
slajdy
a videozáznam.
LuaTeX
-
LuaTeX implementuje
rozšíření e-TeX a některá primitiva zavedená pdfTeXem
(konkrétně i ta, která umožňují ovládání mikrotypografických
rozšíření).
-
LuaTeX stejně jako XeTeX nativně pracuje s UTF-8 kódovaným
zdrojovým textem na vstupu a umožňuje využívat fonty
dostupné v operačním systému. Většinu ukázek pro XeTeX, se
kterými se ve zbytku kurzu setkáme, je možné beze změn zpracovat
i strojem LuaTeX.
-
Zásadním rozdílem LuaTeXu oproti všem ostatním uvedeným
kompilátorům je, že obsahuje podporu pro skriptování
v programovacím jazyce Lua
v rámci zdrojového textu dokumentu. Lua skript může
zasahovat do procesu kompilace a ovlivnit tak výslednou
podobu vysázeného dokumentu. Toto má následující výhody:
-
Uživatel může části dokumentu generovat pomocí dobře
přístupného skriptovacího imperativního jazyka namísto
makrojazyka TeXu. Používat skriptovací jazyky uvnitř
dokumentů je sice možné pomocí rozšiřujících balíčků již
nyní (viz např.
PerlTeX),
ale jazyk Lua má tu výhodu, že jeho interpret je zahrnut
přímo do kompilátoru LuaTeXu, díky čemuž netrpí
přenositelnost výsledných dokumentů.
-
Kvůli chybějící nízkoúrovňové funkcionalitě není nutné
vytvářet nové TeXové kompilátory, stačí rozšířit
chování stávajícího kompilátoru pomocí jazyka Lua.
Takto je v LuaTeXu implementována podpora lokálně
instalovaných OpenType a TrueType fontů, zatímco
v XeTeXu je tato podpora řešena „natvrdo“ pomocí
rozšiřujících TeXových primitiv.
-
LuaTeX byl posledních několik let ve stádiu aktivního vývoje.
Vydání první stabilní verze
proběhlo
při příležitosti desátého
setkání uživatelů ConTeXtu, které se konalo na podzim roku 2016
v Nizozemsku. Očekává se, že v dohledné budoucnosti
LuaTeX nahradí pdfTeX v roli de-facto standardního
kompilátoru TeXových dokumentů; zatím ale většina uživatelů nemá důvod přejít.
TeXové formáty
Jelikož samotný kompilátor rozumí jen naprosto základním příkazům,
tzv. primitivům jazyka, bylo by mimořádně nepohodlné používat tyto
nízkoúrovňové příkazy pro tvorbu dokumentu. S pomocí těchto
základních primitiv jsou proto vybudovány makrojazyky –
formáty – určené pro použití koncovým uživatelem při
formátování textu.
V rámci formátu jsou definovány nové makropříkazy, které mohou
používat jak primitiva jazyka, tak dříve definovaná makra.
Samotný uživatel samozřejmě může ve svém zdrojovém textu používat
jak přímo primitiva jazyka, tak makra definovaná v používaném
formátu, a nebo obojí využít k definici vlastních maker.
TeXových formátů je mnoho (a uživatelé si mohou definovat
i vlastní). Zde se proto v krátkosti zmíníme jen o těch
nejdůležitějších:
plain TeX
-
plain
TeX je minimální základní sada maker určená pro použití
koncovým uživatelem. Většina maker pro sazbu běžných, ovšem ne
elementárních, prvků dokumentů (například makro pro
vysazení titulní stránky dokumentu s nadpisem a jménem autora),
zde nejsou definována a je na koncovém uživateli, aby
si je nadefinoval sám dle potřeb vytvářeného dokumentu pomocí
jednodušších maker a primitivů jazyka.
-
Vzhledem k rozumnému množství maker plain TeXu a jejich
uživatelské oblibě je množina maker nabízených ostatními
TeXovými formáty typicky nadmnožinou plain TeXu (v rozmezí
drobných odchylek).
csplain
-
csplain
je:
[…] konzervativní rozšíření plain TeXu Donalda Knutha. Rozdíl
mezi formátem plain a formátem csplain spočívá v tom, že
místo CM fontů se pracuje implicitně s CS-fonty, což
umožňuje:
- přímé zpracování znaků české a slovenské abecedy,
- zavedení vzorů dělení pro český a slovenský jazyk.
LaTeX
-
LaTeX je
pravděpodobně nejrozšířenější a nejznámější TeXový formát.
Obsahuje rozsáhlý ucelený balík maker připravený pro snadnou
a rychlou sazbu technických dokumentů koncovým uživatelem –
obsahuje například předpřipravené šablony pro sazbu odborných
článků s předpřipravenými makry pro formátování všech prvků
dokumentu včetně titulní stránky s názvem a autorem dokumentu,
abstraktu, záhlaví a zápatí stránek s číslováním a záhlavími
kapitol, seznamem použité literatury atd.
-
LaTeX je postaven na systému
rozšiřujících
balíčků – samostatné menší sady maker rozšiřující
schopnosti samotného LaTeXu o nějakou ucelenou
funkcionalitu.
-
Například balíček
cropmark
přidává k základnímu LaTeXu makra pro sazbu tiskových
ořezových značek.
-
Balíčky, které mají být při kompilaci dokumentu použity,
se zavádí v hlavičce LaTeXového dokumentu příkazem:
\usepackage{jméno_balíčku}
-
Pokud používáte některou z rozsáhlejších TeXových
distribucí, jako je TeX
Live či MikTeX,
pravděpodobně je součástí vaší instalace i rozsáhlá
databáze dodatečných balíčků. Nebudete je tedy muset
získávat ručně. Pokud potřebujete novější verzi
balíčků, nebo balíček, který není součástí vaší TeXové
distribuce, tak jako startovací bod pro hledání můžete
využít
tematický
online TeX katalog nebo tematický
katalog CTAN.
Tip:
Dokumentaci (nejen) k LaTeXovým balíčkům nemusíte hledat na
webu, stačí si zobrazit dokumentaci z vaší TeXové instalace:
texdoc <objekt>
texdoc cropmark
Použitím lokální instalace navíc zajistíte, že popisuje vámi
použivanou verzi dokumentovaného objektu.
ConTeXt
-
ConTeXt je velmi
rozsáhlý systém pro sazbu dokumentů. Svou syntaxí je
značně vzdálený od plainu i LaTeXu.
-
V porovnáním s LaTeXem nabízí ConTeXt podstatně bohatší
funkcionalitu, která je na rozdíl od LaTeXu integrována přímo
do formátu – prakticky zde tedy neexistují
balíčky
třetích stran.
-
ConTeXt je od základu navržen tak, aby byl schopný zpracovávat
strukturované XML dokumenty a aby bylo možné převést ConTeXtové
dokumenty do strukturovaných XML dokumentů. To je výhodné při
databázovém publikování, nebo při generování výstupu pro
elektronické knihy. Jednodušší formáty typu LaTeX si takové cíle
nekladou a výše zmíněnou funkcionalitu je třeba nahradit externími
programy.
-
ConTeXt je rozdělen na
dva formáty:
-
MarkII je starší formát, který pracuje s kompilátory
pdfTeXu, XeTeXu
a LuaTeXu. V současnosti již není
aktivně vyvíjen, pouze udržován.
-
MarkIV je aktivně vyvíjený formát, který pracuje
výhradně s kompilátorem LuaTeXu.
Formát MarkIV je s formátem MarkII zpětně kompatibilní
a je tedy možné dokumenty ve formátu MarkII relativně
bezbolestně vysázet s využitím nového formátu (ačkoliv
výstup nemusí být zcela totožný). Opačně toto neplatí
a mnoho pokročilých funkcí formátu MarkIV je ve
formátu MarkII nedostupných.
-
ConTeXt je pravděpodobně nejmodernějším a nejmocnějším
TeXovým formátem. Na druhou stranu je jeho vývoj poměrně
živelný, často motivovaný primárně potřebami jeho autora Hanse
Hagena a společnosti
PRAGMA Advanced Document
Engineering.
-
Dokumentace ConTeXtu je dostupná online v rámci
ConTeXt Garden wiki
a tematických
manuálů. Základy ConTeXtu pak shrnuje např.
článek Michala
Kvasničky ve Zpravodaji CSTUG z roku 2001.
Praktické použití
Jelikož základní sada TeXových primitiv je společná, založená na
původním TeXu Donalda Knutha, tak v zásadě můžete
každý formát použít s libovolným TeXovým
kompilátorem (za předpokladu, že vy ani formát nevyužíváte
rozšiřující primitiva některého z kompilátorů).
plain TeX
Nejjednodušším formátem je plain TeX, kde
není třeba dokument začínat žádnou komplikovanou hlavičkou. Do
textového souboru (pojmenovaného např.
muj-plaintex-zdrojak.tex) si uložte následující kód:
Hello World! -- This is my {\it first} \TeX{} document.
\end
Tento dokument ve formátu
plain TeX můžete následně přeložit
libovolným TeXovým kompilátorem:
-
Pomocí původního TeX kompilátoru do
DVI příkazem:
tex muj-plaintex-zdrojak.tex
-
Pomocí kompilátoru pdfTeX do PDF
příkazem:
pdftex muj-plaintex-zdrojak.tex
-
Pomocí kompilátoru XeTeX do PDF
příkazem:
xetex muj-plaintex-zdrojak.tex
-
Pomocí kompilátoru LuaTeX do PDF
příkazem:
luatex muj-plaintex-zdrojak.tex
Ukázkový dokument pro plain TeX si můžete přeložit a prohlédnout i na
službě Overleaf.
Vizte také článek
Can I run plain TeX on Overleaf?
v dokumentaci služby Overleaf.
LaTeX
Formát LaTeX je složitější a ve zdrojovém textu
již vyžaduje jistou minimální hlavičku. Pro rychlé vyzkoušení tedy
můžeme využít například standardní ukázkový dokument
sample2e.tex, který je součástí TeXové distribuce.
-
Pomocí příkazu kpsewhich najděte v TeXové instalaci
soubor sample2e.tex a zkopírujte si jej do pracovního
adresáře. Viz
předchozí cvičení.
Dokument sample2e.tex ve formátu
LaTeX můžete následně přeložit
libovolným TeXovým kompilátorem:
-
Pomocí kompilátoru pdfTeX do
DVI příkazem:
pdftex -fmt=latex -output-format=dvi sample2e.tex
-
Povšimněte si parametru -fmt, který říká, že
kompilátor nemá použít výchozí formát
plain TeX, ale formát
LaTeX.
-
Aby bylo použití různých TeXových formátů a kompilátorů
pohodlné, typicky je v TeXové distribuci připravena
zkratka (alias) pro použití dané kombinace
kompilátoru a formátu. Obvykle tedy používáme kratší
zápis příkazu:
latex sample2e.tex
-
Pomocí kompilátoru pdfTeX do PDF
příkazem:
pdftex -fmt=latex -output-format=pdf sample2e.tex
-
Opět obvykle používáme kratší zápis:
pdflatex sample2e.tex
-
Pomocí kompilátoru XeTeX do PDF
zkratkou:
xelatex sample2e.tex
-
Pomocí kompilátoru LuaTeX do PDF
zkratkou:
lualatex sample2e.tex
Ukázkový dokument pro LaTeX si můžete přeložit a prohlédnout i na
službě Overleaf.
ConTeXt
Formát ConTeXt uživatelům dopřává
výhody složitějších formátů jako LaTeX při zachování jednoduchosti
zdrojového kódu v plain TeXu, kde
není třeba dokument začínat žádnou komplikovanou hlavičkou. Do
textového souboru (pojmenovaného např.
muj-context-zdrojak.tex) si uložte následující kód:
\starttext
\startsection[title={Testing \CONTEXT}]
This is my {\em first} \CONTEXT{} document.
\stopsection
\stoptext
Tento dokument ve formátu
ConTeXt můžete následně přeložit
kompilátorem LuaTeX
do PDF následně:
context muj-context-zdrojak.tex
Ukázkový dokument pro ConTeXt si můžete přeložit a prohlédnout i na
službě Overleaf.
Vizte také
příspěvek
o přípravě dokumentů pomocí formátu ConTeXt na službě Overleaf.
Praktické úkoly k procvičení
-
Pomocí výše uvedených postupů si vysázejte ukázkové dokumenty pro
plain TeX,
LaTeX a
ConTeXt
do formátu PDF.
-
Pokud máte čas, najděte/vytvořte si příklady pro formáty
csplain a ConTeXt
a zkuste si je přeložit patřičným příkazem. Stejně tak si zkuste
použít rozšiřující primitiva některého TeXového stroje, jako
např.
LuaTeX.