> 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/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/ru/drugie-temy/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md). MLTeX и EncTeX больше не развиваются, но одно очень полезное расширение, SyncTeX, продолжает активно развиваться и поддерживается Overleaf.

## MLTeX

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

### Активация (включение) MLTeX

MLTeX рассчитан на работу в составе так называемого `.fmt` (файла формата), который, по сути, является предварительно скомпилированной бинарной версией набора макросов TeX. Чтобы создать файлы формата, вы переводите движок TeX в его так называемый `INI` режим, обрабатываете набор макросов, а затем выполняете `\dump` команду записи `.fmt` файла. См. [эту статью](/latex/ru/podrobnye-stati/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 приведёт к `Неизвестная команда...` ошибке — поскольку примитивы 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)) `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` (сжатый gzip) или `.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` (файл, сжатый gzip):

```
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/ru/drugie-temy/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.
