> 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/wiecej-tematow/20-how-tex-macros-actually-work-part-2.md).

# Jak naprawdę działają makra TeX-a: Część 2

[Część 1](/latex/pl/wiecej-tematow/19-how-tex-macros-actually-work-part-1.md) [Część 2](/latex/pl/wiecej-tematow/20-how-tex-macros-actually-work-part-2.md) [Część 3](/latex/pl/wiecej-tematow/21-how-tex-macros-actually-work-part-3.md) [Część 4](/latex/pl/wiecej-tematow/22-how-tex-macros-actually-work-part-4.md) [Część 5](/latex/pl/wiecej-tematow/23-how-tex-macros-actually-work-part-5.md) [Część 6](/latex/pl/wiecej-tematow/24-how-tex-macros-actually-work-part-6.md)

## Wprowadzenie: opowieść w obrazach

Jak wspomniano w Części 1, TeX musi „odczytać” każdy znak w Twoim `.tex` pliku, a proces odczytywania jest trafniej określany jako *skanowanie*. Tradycyjnie przetwarzanie wejścia przez TeX-a (skanowanie) porównuje się do tego, że TeX ma „oczy”, dzięki którym obserwuje dane wejściowe, więc w poniższych grafikach przyjmiemy tę sprawdzoną analogię.

### Grafika 1: Oczy są gotowe

Zakładamy, że TeX otrzymał pewne dane wejściowe z `.tex` pliku i zaraz przetworzy nasz ciąg znaków `Witaj świecie \jobname` zawarty w akapicie tekstu. Sprawdzi kolejno każdy znak i zbada jego kod kategorii.

![Oczy TeX-a gotowe do skanowania wiersza tekstu](/files/cdb409a95a3fc9ab8cbb43de09c09b935bec268e)

### Grafika 2: Przetwarzanie kodów kategorii

Na następnej grafice widzimy w zarysie (z dodatkowymi szczegółami poniżej), jak TeX reaguje na kilka różnych kodów kategorii. Zauważ, że istnieje łącznie 16 kodów kategorii, ale dla uproszczenia pokazujemy użycie tylko trzech: 11, 10 i 0. Inne kody znaków stają się ważne podczas procesów składu TeX-a, takich jak tworzenie tabel, skład matematyki i rozpoznawanie parametrów makr.

![TeX reagujący na kilka różnych kodów kategorii](/files/69c005c751a8ac20dba6c17d205d32d550255116)

#### Uwagi do grafiki 2

Tutaj rozpatrujemy TeX-a podczas odczytywania (skanowania) znaków stanowiących część akapitu tekstu. TeX bada każdy znak, sprawdza jego kod kategorii i podejmuje odpowiednie działanie na podstawie kodu kategorii oraz „trybu” TeX-a (stanu wynikającego z tego, co aktualnie robi).

* **(zielone oczy)** TeX zauważy, że każdy z tych znaków ma kod kategorii 11 („litera”) i przekaże te znaki do składu jako część budowanego akapitu. Jednak TeX nie przekazuje (nie używa) samego kodu znaku, lecz zamiast tego używa pary liczb (kod znaku, kod kategorii), aby obliczyć złożoną wartość całkowitą zwaną *tokenem znaku* (zobacz niżej). Gdy taki token znaku zostanie utworzony, trafia do wewnętrznych procesów/algorytmów składu TeX-a.
* **(niebieskie oczy)** TeX widzi znak spacji (ASCII 32) z kodem kategorii 10 („odstępy”) — zauważ, że, jak wspomniano, całkiem możliwe jest, aby kod kategorii spacji (ASCII 32) lub dowolnego znaku został zmieniony na inną wartość jeszcze przed jego odczytaniem przez TeX-a.

