> 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/uk/inshi-temi/39-mltex-enctex-and-synctex-tex-extensions.md).

# Розширення TeX: MLTeX, EncTeX і SyncTeX

## Деякі відомості про розширення TeX

TeX має довгу історію розвитку — вже понад 4 десятиліття! За цей час були створені нові «версії» TeX — такі як e-TeX, pdfTeX, XeTeX, LuaTeX тощо. Окрім повністю нових рушіїв із цілим набором додаткових можливостей, існували різні *розширення* які зазвичай зосереджуються на реалізації певної функції для вдосконалення оригінального ПЗ Кнута.

Із появою сучасних рушіїв TeX, таких як XeTeX і LuaTeX, потреба в деяких застарілих розширеннях TeX і їх використання зменшилися, оскільки новіші рушії TeX приносять потужну додаткову функціональність — наприклад, вбудовану підтримку тексту, закодованого в UTF-8. Мета цієї сторінки — дати кілька приміток про розширення, зокрема MLTeX та EncTeX, на які ви все ще можете натрапити в [параметрах командного рядка рушія TeX](/latex/uk/inshi-temi/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md). MLTeX і EncTeX більше не розробляються, але одне дуже корисне розширення, SyncTeX, продовжує активно розвиватися й підтримується Overleaf.

## MLTeX

*Багатомовний TeX*, або MLTeX, було розроблено в 1992–5 роках як модифікацію TeX, щоб дозволити перенос слів із наголошеними літерами, використовуючи звичайні шрифти Computer Modern (CM).

### Активація (увімкнення) MLTeX

MLTeX призначено для роботи як частини так званого `.fmt` (файлу формату), який фактично є попередньо скомпільованою двійковою версією набору макросів TeX. Щоб створити файли формату, ви переводите рушій TeX у так званий `INI` режим, обробляєте набір макросів, а потім подаєте `\dump` команду для запису `.fmt` файлу. Див. [цю статтю](/latex/uk/dokladni-statti/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md) для обговорення режимів INI.

Щоб увімкнути MLTeX, *для тих рушіїв, які це підтримують*, наприклад pdfTeX, ви б написали

```
pdftex -ini -mltex *pdfetex.ini
```

де `pdfetex.ini` це файл, що входить до дистрибутива TeX Live.

**Чому зірочка (`*`)?** Зірочка переводить pdfTeX у так званий «розширений режим», який вмикає підтримку примітивів e-TeX. Якщо ви її пропустите і введете `pdftex -ini -mltex pdfetex.ini` ви отримаєте помилку:

```
Це pdfTeX, версія 3.14159265-2.6-1.40.19 (INITEX)
 \write18 увімкнено.
MLTeX v2.2 увімкнено
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! e-TeX  фатальна помилка: цей файл можна обробляти лише в розширеному режимі;
  можливо, ви забули зірочку?
```

**Примітка**: Замість використання зірочки для вмикання «розширеного режиму» ви можете використати `-etex` параметр командного рядка:

```
pdftex -ini -etex -mltex pdfetex.ini
```

**Примітка**: Використання `-mltex` параметра в командному рядку з `.fmt` файлом, який був *не згенерований* з увімкненим MLTeX не *не* працюватиме: MLTeX має бути «активовано» через відповідний файл формату.

Коли ви використовуєте `-mltex` параметр під час `.fmt` створення файлу, до `.fmt` файлу записується булева змінна зі значенням «true», яка повідомляє рушію TeX, що розширення MLTeX було активовано і має бути доступним користувачеві. Якщо ви явно не задаєте `-mltex` параметр, тоді відповідна змінна матиме значення «false». Якщо значення цієї змінної визначено як «false» (коли цей `.fmt` файл перезавантажується під час запуску TeX), тоді спроба використати розширення MLTeX призведе до `помилки «Undefined command...»`  — тому що примітиви MLTeX не буде зареєстровано (завантажено), і тому вони не будуть розпізнані.

Після запуску `pdftex -ini -mltex *pdfetex.ini` у командному рядку ви побачите щось подібне до наведеного нижче тексту, який показує, що MLTeX v2.2 увімкнено:

