> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/cs/clanky-do-hloubky/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Nová série článků: Tokeny TeXu a související koncepty — ale proč (a jak)?

Tento úvodní článek si klade za cíl vysvětlit, proč byla tato série napsána, čeho doufám dosáhnout, a poskytnout základní informace o technikách použitých k prozkoumání tokenů TeXu prostřednictvím pozorování vnitřního fungování enginu TeXu. Tato stránka článku je rovněž navržena tak, aby obsahovala odkazy na všechny články série, a bude průběžně aktualizována, aby tyto odkazy poskytovala s publikováním každého nového článku.

### Odkazy na články

Každý článek bude obsahovat sadu odkazů na další články v této sérii.

* [Co je „TeX token“?](/latex/cs/clanky-do-hloubky/53-what-is-a-tex-token.md)
* [Co je „seznam tokenů TeXu“?](/latex/cs/clanky-do-hloubky/54-what-is-a-tex-token-list.md)

## Pozadí této série článků

Motivace napsat tuto sérii článků vzešla ze čtení materiálů o TeXu, které vysvětlovaly mnohé z činností TeXu prostřednictvím pojmu „tokeny“ spolu s „procesem tokenizace“ TeXu, „seznamy tokenů“ a souvisejícími pojmy, jako je „rozbalování maker“ a „rozbalitelné příkazy“. Kdykoli jsem narazil na vysvětlení týkající se TeXu formulovaná pomocí „tokenů TeXu“, stále se mi v mysli vracela tatáž otázka: Co přesně, *je* je TeX token? Potřeboval jsem to zjistit.

Rozsah a obsah prvního článku, [Co je „TeX token“?](/latex/cs/clanky-do-hloubky/53-what-is-a-tex-token.md), je ze své podstaty poměrně „blízko kovu“, jak by řekli programátoři, a není pochyb o tom, že „TeX tokeny“ by se daly klasifikovat jako dost esoterické téma k psaní: tak proč se s tím vůbec zabývat? Nakonec zaujmete názor — nebo snad skok víry — že i ostatní lidé se mohli nad tímto tématem stejně trápit a že je prostor pro jeden či dva články, které doplní některé mezery. Mojí snahou je poskytnout užitečná vysvětlení pozadí, která mohou doplnit další materiál, který možná čtete, a snad pomohou lépe porozumět některým klíčovým pojmům, které se objeví, když se učíte o TeXu a zkoumáte makra a programování.

Je zřejmé, že v rámci blogových článků můžeme pouze poškrábat povrch — prostě není praktické snažit se vysvětlit všechna podstatná témata nebo se ponořit do nejtemnějších vod. Z nutnosti vynechám značné množství detailů a budu kráčet po tenké hranici mezi přílišným zjednodušením a dotažením analogií až k jejich zlomu.

„Pište články, které byste sami rádi četli“ je užitečné vodítko, které jsem se při psaní této série snažil co nejvíce dodržovat.

## Když jsme si položili otázku, co teď?

Okamžitá výzva byla zřejmá: jak zjistit něco o tokenech TeXu, protože takové detaily (o tokenech, tokenizaci atd.) jsou hluboko pohřbeny v softwarovém kódu enginů TeXu — vlastně byste se jimi neměli zabývat, ledaže byste se o tyto detaily skutečně zajímali.

