> 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/ru/podrobnye-stati/03-a-six-part-article-series-on-expandafter-tex-tokens-and-expansion.md).

# Серия из шести статей о \\\expandafter, токенах TeX и расширении

## Обзор

Примитив TeX `\expandafter` — это универсальная команда, используемая программистами LaTeX/TeX для создания сложных макросов — таких как команды (макросы), предоставляемые пакетами LaTeX. На первый взгляд, `\expandafter` её просто использовать, но эта маска простоты быстро спадает, когда вы сталкиваетесь с более сложными конструкциями, такими как несколько последовательных `\expandafter` команд, используемых для всевозможных «жонглирований токенами» `...\expandafter\expandafter\expandafter...`.

У этой серии статей амбициозная цель: объяснить *как* окружения `\expandafter` как на самом деле работают команда и расширение TeX — от базовых принципов до рассмотрения процессов, происходящих глубоко внутри программного движка TeX. Читатели могут сразу перейти к [статьям](#accessing-articles-the-navigation-bar) или прочитать [введении](#introduction-and-who-is-this-series-for) и причину, а также обоснование этой серии.

## Доступ к статьям: панель навигации

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

[Часть 1](/latex/ru/podrobnye-stati/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Часть 2](/latex/ru/podrobnye-stati/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Часть 3](/latex/ru/podrobnye-stati/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Часть 4](/latex/ru/podrobnye-stati/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Часть 5](/latex/ru/podrobnye-stati/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Часть 6](/latex/ru/podrobnye-stati/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

Вот ссылки на 6 статей серии:

1. [Введение в токены TeX](/latex/ru/podrobnye-stati/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md)
2. [Смысл расширения](/latex/ru/podrobnye-stati/22-how-does-expandafter-work-the-meaning-of-expansion.md)
3. [TeX использует временные списки токенов](/latex/ru/podrobnye-stati/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md)
4. [От базовых принципов к изучению исходного кода TeX](/latex/ru/podrobnye-stati/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md)
5. [Подробное исследование макроса](/latex/ru/podrobnye-stati/17-how-does-expandafter-work-a-detailed-macro-case-study.md)
6. [Подробное изучение последовательных `\expandafter` команды](/latex/ru/podrobnye-stati/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Введение и для кого предназначена эта серия?

### \expandafter: основные принципы работы

Назначение \expandafter — принудительно вызвать преждевременное расширение токена во входных данных: если во входных данных есть два последовательных токена, $$\mathrm{T\_1}$$ и $$\mathrm{T\_2}$$, `\expandafter` сохранит токен $$\mathrm{T\_1}$$, расширит токен $$\mathrm{T\_2}$$ и поместит токен $$\mathrm{T\_1}$$ обратно перед расширением $$\mathrm{T\_2}$$:

$$\verb\*\expandafter\*\ \mathrm{T\_1}\mathrm{T\_2} \rightarrow \mathrm{T\_1}\text{\<expansion of }\mathrm{T\_2}\text{>}$$

Следуя стандартному описанию `\expandafter`поведения мы отметили, что она «сохраняет токен $$\mathrm{T\_1}$$», принудительно вызывает «расширение» токена $$\mathrm{T\_2}$$ (до того, как TeX обычно сделал бы это), а затем помещает токен $$\mathrm{T\_1}$$ «обратно во входные данные» для повторного чтения TeX. Автор этой статьи помнит, что был озадачен некоторыми аспектами `\expandafter`поведения «жонглирования токенами»; в частности:

* Что значит «сохранить токен» или «поместить токен обратно во входные данные» — куда «уходят» эти сохранённые токены и как TeX перечитывает их?
* Как «выглядит» расширение или что оно на самом деле означает?
* Как TeX обрабатывает несколько последовательных `\expandafter` команд — как это *на самом деле* работает?

### Цели серии статей

Эта серия стремится ответить на поставленные выше вопросы, документируя результаты исследования внутреннего устройства TeX. Overleaf создал настроенную версию одного из движков TeX и использовал [Eclipse IDE](https://www.eclipse.org/ide/) её, чтобы наблюдать за работой исходного кода TeX во время обработки `.tex` файла, содержащего примеры использования `\expandafter`.

Мы поделимся результатами этого исследования, чтобы рассмотреть:

* истинную природу/значение токенов TeX;
* создание/использование TeX временных списков токенов;
* что на самом деле означает «расширение».

Исследуя эти темы, мы соберём общую картину, чтобы объяснить *как* `\expandafter` выполняет своё поведение «жонглирования токенами». Эта серия статей написана для всех, кто хочет получить представление об этих темах: глубже заглянуть внутрь самого TeX, рассматривая те части его внутренней работы, которые позволяют `\expandafter` ему творить своё волшебство.

Писать статьи о TeX и связанных с ним понятиях/принципах непросто, потому что TeX — чрезвычайно сложное программное обеспечение: его вёрстка исходного кода занимает многие сотни страниц. Например, см. этот [проект Overleaf](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) который по умолчанию вёрстает исходный код $$\mathrm{\varepsilon}\text{-}\mathrm{\TeX}$$: вёрстанный PDF-файл содержит более 600 страниц.

Внутри TeX представляет собой сложную сеть взаимосвязанных действий и процессов, что создаёт трудности при попытке обсуждать отдельные аспекты его поведения: выделяя конкретный «компонент», такой как `\expandafter`, и пытаясь объяснить его без постоянных ссылок на другие аспекты программного обеспечения TeX. По самой своей природе, `\expandafter` команда задействует процесс *расширения*— процесс, который для многих из нас является расплывчатой и довольно трудной для полного понимания концепцией. Однако расширение — это по-настоящему фундаментальный аспект поведения TeX, пронизывающий внутреннее устройство TeX и происходящий глубоко внутри самого программного обеспечения TeX. В этой серии статей мы рассмотрим истинный смысл расширения, начав со сбора набора связанных принципов и поведения, достаточного для формирования базового понимания расширения. Опираясь на эти основы, мы завершим, совершив «глубокое погружение» внутрь самого TeX, изучая реальный исходный код, который реализует механизм расширения TeX.

## В заключение

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

Счастливого $$\mathrm{\TeX}\text{ing!}$$, от Грэма Дугласа и команды Overleaf.


---

# 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/ru/podrobnye-stati/03-a-six-part-article-series-on-expandafter-tex-tokens-and-expansion.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.