To, jak TeX faktycznie przetwarza znaki z kodem kategorii 10 („odstępy”), zależy od tego, kiedy/gdzie TeX je widzi — od aktualnego „trybu” TeX-a. Na przykład bywają chwile, gdy TeX po prostu je pomija. Tutaj TeX będzie wiedział, że wykrył znak z kodem kategorii 10 (którym akurat jest spacja, ASCII 32) podczas przetwarzania tekstu akapitu, więc ostatecznie przekształci go w tzw. klej międzywyrazowy: rodzaj elastycznej spacji, która może się rozciągać lub kurczyć.

* **(czerwone oczy)** Tutaj TeX zaobserwował znak, który ma bardzo ważny kod kategorii: 0 (znak ucieczki).

Znak ucieczki —*dowolny* znak z kodem kategorii 0 — nakazuje TeX-owi przełączyć się w specjalny tryb odczytu i uważnie skanować (odczytywać) kolejne znaki, ponieważ identyfikują one nazwę *polecenie*, a nie tekst przeznaczony do składu. W literaturze o TeX-ie termin „polecenie” bywa również określany jako *sekwencji kontrolnej*. Po zobaczeniu znaku ucieczki TeX sprawdza kod kategorii znaku, który następuje *bezpośrednio po nim*; dzieje się tak, ponieważ TeX rozpoznaje dwa typy poleceń:

* polecenia wieloliterowe nazywane *słów kontrolnych*: znak następujący bezpośrednio po znaku ucieczki ma kod kategorii 11. Wszystkie kolejne znaki mające kod kategorii 11 są uznawane za część nazwy polecenia. TeX przestanie szukać znaków tworzących część nazwy polecenia, gdy wykryje dowolny znak, który *nie* nie ma kodu kategorii 11 — na przykład znak spacji z kodem kategorii 10.
* polecenia jednoliterowe nazywane *symbolami sterującymi*: znak następujący bezpośrednio po znaku ucieczki *nie* ma kod kategorii 11.

Można traktować znak ucieczki jako wyzwalacz, który powoduje, że TeX „wychodzi” ze swojego zwykłego zachowania skanowania i przyjmuje inne podejście do kilku następnych znaków — wskazuje na to czerwone przerywane pole, pokazujące, że TeX będzie **Rozpocznij skanowanie w poszukiwaniu polecenia**.

### Grafika 3: Przetwarzanie kodu kategorii 11 („litery”)

W Części 1 tej serii zauważyliśmy, że każdy znak odczytywany przez TeX z danych wejściowych jest opisywany przez dwie liczby całkowite:

* kod znaku: liczba całkowita definiująca numeryczną reprezentację znaku;
* kod kategorii: wartość od 0 do 15, którą TeX przypisuje każdemu znakowi mogącemu pojawić się w danych wejściowych.

TeX używa tych dwóch informacji na następnym etapie przetwarzania: podczas tworzenia tokenów znaków.

Grafika 3 rozwija Grafikę 2, aby pokazać, co TeX robi z tymi znakami wejściowymi mającymi kod kategorii 11 (litera): tworzy *tokeny znaków*— wartości całkowite, które TeX oblicza, łącząc kod kategorii tego znaku i kod znaku.

**Uwaga**: W tym przykładzie omawiamy tylko znaki z kodem kategorii 11, ale należy pamiętać, że TeX tworzy również wartości tokenów dla znaków wejściowych mających inne kody kategorii — z wyjątkiem kodu kategorii 0, który nigdy nie jest zamieniany w token: znak ucieczki po prostu działa jak „przełącznik” uruchamiający specjalne przetwarzanie.

![TeX przetwarzający znaki z kodem kategorii 11](/files/06fefc0a2fb212a30226dd2f9e1c6b94e3e97a86)

Grafika 5 poniżej pokaże, co TeX robi, gdy zobaczy znak z kodem kategorii 0 (znak ucieczki).

#### Uwagi do Grafiki 3: Przetwarzanie kodu kategorii 11 („litera”)

