> 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md).

# Jak funguje \expandafter: TeX používá dočasné seznamy tokenů

[Část 1](/latex/cs/clanky-do-hloubky/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Část 2](/latex/cs/clanky-do-hloubky/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Část 3](/latex/cs/clanky-do-hloubky/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Část 4](/latex/cs/clanky-do-hloubky/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Část 5](/latex/cs/clanky-do-hloubky/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Část 6](/latex/cs/clanky-do-hloubky/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Exanze a interní seznamy tokenů

Dosud jsme zkoumali tokeny, seznamy tokenů a základní principy stojící za koncepcí expanze v TeXu. V této části použijeme primitivum TeXu `\jobname` k představení důležitého aspektu zpracování expanze: používání *dočasných seznamů tokenů*—které jsou *zásadním* aspekt toho, jak `\expandafter` funguje, jak uvidíme později v této sérii článků.

`\jobname` je rozšiřitelné primitivum TeXu, jehož expanze generuje posloupnost znakových tokenů, které představují název hlavního vstupního `.tex` souboru. Předpokládejme například, že bychom měli následující text jako součást `.tex` soubor s názvem `mycode.tex`:

```
    Název mého souboru je \jobname .tex %Poznámka: mezera za \jobname
```

To by vysázel

```
    Název mého souboru je mycode.tex
```

Když použijeme `\jobname` příkaz, výsledné vysázené znaky se nečtou z vašeho fyzického `.tex` souboru, takže odkud pocházejí: kde TeX tyto tokeny ukládá/čte? Pro uživatele neviditelně (tj. hluboko uvnitř samotného TeXu) proces expanze pro `\jobname` vytváří dočasný seznam tokenů sestavený z posloupnosti znakových tokenů, které představují název vašeho souboru. Jakmile `\jobname` vytvoří tento seznam tokenů, TeX dočasně „odvrátí svůj pohled“ od svého aktuálního vstupního zdroje (zde našeho `.tex` souboru) a čte tokeny (znakové tokeny) z tohoto dočasného seznamu tokenů. Když TeX potřebuje další vstupní token, přečte svůj další token z tohoto interního seznamu a pokračuje v tom, dokud nedojde na konec seznamu; v tom okamžiku TeX obnoví čtení tokenů ze svého předchozího vstupního zdroje, což by zde byl text přečtený z našeho `.tex` vstupního souboru.

Jak ukazuje následující diagram, TeX pokračuje ve čtení `.tex` vstupního souboru přesně na místě, kde se zastavil po zpracování `\jobname`—po přečtení znaku mezery, ale před přečtením znaku „.“. Tečka (.) v praxi čeká na přečtení z TeXova vstupního bufferu — malé oblasti TeXovy paměti určené k uložení řádku textu přečteného z `.tex` souboru — TeX čte a zpracovává váš `.tex` soubor po jednom řádku, nečte celý soubor do paměti.

Při studiu následujícího obrázku čtěte zdola a postupujte směrem nahoru, abyste sledovali průběh procesu.

![Jak TeX expanduje \jobname](/files/11dd4f78aac2a1d5d61d26d8556bc11850bbd758)

V návaznosti na naši diskusi o expanzi můžeme pozorovat, že expanze `\jobname` vedla k `\jobname` tomu, že příkaz (token) byl *odstraněn* z vstupu a *nahrazen* s tokeny vzniklými expanzí: dočasný seznam tokenů vytvořený k uložení názvu `.tex` souboru.

Rozšiřitelné příkazy (například `\jobname`) nejsou jediná primitiva TeXu, která „tajně“ vytvářejí a používají seznamy tokenů k dosažení svého účinku. Například příkazy `\uppercase` a `\lowercase` oba vytvářejí interní seznamy tokenů, aby změnily velikost písmen svého argumentu. Jakmile je práce se změnou velikosti písmen hotová, TeX přepne na čtení znakových tokenů ze seznamů tokenů vygenerovaných těmito příkazy. Seznamy tokenů jsou jediným TeXovým mechanismem pro „ukládání tokenových dat“—kromě zápisu dat do fyzického souboru na disku.

### Zdroje tokenů: TeX je mistr žonglování

Když TeX zpracovává běžný dokument, musí spravovat *mnoha* zdroje tokenů: vstup přicházející z četných fyzických souborů na disku a nesčetných interních seznamů tokenů vytvořených během zpracování. V této části velmi stručně prozkoumáme, jak TeX dokáže s těmito vstupními zdroji „žonglovat“.

Předpokládejme, že chceme jednoduché makro, které vysází název našeho `.tex` souboru:

```
    \def\myfile{Název mého souboru je \jobname .tex}
```

Později, v určitém okamžiku v našem `.tex` souboru zavoláme makro `\myfile`: dočasně se TeX přepne z vytváření/čtení tokenů prostřednictvím textu ve vašem textovém (`.tex`) souboru na čtení tokenů z `\myfile` definice (seznamu tokenů) uložené v paměti. Když TeX vykoná `\myfile` makro (zpracuje jeho tokeny), rozpozná token představující `\jobname` příkaz, jehož expanze vytvoří ještě další dočasný seznam tokenů, z něhož musí TeX číst tokeny. I v tomto jednoduchém scénáři musí TeX spravovat tři zdroje vstupu:

1. webových stránkách `.tex` textový soubor obsahující `\myfile` makro;
2. seznam tokenů, který ukládá definici `\myfile` makro;
3. seznam tokenů vytvořený `\jobname` příkazem uvnitř `\myfile` makra.

Jak TeX zpracovává dokument, neustále přepíná mezi vstupními zdroji: fyzickými soubory a seznamy tokenů, takže jak si to TeX sleduje? Odpovědí je, že interně enginy TeXu udržují takzvaný [vstupní zásobník](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) který funguje jako jakási „paměť“, jež umožňuje TeXu pamatovat si, co dělal (odkud četl), když přepíná mezi vstupními zdroji.

Aniž bychom zacházeli příliš do detailů, interní kód v enginu TeXu používá globální proměnnou nazývanou `curinput` (aktuální vstup), která mimo jiné TeXu říká, zda právě čte z fyzického souboru nebo ze seznamu tokenů. `curinput` také TeX ukazuje na místo (v aktuálním seznamu tokenů nebo jeho textovém bufferu), odkud má získat další token. Pokud TeX čte ze seznamu tokenů `curinput` také zaznamenává, jaký typ seznamu tokenů se zpracovává — např. seznam tokenů uložený jako makro nebo zda tyto tokeny vznikly z jiného zdroje.

Když je to potřeba, `curinput` proměnná bude změněna tak, aby ukazovala na nový vstupní zdroj, a TeXův aktuální „stav vstupu“ (zdroj a umístění) bude uložen do vstupního zásobníku, aby se TeX mohl později vrátit přesně na toto místo (pozici ve `.tex` souboru nebo na další token v seznamu tokenů). Jakmile je tento nový vstupní zdroj vyčerpán (např. už nejsou žádné tokeny v seznamu tokenů nebo je dosažen konec souboru), je ze zásobníku odebrán a `curinput` je aktualizována, aby TeX začal znovu získávat tokeny z předchozího zdroje.

## Hlouběji do detailů (volitelné čtení)

Následující části poskytují dodatečné základní informace pro čtenáře, kteří mají rádi detaily.

### Skutečné seznamy tokenů

Následující grafika byla vygenerována pomocí vlastní sestavy TeXu od Knutha v Overleafu, která poskytuje přístup k interním datům a datovým strukturám TeXu. Tato ilustrace seznamu tokenů navazuje na zjednodušenou verzi uvedenou výše a zahrnuje další údaje, například zobrazení znaků generovaných `\jobname` mají kód kategorie 12, nikoli obvyklý kód kategorie 11. V tomto diagramu je „uzel“ jen název pro jednotku paměťového úložiště používanou TeXem.

![Uvnitř seznamu tokenů TeXu](/files/afd0c428b060b3d8012584bd1f863f71ab3c7568)

### Jak TeX čte a zpracovává \jobname

Také, pro úplnost, zde je přehled TeXových „myšlenkových procesů“, když rozpoznává `\jobname` ve našem vstupu `.tex` souboru. V tomto obrázku vidíme, jak TeX rozpozná escape znak (`\` s kódem kategorie 0), zpracuje znakovou posloupnost `jobname`, vytvoří token a vyhledá význam `\jobname` příkazu, přičemž TeX zjistí, že má kód příkazu > 100, což značí, že jde o rozšiřitelný příkaz.

![Jak TeX vyhledává a zpracovává \jobname](/files/cac8e4ba1a70c18fcce0ac4d79f975a8a9b11114)

[Část 1](/latex/cs/clanky-do-hloubky/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Část 2](/latex/cs/clanky-do-hloubky/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Část 3](/latex/cs/clanky-do-hloubky/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Část 4](/latex/cs/clanky-do-hloubky/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Část 5](/latex/cs/clanky-do-hloubky/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Část 6](/latex/cs/clanky-do-hloubky/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)


---

# 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.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.