```
Це pdfTeX, версія 3.14159265-2.6-1.40.19 (INITEX)
\write18 увімкнено.
вхід у розширений режим
MLTeX v2.2 увімкнено
....
....
....
Початок запису у файл pdfetex.fmt
....
Немає вихідних сторінок.
Транскрипт записано у pdfetex.log.
```

У результаті буде створено `.fmt` файл під назвою `pdfetex.fmt` який дає змогу використовувати команди MLTeX:

```
pdftex -fmt=pdfetex <yourfile.tex>
```

де `<yourfile.tex>` може використовувати специфічні для MLTeX примітиви

MLTeX спочатку поширювався як окремий файл змін, [mltex.ch](http://tug.ctan.org/systems/generic/mltex/mltex.ch), який можна було об’єднати з основним вихідним кодом Кнута ([`tex.web`](https://ctan.org/tex-archive/systems/knuth/dist/tex?lang=en)) щоб отримати нову версію TeX, під назвою MLTeX, яка містила низку нових примітивів. Сьогодні код MLTeX з `mltex.ch` входить до основного `tex.ch` файлу змін, який використовується для збирання майже всіх рушіїв TeX.

### Примітиви MLTeX

Наведені нижче примітки здебільшого підготовлено та відтворено з файлу `web2c.info` який міститься у [TeX Live](https://tug.org/texlive/) дистрибутиві.

* **`\charsubdef`**: Визначення підстановки символів. Оголошує, як побудувати гліф символу з діакритикою (який не обов’язково існує в поточному шрифті) за допомогою двох гліфів символів (які існують).

  ```
  \charsubdef COMPOSITE [=] ACCENT BASE
  ```

  Кожен із COMPOSITE, ACCENT і BASE — це номери гліфів шрифту, записані у звичному синтаксисі TeX: \`\e символічно, '145 для вісімкового, "65 для шістнадцяткового, 101 для десяткового. Таким чином це визначає, чи буде код гліфа символу, введений як один символ або за допомогою `\char` примітива, відображено у гліф шрифту чи в `\accent` побудову гліфа.

  Наприклад, якщо припустити код гліфа 138 (десятковий) для e з циркумфлексом і ви використовуєте шрифти Computer Modern, у яких циркумфлексний акцент розташований у позиції 18, а мала літера ‘e’ — у звичайній ASCII-позиції 101 (десяткова), ви б використали `\charsubdef` так:

  ```
  \charsubdef 138 = 18 101
  ```
* **`\charsubdefmax`**: Встановлює найбільше значення у `\charsubdef` списку. Наприклад:

  ```
  \charsubdefmax=-1 % disable all substitutions
  \charsubdefmax=256 % enable all substitutions
  ```
* **`\tracingcharsubdef`**: Відстеження підстановок. Щоб допомогти діагностувати проблеми з `\charsubdef`, MLTeX надає примітивний параметр, `\tracingcharsubdef`. Якщо він додатний, кожне використання `\charsubdef` буде повідомлятися. Це може допомогти виявити, коли символ було перевизначено.

## EncTeX

EncTeX було розроблено у 1997–2004 роках як розширення TeX, яке забезпечує гнучке перекодування вхідних і вихідних даних завдяки додаванню нових примітивів — наприклад, засіб перетворення вхідних даних на шляху до TeX. Воно, наприклад, дає змогу перетворювати багатобайтові послідовності, такі як кодування UTF-8, для використання у стандартних 8-бітних рушіях TeX.

### Активація (увімкнення) EncTeX

Як і MLTeX, EncTeX також призначено для роботи як частини так званого `.fmt` (файлу формату) — див. [MLTeX](#mltex), вище, для пояснення файлів формату/режиму INI.

Щоб увімкнути EncTeX, *для тих рушіїв, які це підтримують*, наприклад pdfTeX, ви б створили файл формату з увімкненим EncTeX, написавши

```
pdftex -ini -enc *pdfetex.ini
```

де `pdfetex.ini` це файл, що входить до дистрибутива TeX Live.

**Чому зірочка (`*`)?** Зірочка переводить pdfTeX у так званий «розширений режим», який вмикає підтримку примітивів e-TeX. Якщо ви її пропустите і введете `pdftex -ini -mltex pdfetex.ini` ви отримаєте помилку:

```
Це pdfTeX, версія 3.14159265-2.6-1.40.19 (INITEX)
 \write18 увімкнено.
MLTeX v2.2 увімкнено
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! e-TeX  фатальна помилка: цей файл можна обробляти лише в розширеному режимі;
  можливо, ви забули зірочку?
```

**Примітка**: Замість використання зірочки для вмикання «розширеного режиму» ви можете використати `-etex` параметр командного рядка:

```
pdftex -ini -etex -mltex pdfetex.ini
```

Функція `-enc` параметр командного рядка вмикає рушій pdfTeX, щоб увімкнути EncTeX, записуючи деякі дані у результуючий `pdfetex.fmt` файл формату.

**Примітка**: Використання `-enc` параметра в командному рядку з `.fmt` файлом, який був *не згенерований* з увімкненим EncTeX не *не* працюватиме: EncTeX має бути «активовано» через належним чином згенерований файл формату.

### Примітиви EncTeX

EncTeX додає до рушія TeX 10 нових примітивних команд:

* 3 примітиви в початковому випуску (1997):
* `\xordcode`
* `\xchrcode`
* `\xprncode`
* 7 додаткових примітивів (для підтримки UTF-8) у 2003 році:
* `\mubyte`
* `\endmubyte`
* `\mubytein`
* `\mubyteout`
* `\mubytelog`
* `\specialout`
* `\noconvert`

Використання та поведінка цих примітивів добре задокументовані в [Довідковому посібнику EncTeX](http://mirrors.ctan.org/systems/enctex/encdoc-e.pdf), написаному автором EncTeX, Петром Олшаком. Щоб уникнути зайвого дублювання тут, зацікавлених читачів відсилаємо до цього документа.

### Додаткова інформація про EncTeX

* [Друга версія EncTeX: підтримка UTF-8](http://mirrors.ctan.org/systems/enctex/eurotex2003-enctex.pdf): стаття автора EncTeX, Петра Олшака.
* [Довідковому посібнику EncTeX](http://mirrors.ctan.org/systems/enctex/encdoc-e.pdf) (англійською).

### Активація (увімкнення) і MLTeX, і EncTeX

Щоб увімкнути і MLTeX, і EncTeX, ви б згенерували відповідний файл формату за допомогою команди на кшталт

```
pdftex -ini -enc -mltex *pdfetex.ini
```

де `pdfetex.ini` це файл, що входить до дистрибутива TeX Live.

**Чому зірочка (`*`)?** Зірочка переводить pdfTeX у так званий «розширений режим», який вмикає підтримку примітивів e-TeX. Якщо ви її пропустите і введете `pdftex -ini -enc -mltex pdfetex.ini` ви отримаєте помилку:

```
Це pdfTeX, версія 3.14159265-2.6-1.40.19 (INITEX)
 \write18 увімкнено.
MLTeX v2.2 увімкнено
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! e-TeX  фатальна помилка: цей файл можна обробляти лише в розширеному режимі;
  можливо, ви забули зірочку?
```

**Примітка**: Замість використання зірочки для вмикання «розширеного режиму» ви можете використати `-etex` параметр командного рядка:

```
pdftex -ini -etex -enc -mltex pdfetex.ini
```

Після виконання наведеної вище команди ви побачите повідомлення на кшталт такого, яке інформує, що і MLTeX, і EncTeX увімкнено:

```
Це pdfTeX, версія 3.14159265-2.6-1.40.19 (INITEX)
 \write18 увімкнено.
вхід у розширений режим
MLTeX v2.2 увімкнено
 encTeX v. Jun. 2004, перекодування ввімкнено.
....
....
....
Початок запису у файл pdfetex.fmt
....
Немає вихідних сторінок.
Транскрипт записано у pdfetex.log.
```

та `pdfetex.fmt` файл формату, що вмикає і MLTeX, і EncTeX, буде створено.

## SyncTeX

Розширення SyncTeX доступне з 2008 року і продовжує активно розвиватися його творцем, Жеромом Лораном. Воно широко використовується, зокрема Overleaf, і підтримується всіма рушіями TeX, що використовуються сьогодні.

### Що робить SyncTeX?

Під час перегляду документа, набраного TeX, можливо для вичитування/перевірки перед поданням видавцеві, ви можете помітити помилку і мати потребу виправити її у вихідному коді TeX. Однак знайти потрібне місце у файлі TeX може бути непросто, особливо якщо це великий документ. Так само ви можете захотіти зробити й навпаки: перейти з позиції у вихідному файлі TeX безпосередньо до місця на сторінці в остаточному набраному PDF. В обох випадках є потреба *синхронізувати* певне місце у файлі TeX та його відповідне місце в показі результатів набору: саме це й забезпечує SyncTeX — спосіб автоматично пов’язувати місця у файлах TeX із позиціями на сторінках у набраних документах.

Якщо SyncTeX увімкнено, він записує спеціальний файл із розширенням `.synctex.gz` (стиснений gz) або `.synctex` (нестиснений) залежно від [параметрів командного рядка, наданих SyncTeX](#synoptions). Редактори тексту з підтримкою SyncTeX і (здебільшого) PDF-переглядачі можуть використовувати ці файли для виконання необхідної синхронізації між вхідними даними (кодом TeX) і вихідними даними (відображенням набраного PDF). Очевидно, це не може просто «статися» без того, щоб текстовий редактор і переглядач PDF-документа користувача мали відповідну функціональність, яка забезпечує обмін місцями у текстовому файлі/PDF-переглядачі — на основі даних, що містяться в `.synctex.gz` (або `.synctex`) файлі, записаному SyncTeX.

Окрім функціональності всередині рушія TeX — для створення `.synctex.gz` файлів — SyncTeX також надає спеціальний [парсер](https://github.com/jlaurens/synctex/) який читає `.synctex.gz` (або `.synctex`) файли, щоб витягти відповідну інформацію про місце на сторінці/рядку. Застосунки використовують цей парсер, щоб забезпечити підтримку SyncTeX.

### Активація (увімкнення) SyncTeX

Рушії TeX із підтримкою SyncTeX мають два способи вмикати/вимикати SyncTeX:

* параметр командного рядка: `-synctex=NUMBER`
* команда у `.tex` файлі:  `\synctex` примітивних

### Використання SyncTeX у командному рядку

Ви можете використовувати `-synctex=NUMBER` параметра, коли ви запускаєте рушій TeX, що підтримує SyncTeX, наприклад pdfTeX.

#### Приклади

* Увімкнути SyncTeX: вихід `.synctex.gz` (стиснений gz-файл):

```
pdftex -synctex=1 myfile.tex
```

Створює `myfile.synctex.gz`

* Увімкнути SyncTeX: вихід `.synctex` (нестиснений файл):

```
pdftex -synctex=-1 myfile.tex
```

Створює `myfile.synctex`

* Вимкнути SyncTeX:

```
pdftex -synctex=0 myfile.tex
```

Вихід SyncTeX не створюється.

### Єдиний примітив SyncTeX

SyncTeX надає один примітив, `\synctex`який користувачі можуть додати до своїх `.tex` файл:

* Увімкнути SyncTeX: `\synctex=1`
* Вимкнути SyncTeX: `\synctex=0`

### Додаткова інформація про SyncTeX

* [Стаття в TUGBoat від Жерома Лорана](http://www.tug.org/TUGboat/tb29-3/tb93laurens.pdf), автора SyncTeX.
* Функція [Сховище GitHub](https://github.com/jlaurens/synctex) парсера SyncTeX.


---

# 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/uk/inshi-temi/39-mltex-enctex-and-synctex-tex-extensions.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.
