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.
Přejít: navigace | na začátek stránky | na konec stránky
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).
Přejít: navigace | na začátek stránky | na konec stránky
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řejít: navigace | na začátek stránky | na konec stránky
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ů.
Přejít: navigace | na začátek stránky | na konec stránky
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.
Přejít: navigace | na začátek stránky | na konec stránky
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ů.
Přejít: navigace | na začátek stránky | na konec stránky
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.
Přejít: navigace | na začátek stránky | na konec stránky
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.
Přejít: navigace | na začátek stránky | na konec stránky
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:
Přejít: navigace | na začátek stránky | na konec stránky
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).
Přejít: navigace | na začátek stránky | na konec stránky
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.
Přejít: navigace | na začátek stránky | na konec stránky
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>
Použitím lokální instalace navíc zajistíte, že popisuje vámi
použivanou verzi dokumentovaného objektu.
texdoc cropmark
Přejít: navigace | na začátek stránky | na konec stránky
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.
Přejít: navigace | na začátek stránky | na konec stránky
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ů).
Přejít: navigace | na začátek stránky | na konec stránky
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
Tip: Při používání PuTTY pro připojení k unixovém serveru můžete text přenášet přes schránku:
- Ctrl + Insert: kopírovat
- Shift + Insert: vložit
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.
Přejít: navigace | na začátek stránky | na konec stránky
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
-
Opět obvykle používáme kratší zápis:
-
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.
Přejít: navigace | na začátek stránky | na konec stránky
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.
Přejít: navigace | na začátek stránky | na konec stránky
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.