> 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/pl/artykuly-szczegolowe/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Nowa seria artykułów: tokeny TeX i powiązane pojęcia — ale po co (i jak)?

Ten wprowadzający artykuł ma wyjaśnić, dlaczego powstała ta seria, co mam nadzieję osiągnąć, oraz dostarczyć informacji wprowadzających na temat technik używanych do badania tokenów TeX-a poprzez obserwację wewnętrznego działania silnika TeX-a. Ta strona artykułu została również zaprojektowana tak, aby zawierała odsyłacze do wszystkich artykułów z serii, i będzie aktualizowana, aby dodawać te linki wraz z publikacją każdego nowego artykułu.

### Linki do artykułów

Każdy artykuł będzie zawierał zestaw linków do innych artykułów z tej serii.

* [Czym jest „token TeX-a”?](/latex/pl/artykuly-szczegolowe/53-what-is-a-tex-token.md)
* [Czym jest „lista tokenów TeX-a”?](/latex/pl/artykuly-szczegolowe/54-what-is-a-tex-token-list.md)

## Tło tej serii artykułów

Motywacja do napisania tej serii artykułów pojawiła się podczas czytania materiałów o TeX-ie, które wyjaśniały wiele działań TeX-a poprzez pojęcie „tokenów” wraz z „procesem tokenizacji” TeX-a, „listami tokenów” i pokrewnymi pojęciami, takimi jak „rozwijanie makr” oraz „rozwijalne polecenia”. Za każdym razem, gdy natrafiałem na wyjaśnienia związane z TeX-em sformułowane w kategoriach „tokenów TeX-a”, wciąż wracało do mnie to samo pytanie: Czym dokładnie, *to* token TeX-a? Musiałem się tego dowiedzieć.

Zakres i treść pierwszego artykułu, [Czym jest „token TeX-a”?](/latex/pl/artykuly-szczegolowe/53-what-is-a-tex-token.md), jest z natury rzeczy dość „bliskie sprzętowi”, jak powiedzieliby programiści, i nie ma wątpliwości, że „tokeny TeX-a” można by uznać za dość ezoteryczny temat do pisania: więc po co się tym zajmować? Ostatecznie przyjmuje się pewien punkt widzenia — a może skok wiary — że inni mogli również zastanawiać się nad tym samym tematem i że jest miejsce na jeden lub dwa artykuły, aby wypełnić pewne luki. Moim celem jest dostarczenie użytecznych wyjaśnień wprowadzających, które mogą uzupełnić inne materiały, które być może czytasz, i miejmy nadzieję, pomóc lepiej zrozumieć niektóre kluczowe pojęcia, które pojawiają się, gdy uczysz się TeX-a i zgłębiasz makra oraz programowanie.

Oczywiście, w ramach artykułów blogowych możemy tylko pobieżnie musnąć temat — po prostu nie jest praktyczne próbować wyjaśnić wszystkich istotnych zagadnień ani zapuszczać się w najmętniejsze wody. Z konieczności pominę sporo szczegółów i będę poruszać się po cienkiej granicy między nadmiernym uproszczeniem a doprowadzaniem analogii do punktu krytycznego.

„Pisz artykuły, które sam chciałbyś przeczytać” to użyteczna wskazówka, którą bardzo starałem się stosować, pisząc tę serię.

## Skoro już zadałem pytanie, to co teraz?

Bezpośrednie wyzwanie było jasne: jak dowiedzieć się czegoś o tokenach TeX-a, skoro takie szczegóły (dotyczące tokenów, tokenizacji itd.) są ukryte głęboko w kodzie źródłowym silników TeX-a — tak naprawdę nie powinno się tym przejmować, chyba że oczywiście naprawdę interesują nas te szczegóły.

