> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/01-a-six-part-series-how-do-tex-macros-actually-work.md).

# Серия из шести частей: как на самом деле работают макросы TeX?

## Об этой серии

Цель этой серии статей амбициозна: шаг за шагом объяснить, *как* как на самом деле работают макросы TeX, такие как команды LaTeX, — исследуя процессы, происходящие внутри движка TeX. Она пытается рассказать историю обработки TeX:

* чтение входных символов и использование кодов категорий;
* появление символьных и командных токенов — и формулы, которые использует TeX;
* как TeX распознаёт, а затем обрабатывает команды TeX;
* внутренние детали хранения определений макросов и аргументов макросов в виде списков токенов — с использованием графики, созданной на основе внутренних данных TeX;
* и завершается исследованием того, что означает расширение макросов *на самом деле* — используя реальные данные изнутри движка TeX.

Однако, поскольку движки TeX — это столь сложные программы, мы не можем надеяться охватить всё, но постарались затронуть самые важные, основные особенности возможностей TeX по обработке макросов.

#### Панель навигации

Перед текстом и после текста каждой статьи есть следующая панель навигации, чтобы вы могли быстро перейти к другой статье серии:

[Часть 1](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_1?preview=true) [Часть 2](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_2?preview=true) [Часть 3](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_3?preview=true) [Часть 4](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_4?preview=true) [Часть 5](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_5?preview=true) [Часть 6](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_6?preview=true)

### Часть 1: Коды категорий

Эта статья рассматривает логику, лежащую в основе понятия кодов категорий в TeX: что это такое и как TeX использует их, чтобы фильтровать входные данные в содержимое для набора и команды для выполнения.

### Часть 2: Чтение ввода глазами TeX

С помощью ряда графиков мы используем проверенную временем аналогию с тем, что у TeX есть «глаза», которыми он читает (сканирует) свой ввод. Мы исследуем примеры использования TeX кодов категорий для создания символьных токенов и то, как TeX распознаёт и обрабатывает команды, используя код категории 0 («символ экранирования»).

### Часть 3: От входного текста к командам

В этой статье подробно рассматривается, как TeX распознаёт и обрабатывает команды, обнаруженные во входных данных. Мы исследуем, как TeX хранит и извлекает информацию о командах: коды команд, модификаторы команд, а также рассматриваем несколько внутренних переменных, которые TeX использует для хранения информации об объектах, считанных из входных данных. Часть статьи содержит довольно низкоуровневый материал, который можно пропустить при первом чтении.

### Часть 4: Структура макроса

Затем мы вводим и используем следующую «схему» для описания структуры макросов:

```
<примитив макроса TeX><имя макроса><текст параметров>{<текст замены>}
```

Затем мы исследуем ряд примеров, чтобы показать роль и назначение `<текст параметров>` макроса как «шаблона токенов», который может быть построен с использованием токенов, выступающих в роли *разделители*.

### Часть 5: Списки токенов и внутреннее хранение макросов в TeX

В этой статье подробно исследуется, как TeX использует списки токенов для хранения определений макросов. С помощью обширных диаграмм, созданных с использованием специально модифицированной версии TeX, мы исследуем специализированные токены, которые TeX использует для распознавания и обработки аргументов макросов, предоставленных пользователем.

### Часть 6: Расширение и обработка макросов

В части 6 мы используем подробную графику, чтобы объяснить и исследовать точное значение расширения макросов и последствия токенизации аргументов макросов в TeX перед их передачей в .

## Краткое замечание: используем «TeX», а не LaTeX

Как обсуждалось в статье [Что в имени: путеводитель по многим разновидностям TeX](/latex/ru/podrobnye-stati/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) для обозначения/описания TeX, LaTeX и их производных используется широкий спектр терминов. Поэтому стоит кратко прояснить, как мы используем/понимаем «TeX» в контексте этой серии.

«TeX» — что несколько сбивает с толку — это и название исполняемой программы, и название языка для набора текста. Чтобы различать эти два значения, используется термин *движком TeX* для различения исполняемой программы TeX и языка для набора текста. Некоторые конкретные данные, информация и детали, используемые в этой серии, получены в результате подробного изучения исходного кода оригинального ПО TeX Дональда Кнута, но описываемые принципы общи для всех движков TeX. Поэтому на протяжении всего обсуждения под «TeX» следует понимать один из исполняемых движков TeX — например, оригинальный TeX Кнута, pdfTeX, XeTeX или LuaTeX.

В статьях мы используем примитивную команду TeX `\def` для определения примеров наших макросов: мы не используем команду LaTeX `\newcommand` которая почти наверняка более знакома большинству пользователей Overleaf. На это есть очень веская причина: наша цель — понять фундаментальные принципы, лежащие в основе поведения макросов TeX, но для этого нам нужно использовать основные команды (примитивы), встроенные в программное обеспечение TeX. Команды LaTeX, такие как `\newcommand`, сами являются макросами: командами со специфическим запрограммированным поведением и которые, в конечном счёте, построены из слоёв более низкоуровневых примитивных команд TeX. Чтобы лучше понять фундаментальное поведение TeX, мы должны использовать примитивы TeX, а не макросы LaTeX.

## Примеры и графика

Вместо того чтобы полагаться только на набор примеров макросов, предназначенных для демонстрации различных особенностей, крайних случаев и поведения TeX, мы также используем обширный набор графики, чтобы заглянуть внутрь самого TeX и увидеть *как* и *почему* почему его обработка макросов работает именно так. Многие из графиков (диаграммы списков токенов/узлов) были подготовлены с использованием специально модифицированной версии оригинального TeX Кнута.

Overleaf адаптировал TeX Кнута, добавив код (написанный на C), который «встраивается» в обработку макросов TeX и исследует данные и структуры данных, которые обычно недоступны пользователям. Каждый раз, когда вызывается макрос, модифицированный движок TeX создаёт дополнительные выходные файлы, содержащие данные в формате, который можно обработать с помощью [Graphviz](https://www.graphviz.org/), программы с открытым исходным кодом для визуализации графов. Итогом являются графики (диаграммы списков узлов), которые точно показывают, как TeX хранит определение макроса, вместе с графическим представлением любых аргументов, предоставленных пользователем при вызове макроса.

По необходимости цели этой серии требуют обсуждения широкого круга тем, многие из которых довольно низкоуровневые и, поначалу, могут показаться очень далекими от задачи набора ваших документов. Надеемся, что после более глубокого погружения у вас появится фундамент для формирования лучшего понимания, которое в итоге сэкономит вам много времени и, возможно, уменьшит уровень разочарования. Мы также надеемся, что специально создаваемая графика, сопровождающая эту серию, также даст уникально ценное представление, которое поможет и поддержит читателей в их стремлении лучше понять макросы TeX.

## Настраиваемая версия TeX от Overleaf

Видео даёт краткую демонстрацию изменённой версии TeX от Overleaf, адаптированной для создания диаграмм узлов Graphviz (`.gv` файлов) — никакие другие аспекты поведения TeX этими изменениями не затронуты. Файлы `.gv` содержат представления списков токенов TeX, используемых для хранения определений макросов и аргументов макросов. Визуализация Graphviz экспортируется в SVG, который затем импортируется в [Inkscape](https://inkscape.org/) для дальнейшей разметки перед включением графики в статью.

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/40EAwKxZnNwgxwe9SpAwNY/5bce5de21509f3324bc50527ec6815e7/texdemo.mp4>" %}


---

# 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://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/01-a-six-part-series-how-do-tex-macros-actually-work.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.