Jedním ze způsobů, jak se pokusit na tyto otázky odpovědět, je zkusit si přečíst původní zdrojový kód TeXu v [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—spuštěním [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) k extrakci dokumentace TeXu — nebo koupí výtisku knihy [Počítače a sazba, svazek B: TeX: Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Koupil jsem si výtisk tištěné knihy! Je jistě nesmírně užitečné mít zdrojový kód TeXu vydaný v knižní podobě a samozřejmě v ní najdete mnoho užitečných vysvětlení. Nicméně Knuthův TeX je napsán v Pascalu a zdrojový kód v Pascalu je přirozeně dokumentován Knuthovou metodologií literárního programování — předkládá kód v malých, snadno stravitelných úsecích. Je snadné ocenit, jak Knuthův přístup k dokumentaci skutečně pomáhá u tak složitého softwaru, jako je TeX, ale čtení knihy s sebou přináší poměrně dost odkazování mezi místy a přeskakování mezi stranami.

Ačkoli užitečná, samotná kniha mi nestačila k lepšímu pochopení toho, co se děje, když TeX vytváří „tokeny“ — což bylo téma, které mě obzvlášť zajímalo. Existuje jen jeden způsob, jak to opravdu zjistit: sestavit program TeX, spustit jej na malém souboru TeX a doslova sledovat, jak se kód vykonává, zatímco TeX prochází a čte vstup. Podrobnosti o sestavení TeXu ze zdrojových kódů jsou poněkud esoterické — převod z Pascalu do C — ale v následující sekci je stručný popis spolu s odkazem na osobní blogový příspěvek, který jde více do detailu.

Na rozdíl od XeTeXu a LuaTeXu — které mohou zpracovávat text ve formátu UTF-8 a podporují kódování Unicode — je Knuthův TeX 8bitový engine, což znamená, že předpokládá, že vstupní znaky jsou v rozsahu 0 až 255. Ačkoli je to důležitý rozdíl, nemá to *zásadně* vliv na naši diskusi o tokenech TeXu, protože pokrýváme témata a principy společné všem TeX enginům: jsou samotným jádrem softwaru.

## Jak můžete studovat tokeny TeXu?

Rozplétání cesty od vstupního textu k tokenům TeXu pro mě bylo poměrně dobrodružství — musím přiznat, že různá míra zmatku byla po cestě takřka stálou společnicí: TeX je tak složitý kus softwaru.

Už několik let (zhruba od roku 2009) pravidelně kompiluji nejnovější verzi LuaTeXu z jeho zdrojového kódu — proces, který je díky naprosto skvělému způsobu distribuce zdrojového kódu LuaTeXu poměrně přímočarý. Na základě této zkušenosti mě začalo zajímat lépe porozumět tomu, jak sestavit původní Knuthův TeX ze zdrojového kódu — *velmi* odlišná záležitost, protože TeX je napsán pomocí Knuthovy metodologie literárního programování. Toto mé vlastní sestavení TeXu na Windows, avšak s použitím open-source překladačů a nástrojových sad, bylo provedeno mimo distribuci TeX Live a je samostatným projektem. Vyžadovalo také sestavení toolchainu potřebného k převodu `tex.web` do programu v C, který bylo možné zkompilovat a poté spustit v debuggeru, abychom viděli, co TeX skutečně dělá, když zpracovává znaky vstupu.

Knuthův původní TeX byl použit namísto pdfTeXu, XeTeXu nebo LuaTeXu, protože jsem potřeboval verzi TeXu, která byla co nejblíže tištěnému zdrojovému kódu v knize TeX: The Program. Ta kniha byla poprvé vydána v roce 1986 a přestože TeX od té doby prošel několika aktualizacemi, nejnovější verze TeXu (3.14159265, vydaná v lednu 2014) je rozhodně dostatečně blízko zdrojovému kódu obsaženému v knize.

V souladu s Knuthovou metodologií literárního programování je zdrojový kód TeXu distribuován v textovém formátu nazývaném WEB: směs dokumentace TeXu a zdrojového kódu v Pascalu. Základní myšlenka je taková, že používáte dva nástroje nazvané TANGLE a WEAVE, které zpracovávají soubory WEB a extrahují buď dokumentaci TeXu, nebo zdrojový kód v Pascalu:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) vytahuje zdrojový kód v Pascalu ze souboru WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) vytahuje dokumentaci TeXu ze souboru WEB

Než však extrahujete zdrojový kód v Pascalu, musíte předzpracovat Knuthův `tex.web` soubor, abyste použili řadu změn, které umožní převod Pascalového kódu TeXu do kódu C pomocí procesu nazývaného Web2C. Tento předzpracovací krok se označuje jako *aplikace změnových souborů*.

Knuthův původní kódový soubor (tex.web) nesmí být žádným způsobem přímo upravován; místo toho se úpravy provádějí pomocí takzvaných change files (přípona `.ch`) které obsahují změny, které chcete použít na hlavní `.web` soubor — například `tex.web`. Změnové soubory se sloučí s původním zdrojovým kódem Knutha — pomocí dalšího nástroje nazvaného TIE — a vytvoří soubor nazvaný třeba `mytex.web` který zpracujete pomocí TANGLE, abyste extrahovali Pascalový kód do `mytex.pas`. Jakmile máte vhodný zdrojový soubor v Pascalu, můžete použít závěrečné kroky procesu Web2C k jeho převodu do zdrojového souboru v C, který můžete zkompilovat do spustitelného programu TeX. Pokud si chcete přečíst o poměrně spletitém procesu převodu Web2C, jsou další podrobnosti na tomto autorově [osobním blogu](http://www.readytext.co.uk/?p=2529).

Konečným výsledkem je program TeX, který lze spustit pomocí bezplatného a vynikajícího [prostředí Eclipse IDE pro C/C++](http://www.eclipse.org/home/index.php) k postupnému procházení zdrojového kódu TeXu (v C) a sledování, co se děje, když prochází váš vstup. Rozhodně to není nejzábavnější způsob trávení času, protože kód v C je strojově generovaný a místy mimořádně obtížně sledovatelný (zdrojový kód TeXu velmi štědře využívá skoky GOTO a globální proměnné). Kniha TeX: The Program je stále neocenitelná při orientaci ve zdrojovém kódu C, i když kniha obsahuje zdrojový kód TeXu v nádherně vysázeném kódu Pascalu.

Pro dokreslení celé diskuse je zde ukázkový snímek obrazovky zobrazující TeX spuštěný prostřednictvím prostředí Eclipse IDE s pozastaveným vykonáváním na funkci `getnext()`—která je jádrem procesů generování tokenů v TeXu.

![Snímek obrazovky zobrazující TeX spuštěný prostřednictvím prostředí Eclipse IDE](/files/cb0773c540470a4f5815f1aa4897d56dcc09918c)

Postupné procházení zdrojového kódu TeXu v C pomocí open-source prostředí Eclipse IDE pro C/C++.

## Závěry a poděkování

Napsání prvního článku a sestavení námětů pro budoucí blogové příspěvky v této sérii zabralo jistě nemálo času. Jsem nesmírně vděčný Johnu Hammersleymu a Mary Anne Baynesové ze společnosti Overleaf za podporu této myšlenky série a za to, že mi umožnili věnovat potřebný čas dalšímu průzkumu podkladů. Doufám, že tato série článků úspěšně identifikuje a řeší témata společného zájmu a prokáže svou hodnotu pro ty, kdo si je přečtou.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/cs/clanky-do-hloubky/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