Tutaj skupimy się na **zielony** działaniu: co się dzieje, gdy TeX widzi znaki mające kod kategorii 11 („litera”). Po tym, jak TeX odczyta znak i określi jego kod kategorii (tutaj jest to 11), następną rzeczą, którą TeX robi, jest *połączenie* tej pary liczb w jedną liczbę całkowitą zwaną tokenem znaku: te tokeny (liczby całkowite) są przekazywane do następnego etapu wewnętrznych algorytmów/przetwarzania składu TeX-a. Jak wspomniano, TeX tworzy również tokeny znaków dla znaków z innymi kodami kategorii (tj. nie 11), tutaj używamy kodu kategorii 11 jedynie jako przykładu.

Każdy token znaku (liczba całkowita) trwale wiąże znak wejściowy z kodem kategorii przypisanym do tego znaku **w momencie, gdy został on zeskanowany (odczytany) przez TeX**: ten fakt ma kluczowe znaczenie dla zrozumienia zachowania makr TeX/LaTeX. Oczywiście podczas dalszego przetwarzania TeX czasami będzie musiał rozbić token znaku, aby określić, która para (kod znaku, kod kategorii) została użyta do skonstruowania tego tokenu. Jednak gdy znak zostanie odczytany w procesie wejścia (skanowania) TeX-a, wartość tokenu znaku obliczona przez TeX powoduje, że znak ten jest *trwale* powiązany z przypisanym mu kodem kategorii *w momencie jego odczytania*.

**Obliczanie tokenów znaków**

Silniki TeX-a używają prostego wzoru do obliczania tokenu znaku, $$T$$, dla znaku z kodem kategorii $$C$$ oraz kodem znaku $$A$$:

$$T = \text{constant} \times C + A$$

Silniki 8-bitowe, takie jak pdfTeX, używają:

$$T = 256\times C + A$$

Silniki obsługujące Unicode, takie jak XeTeX lub LuaTeX, muszą używać innego wzoru, ponieważ w Unicode kody znaków mogą być znacznie większe niż maksymalna wartość 255 w starszym 8-bitowym świecie kodowania ASCII. Na przykład XeTeX używa:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Po raz kolejny warto zauważyć, że znaki z kodem kategorii 0 nie są zamieniane w tokeny znaków: kod kategorii 0 zajmuje bardzo szczególne miejsce w filtrowaniu wejścia TeX-a i służy wyłącznie jako „przełącznik” wprowadzający TeX w specjalny tryb skanowania kilku następnych znaków. Zajmuje się tym Grafika 5.

### Grafika 4: Przetwarzanie kodu kategorii 10 („odstęp”)

Sposób, w jaki TeX obsługuje znaki z kodem kategorii 10 („odstęp”), zależy od tego, nad czym TeX aktualnie pracuje, gdy wykryje w danych wejściowych znak z kodem kategorii 10. W naszym przykładzie TeX wykonuje zwykłe przetwarzanie akapitu, a znak spacji z kodem kategorii 10 zostanie przekształcony w klej międzywyrazowy.

![TeX przetwarzający znaki z kodem kategorii 10](/files/a91abfd7d261bf890c34fa823f447fb06b910439)

