> 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/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# Два режими рушіїв TeX: режим INI та режим виробництва

У всіх рушіїв TeX є два «режими» роботи: режим «INI» і режим «production» — останній є просто режимом за замовчуванням (стандартним), який використовується для створення верстаного матеріалу. Режим INI досить відрізняється, і щоб перевести рушій TeX у режим INI, потрібно використати параметр командного рядка. Як це зробити, можна побачити, ввівши `--help` у командному рядку. Наприклад, у LuaTeX, якщо ви виконаєте

`luatex --help`

ви побачите багато параметрів командного рядка, які підтримує цей рушій:

```
Використання: luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   або: luatex --lua=FILE [OPTION]... \FIRST-LINE
   або: luatex --lua=FILE [OPTION]... &FMT ARGS
  Запустіть LuaTeX для TEXNAME, зазвичай створюючи TEXNAME.pdf.
  Будь-які решта COMMANDS обробляються як вхідні дані luatex після зчитування TEXNAME.

  Або, якщо перший аргумент, що не є параметром, починається з зворотної скісної риски,
  luatex інтерпретує всі аргументи, що не є параметрами, як рядок введення.

  Або, якщо перший аргумент, що не є параметром, починається з &,
  то наступне слово береться як FMT для читання, що має пріоритет над усім іншим. Будь-які
  решта аргументів обробляються, як зазначено вище.

  Якщо не вказано жодних аргументів або параметрів, буде запитано введення.

  Підтримуються такі звичайні параметри:

   --credits                     показати авторів і вийти
   --debug-format                увімкнути налагодження формату
   --draftmode                   увімкнути чернетковий режим (не створює вихідний PDF)
   --[no-]file-line-error        вимкнути/увімкнути повідомлення у форматі file:line:error
   --[no-]file-line-error-style  псевдоніми --[no-]file-line-error
   --fmt=FORMAT                  завантажити файл формату FORMAT
   --halt-on-error               зупинити обробку на першій помилці
   --help                        показати довідку й вийти
   --ini                         бути в режимі iniluatex для створення дампів форматів
   --interaction=STRING          встановити режим взаємодії (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              встановити ім'я завдання як STRING
   --kpathsea-debug=NUMBER       встановити прапорці налагодження пошуку шляхів відповідно до бітів NUMBER
   --lua=FILE                    завантажити й виконати скрипт ініціалізації Lua
   --[no-]mktex=FMT              вимкнути/увімкнути генерацію mktexFMT (FMT=tex/tfm)
   --nosocket                    вимкнути бібліотеку Lua Socket
   --output-comment=STRING       використати STRING як коментар файлу DVI замість дати (не впливає на PDF)
   --output-directory=DIR        використати наявний DIR як каталог для запису файлів
   --output-format=FORMAT        використати FORMAT для виводу завдання; FORMAT — це 'dvi' або 'pdf'
   --progname=STRING             встановити ім'я програми як STRING
   --recorder                    увімкнути записувач імен файлів
   --safer                       вимкнути команди Lua, якими легко скористатися для експлуатації
   --[no-]shell-escape           вимкнути/увімкнути системні команди
   --shell-restricted            обмежити системні команди списком команд, заданим у texmf.cnf
   --synctex=NUMBER              увімкнути synctex (див. man synctex)
   --utc                         встановити час ініціалізації на UTC
   --version                     показати версію й вийти

Альтернативні моделі поведінки можна отримати за допомогою спеціальних перемикачів

  --luaonly                      запустити файл Lua, а потім вийти
  --luaconly                     скомпілювати файл Lua в байт-код, а потім вийти
  --luahashchars                 біти, які використовує поточний інтерпретатор Lua для хешування рядків

Див. довідковий посібник для отримання докладнішої інформації про процес запуску.

Повідомлення про помилки надсилайте на dev-luatex@ntg.nl.
```

Серед цих багатьох параметрів тут важливі два:

```
--ini              бути в режимі iniluatex для створення дампів форматів
--fmt=FORMAT       завантажити файл формату FORMAT
```

Тут LuaTeX називає свій режим INI `iniluatex`. То що ж це `iniluatex` (режим INI) насправді означає? Невелика підказка — другий показаний вище параметр командного рядка:

```
--fmt=FORMAT       завантажити файл формату FORMAT
```

### Режим INI? Файли формату? Я заплутався...

Пакети макросів, такі як LaTeX, — це великі набори складних макросів: завантаження й обробка сирого тексту з усіх складових файлів справді потребує певних витрат часу та обчислень; наприклад:

* читання й сканування десятків тисяч окремих символів тексту;
* розбір, обробка й зберігання сотень макросів/команд;
* ініціалізація внутрішніх таблиць шрифтів і даних перенесення.

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

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

Коли рушій TeX переводять у режим INI, його завданням є не виконання верстки, а натомість:

1. завантажити й ініціалізувати всі свої примітивні команди, а також налаштувати лише мінімально необхідний набір catcode'ів (та інших кодів), щоб рушій TeX міг розпочати подальшу обробку.
2. після завершення кроку (1) він завантажить і обробить наданий користувачем набір макросів, який називають «форматом» (наприклад, Plain TeX або набір макросів LaTeX).
3. після успішного завершення кроків (1) і (2) TeX виконає «бінарний злив мозку» всього, що було завантажено й оброблено в його пам’яті, і запише це у бінарний *формат* файл (наприклад, `lualatex.fmt`).