Jednym ze sposobów zgłębiania odpowiedzi na te pytania jest próba przeczytania oryginalnego kodu źródłowego TeX-a w [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)— poprzez uruchomienie [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) aby wyodrębnić dokumentację TeX-a — albo kupując egzemplarz książki [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Kupiłem egzemplarz książki drukowanej! Z pewnością niezwykle pomocne jest to, że kod źródłowy TeX-a został opublikowany w formie książkowej, a w całym tekście znajdują się, oczywiście, liczne użyteczne wyjaśnienia. Jednak TeX Knutha jest napisany w Pascalu i naturalnie kod źródłowy w Pascalu jest opisany zgodnie z metodologią literate programming Knutha — prezentując kod w małych, łatwych do przyswojenia fragmentach. Łatwo docenić, jak podejście Knutha do dokumentacji naprawdę pomaga w przypadku tak złożonego oprogramowania jak TeX, ale lektura książki wymaga też dość dużo odsyłania się między stronami i przeskakiwania po nich.

Choć pomocna, sama książka nie była dla mnie dość wystarczająca, aby lepiej zrozumieć, co dzieje się, gdy TeX tworzy „tokeny” — temat, który szczególnie mnie interesował. Jest tylko jeden sposób, aby naprawdę się tego dowiedzieć: zbudować program TeX, uruchomić go na małym pliku TeX-a i dosłownie obserwować, jak kod wykonuje się, gdy TeX skanuje i odczytuje dane wejściowe. Szczegóły budowania TeX-a z kodu źródłowego są dość ezoteryczne — polegają na konwersji Pascala do C — ale w następnej sekcji znajduje się krótki opis oraz link do osobnego wpisu na blogu, który omawia to szerzej.

W przeciwieństwie do XeTeX-a i LuaTeX-a — które mogą przetwarzać tekst w formacie UTF-8 i obsługują kodowanie Unicode — TeX Knutha jest silnikiem 8-bitowym, co oznacza, że zakłada, iż znaki wejściowe mieszczą się w zakresie od 0 do 255. Choć jest to istotna różnica, nie *istotnie* wpływa na naszą dyskusję o tokenach TeX-a, ponieważ omawiamy zagadnienia i zasady wspólne dla wszystkich silników TeX-a: są one bowiem samym sercem tego oprogramowania.

## Jak można badać tokeny TeX-a?

Rozplątywanie drogi od tekstu wejściowego do tokenów TeX-a było dla mnie dość długą podróżą — muszę przyznać, że różne poziomy dezorientacji były po drodze moimi niemal stałymi towarzyszami: TeX to tak złożony kawałek oprogramowania.

Przez kilka lat (od około 2009 roku) regularnie kompilowałem najnowszą wersję LuaTeX-a z jego kodu źródłowego — proces to całkiem prosty, dzięki absolutnie znakomitemu sposobowi dystrybucji kodu źródłowego LuaTeX-a. Na podstawie tego doświadczenia zainteresowałem się lepszym zrozumieniem, jak zbudować oryginalny TeX Knutha z jego kodu źródłowego — *bardzo* inną propozycję, ponieważ TeX jest napisany z wykorzystaniem metodologii literate programming Knutha. To osobiste zbudowanie TeX-a, na Windowsie, ale przy użyciu narzędzi i kompilatorów open source, zostało przeprowadzone poza dystrybucją TeX Live i stanowi samodzielny projekt. Wymagało też zbudowania łańcucha narzędzi potrzebnych do przekształcenia `tex.web` w program C, który można było skompilować, a następnie uruchomić w debuggerze, aby zobaczyć, co TeX faktycznie robi podczas przetwarzania znaków wejściowych.

Zamiast pdfTeX-a, XeTeX-a lub LuaTeX-a użyto oryginalnego TeX-a Knutha, ponieważ potrzebowałem wersji TeX-a, która była najbliższa drukowanemu kodowi źródłowemu w książce TeX: The Program. Książka ta została po raz pierwszy opublikowana w 1986 roku i choć od tamtej pory TeX przeszedł pewne aktualizacje, najnowsza wersja TeX-a (3.14159265, wydana w styczniu 2014) jest z pewnością wystarczająco bliska kodowi źródłowemu zawartemu w książce.

Odzwierciedlając metodologię literate programming Knutha, kod źródłowy TeX-a jest rozpowszechniany w formacie tekstowym zwanym WEB: mieszance dokumentacji TeX-a i kodu źródłowego Pascala. Podstawowa idea polega na tym, że używa się dwóch narzędzi o nazwach TANGLE i WEAVE, które przetwarzają pliki WEB, aby wyodrębnić albo dokumentację TeX-a, albo kod źródłowy Pascala:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) wyodrębnia kod źródłowy Pascala z pliku WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) wyodrębnia dokumentację TeX-a z pliku WEB

