> 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/uk/dokladni-statti/53-what-is-a-tex-token.md).

# Що таке «TeX token»?

## Мотиви для серії про токени TeX і пов’язані поняття

У цій статті обговорюються мотиви та методологія, використані для створення серії статей про токени TeX і пов’язані поняття. [Нова серія статей: токени TeX і пов’язані поняття — але чому (і як)?](https://www.overleaf.com/blog/521-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how) Як зазначено в тій статті, у цій серії ми будуємо наші обговорення й пояснення на основі висновків, отриманих завдяки спеціально зібраній версії оригінальної програми TeX Кнута — використовуючи її для створення серії статей, що має на меті дати прості описи та легкі для сприйняття пояснення ключових понять TeX.

## Вступ: яка наша мета?

У цій статті ми точно з’ясуємо, що таке токен TeX, простеживши шлях обробки від символів у вхідному файлі до фактичного створення токенів TeX. На практиці це доволі складно, тож ми звели процес до його основних складників, прагнучи зробити його легким для стеження й розуміння, зберігши водночас технічну точність.

Ми почнемо з представлення кількох важливих внутрішніх понять TeX: *примітивів*, *коди команд* та *модифікатори команд*. Відтак ми використаємо дуже простий приклад макроса, щоб точно побачити, як TeX обробляє команду `\def` і токен, який TeX створює для представлення цієї команди.

На завершення ми коротко розглянемо, як TeX створює токени для представлення символів і як символу `\catcode` дійсно назавжди приєднується до символьного токена — про це часто згадують у книжках про TeX, але тут ми побачимо, як саме це відбувається.

Наведена нижче схема показує шлях, який ми підсумуємо — від вхідного тексту до токенів TeX:

![Шлях від вхідних даних TeX до токена TeX.](/files/bbcd0d73ccb669730135e1c1dd2ad163e0d1b135)

## Але спочатку: примітиви та коди команд

Кожен рушій TeX (TeX Кнута, pdfTeX, XeTeX, LuaTeX) розуміє низку вбудованих команд: так звані *примітивів*— фундаментальні команди-цеглинки, на яких ґрунтується програмованість TeX. Їх називають «примітивами», тому що, на відміну від макросів, визначених користувачем, вони не утворюються з інших команд і не можуть бути далі зведені до простіших інструкцій. У TeX Кнута є приблизно 320 примітивів — хоча слід зазначити, що інші рушії TeX, такі як pdfTeX, XeTeX і LuaTeX, додали нові команди до оригінальної програми Кнута і містять примітиви, яких немає в програмному забезпеченні TeX Кнута.

Внутрішньо TeX надає числовий *кодом команди* усім командам — незалежно від того, чи це макроси, визначені користувачем, чи вбудовані примітиви. Ці коди команд недоступні користувачеві TeX; вони просто є частиною внутрішньої механіки обробки TeX, але корисно знати про них для подальшого обговорення токенів TeX.

Групи команд із пов’язаною функціональністю мають спільний код команди. Наприклад, `\def`, `\gdef`, `\edef` та `\xdef` усі примітиви використовуються для визначення макросів і мають спільний код команди 97 (у TeX Кнута). Очевидно, ці 4 команди визначення макросів створюють макроси трохи різними способами; отже, під час обробки TeX потрібен спосіб розрізняти їх.

Сам по собі код команди (наприклад 97) не може підказати, яка саме команда створення макроса мається на увазі; тож, як і можна очікувати, кожній команді TeX призначається додаткова інформація, що називається її *модифікатор команди* (див. приклади нижче).

### Модифікатори команд: два типи

Модифікатори команд поділяються на дві категорії, які ми назвемо «Тип 1» і «Тип 2» — TeX не використовує таку термінологію, просто тут це зручно:

* **Тип 1**: Прості цілі числові значення, які TeX може, якщо потрібно, використовувати, щоб розрізняти команди, що мають спільний код команди.
* **Тип 2**: Ціле число, що є числовою адресою в пам’яті TeX і вказує TeX, куди потрібно звернутися, щоб знайти інформацію про цю команду. Наприклад, це стосується команд, визначених користувачем (макросів), де модифікатор команди підказує TeX, де в пам’яті зберігається визначення макроса.

#### Модифікатори команд типу 1 (приклад)

Як зазначалося, у TeX Кнута чотири примітивні команди для визначення макросів: `\def`, `\gdef`, `\edef`, `\xdef` усі мають код команди 97: їх розрізняють за модифікаторами команд, наведеними в таблиці нижче:

| Команда | Код\nкоманди | Модифікатор\nкоманди |
| ------- | ------------ | -------------------- |
| `\def`  | 97           | 0                    |
| `\gdef` | 97           | 1                    |
| `\edef` | 97           | 2                    |
| `\xdef` | 97           | 3                    |

Як другий приклад, Кнут вирішив реалізувати команди `\openout`, `\write`, `\closeout`, `\special`, `\immediate` та `\setlanguage` як «розширення» TeX — лише щоб показати, як можна додавати нові примітиви до TeX. У цьому випадку ці команди насправді не мають «схожої функціональності», окрім того, що Кнут вирішив об’єднати їх для пояснення того, як розширювати TeX. Ці 6 команд класифікуються як «розширення» і згруповані разом із значенням коду команди 59, але кожна має відповідний модифікатор команди, що відрізняє її від інших:

| Команда        | Код\nкоманди | Модифікатор\nкоманди |
| -------------- | ------------ | -------------------- |
| `\openout`     | 59           | 0                    |
| `\write`       | 59           | 1                    |
| `\closeout`    | 59           | 2                    |
| `\special`     | 59           | 3                    |
| `\immediate`   | 59           | 4                    |
| `\setlanguage` | 59           | 5                    |

#### Модифікатори команд типу 2 (коротке пояснення)

Хоча всі модифікатори команд є цілими числами, модифікатори типу 2 потребують трохи докладнішого пояснення. У TeX ці модифікатори називаються «вказівниками», тому що вони вказують на місце в пам’яті, де TeX може знайти додаткову інформацію для цієї команди. Це може звучати трохи нечітко, але спосіб, у який TeX використовує ці вказівники для пошуку інформації, досить різноманітний, і повніше пояснення відволікало б від основної мети цієї статті. Один приклад допоможе: макроси. Коли визначається команда-макрос, TeX потрібно десь у пам’яті зберегти текст заміни. Як ми побачимо нижче, макроси, визначені користувачем, мають коди команд від 111 до 114, а модифікатор команди є вказівником у пам’яті, що підказує TeX, де зберігається його текст заміни (визначення макроса).

### Коди команд: розширювані та нерозширювані

У вихідному коді TeX Кнута коди команд змінюються від 0 до 120 — зауважте, що деякі коди в цьому діапазоні призначені лише для спеціалізованого внутрішнього використання і не призначені для команд, доступних користувачеві. Варто зазначити, що інші рушії TeX, такі як pdfTeX, XeTeX і LuaTeX, додали нові команди до оригінального набору Кнута і містять більше примітивів та відповідних кодів команд; однак викладені тут принципи є базовими для всіх рушіїв на основі TeX, похідних від вихідного коду Кнута.

Набір кодів команд поділяється на дві основні групи:

* *нерозширювані команди*: мають коди команд менші або рівні 100;
* *розширювані команди*: мають коди команд більші за 100, до максимального значення 120. Діапазон від 101 до 120 включає макроси, визначені користувачем, а також команди на кшталт `\csname`, `\expandafter` та `\the`.

Нерозширювані команди зазвичай виконують присвоєння значення внутрішньому параметру або безпосередньо створюють матеріал, який можна набирати. Розширювані команди зазвичай «вставляють» потік токенів у поточний процес обробки TeX або змінюють порядок обробки токенів.

Як зазначалося вище, усім макросам (командам, визначеним користувачем) надаються коди команд від 111 до 114: різні значення відображають, чи був макрос визначений як `\long`, `\outer`, обидва варіанти або жоден із них. Ось приклад:

| Тип макроса       | Приклад                        | Коментар                  |
| ----------------- | ------------------------------ | ------------------------- |
| Не long, не outer | `\def\ohyeah{....}`            | `\ohyeah` код команди=111 |
| Long, не outer    | `\long\def\ohyeah{....}`       | `\ohyeah` код команди=112 |
| Не long, outer    | `\outer\def\ohyeah{....}`      | `\ohyeah` код команди=113 |
| Long outer        | `\long\outer\def\ohyeah{....}` | `\ohyeah` код команди=114 |

Нагадаємо про модифікатори команд: коли макрос визначається, TeX зберігає його визначення в певному місці пам’яті: це місце (вказівник) стане модифікатором команди для команди макроса, яка буде збережена з кодом команди від 111 до 114 залежно від того, як її було визначено. Фактичне ім’я, надане макросу, визначеному користувачем, не має особливого значення: після обробки вхідних даних усім їм буде призначено код команди в діапазоні 111–114 і, зрештою, усі команди, які TeX читає з ваших вхідних даних, чи то примітиви, чи макроси, визначені користувачем, зрештою перетворюються на числове представлення, яке називається *токен*.

## Шлях від вхідного тексту до токенів TeX

У цьому розділі ми використаємо дуже простий приклад макроса, щоб точно побачити, як TeX обробляє команду `\def` щоб створити токен, який представляє `\def` команду. Детальна обробка TeX може бути надзвичайно складною, тож ми не використовуємо параметри макросів або роздільники, бо це додало б складності й відвернуло б нас від нашого шляху.

Припустімо, що ваш вхідний файл TeX містить такий рядок:

```latex
\def\ohyeah{Overleaf — це круто!}
```

Коли TeX починає обробляти цей рядок вхідних даних, він перевіряє `\catcode` кожного символу й бачить, що перший символ — `\` (перший символ `\def`). Він виявляє (шукає це у внутрішній таблиці), що `\` має `\catcode` 0, що означає, що він позначає початок *керуючої послідовності*. Звісно, ви можете перевизначити будь-який символ так, щоб він мав `\catcode` 0, але ми припустимо, що використовуються звичайні визначення plain TeX або LaTeX.

Строго кажучи, термін *керуючої послідовності* має дві підкатегорії: *керівне слово* та *керівний символ*:

* *керівне слово*: послідовність символів із `\catcode` літерою (11);
* *керівний символ*: один символ, чий `\catcode` є *не* літера (11).

На цьому етапі `\` символ уже виконав свою роботу і більше не потрібний. Виявивши символ екранування, TeX починає читати всі наступні символи у вхідних даних, щоб виявити керівне слово або керівний символ.

Після початкового `\`, TeX одразу виявляє `d`: символ, чий `\catcode` дорівнює 11, що підказує TeX, що він знайшов першу літеру *керівне слово*. Він продовжує сканувати наступні символи, доки нарешті не виявляє символ, який *не* повідомляли, що версія 3 повільно `\catcode` літера (11). Усі наступні символи (після початкового `\`) з `\catcode` 11 (літера) вважаються такими, що утворюють ім’я керівного слова: тобто ім’я команди — можливо, макроса або примітива, але TeX поки що не знає, який це тип команди. На цьому етапі це просто рядок символів.

Отже, у нашому прикладі TeX спокійно сканує далі, перевіряючи кожен символ, доки не доходить до початкового `\` значення `\ohyeah` який також має `\catcode` 0. TeX розуміє, що просканував занадто далеко, і чемно повертає цей `\` назад у текстовий потік, щоб він став наступним символом, який буде побачено під час подальшого сканування тексту. На цьому етапі TeX ідентифікував рядок (`def`) який, як він знає, утворює текст керівного слова, що складається з трьох символів, кожен із `\catcode` 11 (`d`, `e` та `f`). Тепер TeX потрібно з’ясувати, що `def` означає: що йому робити? Як ви, мабуть, здогадалися, TeX потрібно знайти код команди та ідентифікатор команди для `def` щоб він міг зрозуміти, що робити з цією командою.

## Зводимо це до хеша

Виявивши керівне слово (`def`), перше, що робить TeX, — «перетворює» рядок символів (`def` у нашому прикладі) на ціле число за допомогою так званої хеш-функції. Нам не потрібно надто занурюватися в деталі, досить загального опису. По суті, TeX дивиться на кожен символ у щойно виявленому керівному слові й використовує значення ASCII-коду (або значення Unicode для XeTeX/LuaTeX) кожного символу, щоб обчислити число, яке називається хеш-значенням: це просто звичайне ціле число.

У межах цього процесу обчислення хеша TeX також перевірить, чи вже відомий йому рядок символів у щойно виявленому керівному слові. Текст усіх команд, зрозумілий для людини, чи то примітиви, чи макроси, визначені користувачем, зберігається у внутрішній області зберігання, яка називається *пулом рядків*. TeX має робити це, тому що йому може знадобитися вивести ім’я команди у вигляді, зрозумілому для людини, — наприклад, коли TeX потрібно повідомити про помилку й подати ім’я проблемної команди. Наприклад, наш макрос `\def\ohyeah{Overleaf — це круто!}` визначає нову команду під назвою `\ohyeah` і TeX (на пізнішому етапі) не лише має обчислити хеш-значення для `ohyeah` (*без* початкового `\` символу), але й зберегти текстовий рядок (людиночитний) на випадок, якщо його потрібно буде використати для повідомлення про помилку (або інших завдань).

Якщо вам потрібні докладніші відомості про процеси обробки рядків у TeX, я писав про це на своєму [особистому блозі](http://www.readytext.co.uk/?p=3590).

Підсумковий результат полягає в тому, що рядок символів, який представляє команду `def` перетворюється на числове значення 1218 (це фактичне значення, обчислене TeX). На цьому етапі окремі символи `d`, `e` та `f` вже не є частиною основної історії — їх уже прочитано з вхідних даних, і вони виконали свою роботу: відтепер усе стосується цілих чисел і *токени*— незабаром ми побачимо, що таке токен насправді! Внутрішньо TeX називає ці числа хеш-значень *поточною керуючою послідовністю* але у вихідному коді цей термін скорочено до змінної під назвою `curcs`. Вихідний код TeX рясніє дуже короткими, часто доволі криптичними іменами змінних.

Але що ж TeX *насправді робить* з цим щойно отриманим цілим значенням 1218? Як TeX дізнається, що початковий рядок `def`, тепер представлений числом 1218, насправді означає інструкцію визначити макрос? Відповідь така: TeX має своєрідну внутрішню «картотеку», де він зберігає поточний зміст і значення кожної команди, яку наразі знає, — чи то команда, визначена користувачем, чи вбудований примітив. Причина, з якої TeX вдався до перетворення `def` на хеш-значення 1218 (тепер збережене у змінній під назвою `curcs`) полягає в тому, щоб використовувати його для пошуку *форму* значення `def`. Звісно, TeX повторюватиме цю операцію обчислення хеша для всіх керівних слів, які він виявляє у вхідних даних, — хоча, звісно, різні керівні слова дають різні цілі значення від хеш-функції: у цьому й полягає весь задум.

Внутрішню «картотеку» TeX називають *таблицею еквівалентів* і це тема наступного розділу.

### Звернення до таблиці еквівалентів

Щоб підсумувати, подивімося, що ми вже з’ясували:

* `\` позначає початок керуючої послідовності (або *керівний символ* або *керівне слово*).
* Якщо перший символ після `\` має `\catcode` 11 (літера), то це початок *керівне слово*.
* Для *керівних слів* TeX сканує всі наступні вхідні символи, які мають `\catcode` 11, і припинить сканування, щойно знайде перший символ, який не *не* має `\catcode` 11.
* Рядок вхідних символів (після `\`), які мають `\catcode` 11, вважаються *керівне слово* введеним користувачем: командою, що просить TeX «щось зробити».
* Щоб розпочати процес «щось зробити», TeX перетворює рядок символів у керівному слові на ціле число. Для цього він використовує так звану хеш-функцію, яка видає ціле число.
* Це ціле число (обчислене хеш-значення) називається *поточною керуючою послідовністю*, але TeX дає йому коротшу назву `curcs`.
* У нашому прикладі керівне слово `def` перетворюється на значення 1218, яке зберігається у змінній під назвою `curcs`: тобто `curcs=1218`.

Тепер TeX потрібно з’ясувати, що щойно виявлене *поточною керуючою послідовністю* насправді означає — що TeX із ним робить?

#### Примітка про групування: потреба зберігати й відновлювати інформацію

Тут ми трохи відволічемося, щоб нагадати собі, що TeX здатний зберігати й відновлювати інформацію: тобто має певну вбудовану «пам’ять».

Кожен, хто написав хоча б найпростіший макрос, має знати про механізм групування TeX — наприклад, використовуючи `\def` для створення макросів усередині групи. Якщо не застосувати `\global` префікс до `\def`-створених макросів, визначених усередині групи, значення або зміст цього макроса зберігається лише в межах цієї групи (і тих, що нижче неї): його визначення втрачається, коли група завершується. Наприклад, якщо ви визначите простий макрос усередині групи, ось так:

```latex
{\def\foo{Привіт}}
```

і спробуєте використати `\foo` поза групою

```latex
{\def\foo{Привіт}}% \foo визначено всередині групи (зверніть увагу: без використання \global)
\foo %<--- більше не визначено, тепер невизначено
```

то отримаємо добре знайому помилку: `Невизначена керуюча послідовність`. `\foo` має значення лише всередині групи (та її підгруп), у якій було визначено. Крім того, коли ви перевизначаєте макрос усередині групи, нове значення може бути втрачено, коли група закінчується, а попереднє значення (яке існувало поза групою) відновлюється.

```latex
\def\foo{Бувай}
\foo\par% Виводить Бувай
{\def\foo{Привіт}% Перевизначено всередині групи:
{Всередині групи 2-го рівня: \foo\par}}% Використано всередині групи 2-го рівня: \foo виводить Привіт
Поза групою старе значення відновлено: \foo\par% Виводить Бувай
```

Мета цих простих прикладів — показати, що TeX має певний «механізм зберігання» або «пам’ять», яка зберігає/відновлює «значення» команд — і, звісно, він її має. Ми вже натякали на це в попередньому розділі: цей «механізм зберігання» або «картотека» — це велика внутрішня таблиця, яка називається *таблицею еквівалентів*. Саме там TeX зберігає поточний зміст або значення всіх команд, які він наразі знає, — вбудованих примітивів і макросів, визначених користувачем.

### Таблиця еквівалентів: за аналогією

Щоб пояснити таблицю еквівалентів, ми підемо шляхом аналогії. Ми й надалі використовуватимемо уявлення про картотеку з тисячами маленьких шухлядок, кожна з яких позначена унікальним цілим числом. На цьому етапі обробки TeX, по суті, каже:

«Гаразд, у мене є це ціле значення 1218, яке я щойно обчислив і зберіг у змінній під назвою `curcs`. Тепер мені потрібно з’ясувати, що воно означає: для цього я піду й подивлюся в шухляду № 1218 моєї картотеки, щоб побачити, що там написано.»

TeX використовує 1218, щоб знайти правильну шухляду, і там знаходить маленьку записку, яка містить три фрагменти інформації, чиї назви — це ті, що використовуються у вихідному коді TeX:

* **`eq_level:`** рівень групування, на якому було визначено цей запис (рівень 1 = визначено глобально). Вище ми бачили дію групування на практиці: саме в таблиці еквівалентів зберігається ця інформація про рівень групування;
* **`eq_type:`** код команди для цього запису;
* **`equiv:`** поточне «значення» цього запису — це може бути просте ціле число, наприклад згаданий вище модифікатор команди, або вказівник на область пам’яті; наприклад, місце в пам’яті для набору токенів, що представляють визначення макроса.

Отже, наше хеш-значення 1218 (збережене у змінній `curcs`) фактично було використано як *ключ* для доступу до шухляди, яка містить поточний зміст і значення команди, яку ми спочатку ввели як рядок літер `\def`.

У вихідному коді програми TeX `eq_type` для будь-якої команди зберігається у змінній під назвою `curcmd` а значення `equiv` зберігається у змінній під назвою `curchr`.

### Що говорить таблиця еквівалентів про def?

Як зазначалося, хеш-значення, обчислене для будь-якої команди, зберігається у змінній під назвою `curcs`; отже для `def` ми маємо `curcs=1218`. Переглянувши позицію 1218 у таблиці еквівалентів, TeX знайде таку інформацію:

* `curcmd`=97. Це код команди для `\def`;
* `curchr`=0. Це модифікатор команди для `\def`.

`\def` є примітивною (вбудованою) командою TeX, і якщо її ніде не перевизначено, третій і останній фрагмент інформації має бути `eq_level=1` що означає, що значення `\def` визначено глобально і не обмежено якимось нижчим рівнем групування. Внутрішньо значення `eq_level` прикріплене до команди, відіграє надзвичайно важливу роль у механізмі групування TeX, але далі ми цього розглядати не будемо.

Наведена нижче схема підсумовує пояснення, яке ми щойно розглянули:

![Шлях від вхідних даних TeX до токена TeX.](/files/bbcd0d73ccb669730135e1c1dd2ad163e0d1b135)

## Токени TeX для команд

Пройшовши крізь наведені вище пояснення, фактичне обчислення токенів TeX для керуючих послідовностей виявляється насправді дуже простим. TeX використовує значення `curcs` (1218) з хеш-функції, щоб створити просте ціле число, яке він називає *токен*. Обчислення для створення токена зі значення `curcs` така:

```c
curtok = 4095 + curcs
```

TeX зберігає значення поточного токена (щойно обчисленого) у змінній під назвою `curtok`.

Отже, підсумовуючи, токен TeX, що представляє `\def` команди такий `4095 + 1218 = 5313`. І це все щодо токенів TeX, які представляють послідовності команд: це просто ціле число, яке обчислюється як значення з хеш-таблиці плюс 4095.

## Токени TeX для символів

Коли TeX потрібно створити токен, що представляє символ, він використовує таке ж просте обчислення:

```c
curtok = 256*catcode + (ASCII-значення символу)
```

Зауважте, що для рушіїв, які підтримують Unicode, таких як LuaTeX, використовуються дещо інші обчислення.

Наприклад, токен TeX, що представляє символ пробілу з `\catcode` кодом категорії 10 і ASCII-значенням 32, дорівнює:

```c
256*10 + 32 = 2592
```

### Списки токенів, що містять символи

Коли ви створюєте простий список токенів, наприклад

```latex
\toks100={Привіт}
```

TeX створить наведений нижче список токенів і збереже його в пам’яті для подальшого використання:

* H→ 256 × 11 + 72 = 2888
* e→ 256 × 11 + 101 = 2917
* l→ 256 × 11 +108 = 2924
* l→ 256 × 11 +108 = 2924
* o→256 × 11 + 111 = 2927

Глибоко в пам’яті TeX реєстр токенів 100 надаватиме доступ до місця зберігання «Привіт», збереженого як 5 значень токенів: 2888, 2917, 2924, 2924, 2927. Зауважте, що ці токени поєднують ASCII-код кожного символу та значення його `\catcode`в той момент, коли їх перетворюють на токени (токенізують). Коли символи вже перетворено на символьні токени, `\catcode` значення, приєднане до них, стає незмінним і зберігається всередині токенів для подальшого використання, коли користувач скаже, наприклад, `\the\toks100`.

Як зазначалося, символьний токен обчислюється за формулою `256*catcode + (ASCII-значення)` тоді як токен керуючої послідовності обчислюється за формулою `4095 + curcs` де `curcs` — це хеш-значення керівного слова (текстового рядка введеної користувачем команди), виявленого TeX у вхідних даних. Варто зазначити, що символьні токени завжди менші за 4095. Отже, TeX може легко визначити, чи певний токен представляє керуючу послідовність (команду) або символ, а потім з’ясувати, яка саме керуюча послідовність або символ і `\catcode` пара закодована в цьому токені.


---

# 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/uk/dokladni-statti/53-what-is-a-tex-token.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.