Файл формату — це бінарний файл, який зберігає представлення «стану думок» TeX після ініціалізації численних внутрішніх таблиць даних (включно з примітивами) та обробки всіх макрокоманд, наявних у наданому користувачем наборі макросів. Рушії TeX роблять це тому, що завантажити «попередньо скомпільований» бінарний файл швидше, ніж щоразу повторно обробляти сирі макроси, коли ви хочете запустити рушій TeX, використовуючи, наприклад, Plain TeX Кнута або пакет макросів LaTeX — або, власне, будь-який пакет макросів, призначений як «формат».

Коли ви обробляєте документ, який має бути верстаний за допомогою LaTeX, наприклад, рушій TeX не перечитує (не переобробляє) всі базові макроси LaTeX, а натомість читає бінарний файл під назвою, наприклад, `lualatex.fmt`. Внутрішні деталі файлів формату є специфічними для кожного рушія TeX і кожної версії пакета макросів, використаного для створення `.fmt` файлу. Наприклад, якщо ви оновите свій дистрибутив LaTeX (тобто саму основу LaTeX, а не додаткові пакети), вам може знадобитися згенерувати новий `.fmt` файл також.

### Приклад

У дистрибутиві вихідного коду LaTeX ви знайдете файли з `.ini` розширенням, наприклад lualatex.ini, які використовуються для створення `.fmt` файлів — ці `.ini` файли зазвичай містять код ініціалізації, специфічний для рушія, а потім переходять до включення основних файлів макросів LaTeX. Наприклад, якщо ви запустите LuaTeX з таким командним рядком:

`luatex --ini lualatex.ini`

LuaTeX запише файл під назвою `lualatex.fmt`

На момент написання, `lualatex.ini` містить такий код:

```
% tex-ini-files 2016-04-15: lualatex.ini
% Спочатку написано 2008 року Карлом Беррі. Суспільне надбання.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % Налаштувати взяття назви завдання в лапки перед latex.ltx
  % Web2c pdfTeX/XeTeX бере в лапки назви завдань, що містять пробіли, але LuaTeX
  % не робить цього на рівні рушія. Поведінку можна змінити за допомогою
  % callback. Спочатку цей код завантажувався через lualatexquotejobname.tex
  % але це вимагало обхідного рішення для latex.ltx: поведінку було змінено
  % щоб можна було безпосередньо використовувати шлях через callback.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` починає з включення файлу під назвою `luatexconfig.tex` який виконує певну ініціалізацію, специфічну для LuaTeX, — як і можна було б очікувати від `.ini` (ініціалізаційного) файлу! В останньому рядку він включає `latex.ltx` що змушує LuaTeX читати й обробляти основні макроси LaTeX.

Після того як LuaTeX завершить обробку `lualatex.ini` він запише бінарний *файл формату* під назвою `lualatex.fmt`. Після того як код LaTeX буде скомпільовано в бінарний формат, LuaTeX (або будь-який інший рушій TeX) може дуже швидко читати `.fmt` цей файл, щоб виконати початкове завантаження й ініціалізувати свої внутрішні таблиці визначень макросів LaTeX, шрифтів тощо — йому не потрібно проходити тривалий процес читання й обробки багатьох тисяч символів, що містяться в пакеті макросів LaTeX.

Тепер ви можете наказати LuaTeX верстати ваш документ LaTeX `yourfile.tex` (використовуючи `lualatex` файл формату) за допомогою команди:

```
luatex --fmt=lualatex yourfile.tex
```

`.fmt` файли зазвичай специфічні для певного рушія: наприклад, файли LuaTeX `.fmt` файли загалом не є переносними для використання з іншим рушієм TeX: наприклад, pdfTeX або XeTeX. Крім того, якщо виконуваний файл LuaTeX оновлено новими можливостями, цілком можливо, що `.fmt` файл, підготовлений для старішої версії LuaTeX, не працюватиме з новим рушієм: вам потрібно буде перебудувати (перекомпілювати) `.fmt` файлі.

Якщо ви спробуєте використати несумісний `.fmt` файл, то рушій TeX не зможе його завантажити і видасть помилку:

```
Фатальна помилка файлу формату; я в глухому куті
```

Аналогічно, якщо базові макроси LaTeX буде оновлено, вам також може знадобитися перебудувати `lualatex.fmt` файл також.

`.fmt` файли можна підготувати з будь-якого придатного пакета макросів — не лише LaTeX; наприклад, оригінальні та значно простіші макроси Knuth's «Plain» TeX також можна обробити, щоб згенерувати `.fmt` файл. Ви могли б, якби мали час, написати власний набір макросів і створити файл формату для цього пакета — зауважте, що десь у вашому пакеті макросів вам потрібно було б викликати примітивну команду `\dump` яка вказує рушію TeX виконати свій «бінарний злив мозку» і записати `.fmt` файлі.

Втім, переважній більшості користувачів ніколи не потрібно турбуватися про режим «INI» рушіїв TeX або про процес створення `.fmt` файлів: Overleaf і дистрибутив TeX Live приховують від вас ці деталі — якщо тільки вам не доведеться їх шукати.


---

# 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/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.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.