Jednak zanim wyodrębnisz kod źródłowy Pascala, musisz wstępnie przetworzyć plik Knutha `tex.web` tak, aby zastosować szereg zmian umożliwiających konwersję kodu Pascala TeX-a do kodu C przy użyciu procesu zwanego Web2C. Ten etap wstępnego przetwarzania określa się jako *stosowanie plików zmian*.

Oryginalny plik kodu Knutha (tex.web) nie może być bezpośrednio w żaden sposób modyfikowany; zamiast tego wprowadza się zmiany przy użyciu tak zwanych plików zmian (z rozszerzeniem `.ch`), które zawierają zmiany, jakie chcesz zastosować do głównego `.web` pliku — takiego jak `tex.web`. Pliki zmian są łączone z oryginalnym kodem źródłowym Knutha — przy użyciu dodatkowego programu narzędziowego o nazwie TIE — aby utworzyć plik o nazwie, powiedzmy, `mytex.web` który następnie przetwarzasz za pomocą TANGLE, aby wyodrębnić kod Pascala do `mytex.pas`. Gdy już masz odpowiedni plik źródłowy Pascala, możesz zastosować końcowe kroki procesu Web2C, aby przekształcić go w plik źródłowy C, który można skompilować w wykonywalny program TeX. Jeśli chcesz przeczytać o dość zawiłym procesie konwersji Web2C, więcej szczegółów znajduje się na [osobistym blogu autora](http://www.readytext.co.uk/?p=2529).

Końcowym rezultatem jest program TeX, który można uruchomić za pomocą bezpłatnego i doskonałego [Eclipse IDE dla C/C++](http://www.eclipse.org/home/index.php) do przechodzenia krok po kroku przez kod źródłowy TeX-a (w C) i obserwowania, co się dzieje, gdy przeszukuje on dane wejściowe. Zdecydowanie nie jest to najbardziej zajmujące zajęcie, ponieważ kod C jest generowany maszynowo i miejscami niezwykle trudny do śledzenia (kod źródłowy TeX-a bardzo hojnie korzysta z instrukcji GOTO i zmiennych globalnych). Książka TeX: The Program nadal jest bezcenna jako pomoc w poruszaniu się po kodzie źródłowym C, mimo że zawiera kod źródłowy TeX-a w pięknie składanym kodzie Pascala.

Na zakończenie dyskusji poniżej znajduje się przykładowy zrzut ekranu pokazujący TeX-a uruchomionego za pośrednictwem Eclipse IDE, z wykonaniem wstrzymanym na funkcji `getnext()`— która leży u podstaw procesów generowania tokenów w TeX-u.

![Zrzut ekranu pokazujący uruchamianie TeX-a za pośrednictwem Eclipse IDE](/files/934bbff1b87058f77ae62f00e0189134d74c6b7c)

Przechodzenie krok po kroku przez kod źródłowy C TeX-a przy użyciu otwartego środowiska Eclipse IDE dla C/C++.

## Wnioski i podziękowanie

Pisanie pierwszego artykułu i zbieranie pomysłów na przyszłe wpisy na blogu w tej serii z pewnością zajęło sporo czasu. Jestem ogromnie wdzięczny Johnowi Hammersleyowi i Mary Anne Baynes z Overleaf za wsparcie dla tego pomysłu na serię oraz za umożliwienie mi poświęcenia czasu potrzebnego na dodatkowe badania. Mam nadzieję, że ta seria artykułów skutecznie identyfikuje i porusza zagadnienia będące przedmiotem wspólnej troski i okaże się wartościowa dla tych, którzy ją przeczytają.


---

# 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/pl/artykuly-szczegolowe/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.