Obsługa spacji przez TeX może wydawać się dość osobliwa, ale dobry przegląd można znaleźć w rozdziałach 1 i 2 [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) autorstwa Victora Eijkhouta — możesz [pobrać bezpłatną kopię PDF](https://bitbucket.org/VictorEijkhout/tex-by-topic) ze strony internetowej autora.

Na przykład, gdy TeX widzi znak o kodzie kategorii 10, bywają sytuacje, gdy TeX będzie:

* pomijać (ignorować) je wszystkie — np. gdy TeX jest w trybie pionowym;
* przekształcać wiele odstępów w jeden odstęp — pomijając dodatkowe spacje, na przykład podczas przetwarzania akapitu;
* wchłaniać je — np. wchłaniając pojedynczą spację po nazwie polecenia;

Zauważ też, że bywają sytuacje, gdy TeX również będzie *generować* spacje — poprzez zamianę znaków końca wiersza na spację. Zachowanie/obróbka znaków spacji (dowolnego znaku z kodem kategorii 10) jest jedną z „osobliwości” TeX-a: potrzeba czasu/praktyki, aby oswoić się z tym aspektem TeX-a.

### Grafika 5a: Przetwarzanie kodu kategorii 0 („znak ucieczki”)

Na tej grafice TeX przetworzył wszystkie znaki aż do `\` znaku, który ma kod kategorii 0: „znaku ucieczki” — użyjemy kolejnej serii grafik, aby pokazać, jak TeX przetwarza znak ucieczki i identyfikuje nazwę polecenia.

![TeX przetwarzający znaki z kodem kategorii 0](/files/9d953ed15f8abfbc5fccd46642623f7a6ca9cd09)

### Grafika 5b: Szukanie nazwy polecenia

Na tej grafice zaglądamy do sekcji w czerwonym przerywanym polu (**Rozpocznij skanowanie w poszukiwaniu polecenia**) aby zobaczyć, co TeX robi po zobaczeniu znaku ucieczki.

![TeX szukający nazwy polecenia](/files/7ce0cb9d3cf0690123017e6dae2103631058fae4)

**Uwagi do Grafiki 5b**

* Po rozpoznaniu znak ucieczki spełnił swoje zadanie: zadziałał jak przełącznik i nie bierze udziału w dalszym przetwarzaniu — a konkretnie jest **nie** zamieniany na token znaku.
* Dla wygody powtórzymy pewien wcześniej wspomniany szczegół. Po zobaczeniu znaku ucieczki TeX sprawdza kod kategorii znaku, który następuje *bezpośrednio po nim*; dzieje się tak, ponieważ TeX rozpoznaje dwa typy poleceń:
* * polecenia wieloliterowe nazywane *słów kontrolnych*: znak następujący bezpośrednio po znaku ucieczki ma kod kategorii 11. Wszystkie kolejne znaki mające kod kategorii 11 są uznawane za tworzące nazwę polecenia (*słowa sterującego*). TeX przestanie szukać znaków stanowiących część nazwy polecenia, gdy wykryje dowolny znak, który *nie* nie ma kodu kategorii 11 — na przykład znak spacji z kodem kategorii 10.
  * polecenia jednoliterowe nazywane *symbolami sterującymi*: znak następujący bezpośrednio po znaku ucieczki *nie* ma kod kategorii 11.
* W naszym przykładzie pierwszy znak po `\` jest `j` (kod kategorii 11), co mówi TeX-owi, aby szukał polecenia będącego (potencjalnie) wieloliterowym ciągiem znaków z kodem kategorii 11.
* TeX nadal sprawdza kolejne znaki mające kod kategorii 11. Gdy tylko wykryje znak z jakimkolwiek innym kodem kategorii, na przykład spację z kodem kategorii 10, TeX wie, że osiągnął koniec nazwy polecenia. Dla podkreślenia: tutaj to właśnie znak spacji (kod kategorii 10) „zakończył” polecenie, ale mógł to być dowolny znak, który **nie** ma kod kategorii 11.

## Część 3

W Części 3 kontynuujemy od Grafiki 5b, aby dokończyć tę część opowieści — jak TeX identyfikuje polecenie — i przejść do tego, co robi potem. Przyjrzymy się też dokładniej niektórym wewnętrznym aspektom przetwarzania TeX-a — część z nich można pominąć przy pierwszym czytaniu, chyba że naprawdę lubisz szczegóły.

[Część 1](/latex/pl/wiecej-tematow/19-how-tex-macros-actually-work-part-1.md) [Część 2](/latex/pl/wiecej-tematow/20-how-tex-macros-actually-work-part-2.md) [Część 3](/latex/pl/wiecej-tematow/21-how-tex-macros-actually-work-part-3.md) [Część 4](/latex/pl/wiecej-tematow/22-how-tex-macros-actually-work-part-4.md) [Część 5](/latex/pl/wiecej-tematow/23-how-tex-macros-actually-work-part-5.md) [Część 6](/latex/pl/wiecej-tematow/24-how-tex-macros-actually-work-part-6.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/pl/wiecej-tematow/20-how-tex-macros-actually-work-part-2.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.
