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

# Dva režimy TeX enginů: režim INI a produkční režim

Všechny enginy TeX mají dva „režimy“ provozu: režim „INI“ a režim „produkční“ — ten druhý je jen výchozí (standardní) režim používaný pro tvorbu sazbového materiálu. Režim INI je poněkud odlišný a je třeba použít volbu z příkazové řádky, aby se engine TeXu přepnul do režimu INI. Jak to udělat, můžete zjistit zadáním `--help` na příkazové řádce. Například u LuaTeXu, když zadáte

`luatex --help`

uvidíte mnoho voleb příkazové řádky podporovaných tímto enginem:

```
Použití: luatex --lua=FILE [VOLBA]... [TEXNAME[.tex]] [PŘÍKAZY]
   nebo: luatex --lua=FILE [VOLBA]... \FIRST-LINE
   nebo: luatex --lua=FILE [VOLBA]... &FMT ARGS
  Spustí LuaTeX nad TEXNAME, obvykle vytvoří TEXNAME.pdf.
  Všechny zbývající PŘÍKAZY jsou po načtení TEXNAME zpracovány jako vstup luatexu.

  Alternativně, pokud první argument, který není volbou, začíná zpětným lomítkem,
  luatex interpretuje všechny argumenty, které nejsou volbami, jako vstupní řádek.

  Alternativně, pokud první argument, který není volbou, začíná znakem &,
  se další slovo považuje za FMT, který se má načíst, a vše ostatní se tím přepíše. Všechny
  zbývající argumenty jsou zpracovány jako výše.

  Pokud nejsou zadány žádné argumenty ani volby, vyzve k zadání vstupu.

  Jsou rozpoznávány následující běžné volby:

   --credits                     zobrazí zásluhy a skončí
   --debug-format                zapne ladění formátu
   --draftmode                   zapne návrhový režim (nevytváří žádný výstupní PDF)
   --[no-]file-line-error        vypne/zapne zprávy ve stylu soubor:řádek:chyba
   --[no-]file-line-error-style  alias pro --[no-]file-line-error
   --fmt=FORMAT                  načte soubor formátu FORMAT
   --halt-on-error               zastaví zpracování při první chybě
   --help                        zobrazí nápovědu a skončí
   --ini                         být iniluatex, pro ukládání formátů
   --interaction=STRING          nastaví režim interakce (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              nastaví název úlohy na STRING
   --kpathsea-debug=NUMBER       nastaví příznaky ladění hledání cest podle bitů čísla NUMBER
   --lua=FILE                    načte a provede inicializační skript Lua
   --[no-]mktex=FMT              vypne/zapne generování mktexFMT (FMT=tex/tfm)
   --nosocket                    vypne knihovnu socketů Lua
   --output-comment=STRING       použije STRING pro komentář souboru DVI místo data (na PDF nemá vliv)
   --output-directory=DIR        použije existující DIR jako adresář pro zápis souborů
   --output-format=FORMAT        použije FORMAT pro výstup úlohy; FORMAT je 'dvi' nebo 'pdf'
   --progname=STRING             nastaví název programu na STRING
   --recorder                    zapne záznam názvů souborů
   --safer                       vypne snadno zneužitelné příkazy Lua
   --[no-]shell-escape           vypne/zapne systémové příkazy
   --shell-restricted            omezí systémové příkazy na seznam příkazů uvedených v texmf.cnf
   --synctex=NUMBER              zapne synctex (viz man synctex)
   --utc                         nastaví počáteční čas na UTC
   --version                     zobrazí verzi a skončí

Pomocí speciálních přepínačů lze získat alternativní modely chování

  --luaonly                      spustí soubor Lua a poté skončí
  --luaconly                     zkompiluje soubor Lua do bajtového kódu a poté skončí
  --luahashchars                 bity používané aktuálním interpretem Lua pro hashování řetězců

Další informace o spouštěcím procesu najdete v referenční příručce.

Hlášení chyb posílejte e-mailem na dev-luatex@ntg.nl.
```

Mezi těmi mnoha volbami jsou zde dvě důležité:

```
--ini              být iniluatex, pro ukládání formátů
--fmt=FORMAT       načte soubor formátu FORMAT
```

Zde LuaTeX označuje svůj režim INI názvem `iniluatex`. Co tedy toto `iniluatex` (režim INI) vlastně znamená? Drobnou nápovědou je druhá volba příkazové řádky uvedená výše:

```
--fmt=FORMAT       načte soubor formátu FORMAT
```

### Režim INI? Soubory formátu? Jsem zmatený...

Makrobalíky, jako je LaTeX, jsou rozsáhlé sbírky složitých maker: načítání a zpracování surového textu všech jejich součástí má určitou časovou a výpočetní režii; například:

* čtení a procházení desítek tisíc jednotlivých znaků textu;
* parsování, zpracování a ukládání stovek maker/příkazů;
* inicializace interních tabulek písem a dat o dělení slov.

To vše se musí provést a výsledky uložit do paměti, než je engine TeXu skutečně připraven zpracovat dokument uživatele v TeXu, který využívá makra poskytovaná například sbírkami maker Plain TeX nebo LaTeX. Můžete si to představit jako zaváděcí proces enginu TeXu: nezbytné přípravy předtím, než je připraven zpracovat váš dokument.

Možná jako odraz tehdejší technologie nabízejí enginy TeXu zkratku pro zpracování textových souborů plných makrobalíků: načtení předzpracovaných binárních (*formátových*) souborů.

Když je engine TeXu přepnut do režimu INI, jeho úkolem není sazba, ale místo toho:

1. načíst a inicializovat všechny své primitivní příkazy a zároveň nastavit úplné minimum catcodeů (a dalších kódů), aby mohl engine TeXu zahájit další zpracování.
2. jakmile je (1) hotovo, načte a zpracuje uživatelem poskytnutou sbírku maker, označovanou jako „formát“ (např. Plain TeX nebo sbírku maker LaTeX).
3. poté, co úspěšně dokončí (1) a (2), TeX provede „binární výpis mozku“ všeho, co bylo načteno a zpracováno do jeho paměti, a zapíše to do binárního *formátových* souboru (např., `lualatex.fmt`).

Soubor formátu je binární soubor, který ukládá reprezentaci „stavu mysli“ TeXu po inicializaci četných interních datových tabulek (včetně primitivních příkazů) a po zpracování všech makro příkazů přítomných v uživatelem dodané sbírce maker. Enginy TeXu to dělají proto, že je rychlejší načíst „předkompilovaný“ binární soubor, než pokaždé znovu zpracovávat surová makra, když chcete spustit engine TeXu s použitím například Knuthova Plain TeXu nebo makrobalíku LaTeX — nebo skutečně jakéhokoli makrobalíku navrženého jako „formát“.

Když například zpracováváte dokument, který má být vysázen pomocí LaTeXu, engine TeXu znovu nenačítá (nepřezpracovává) všechna jádrová makra LaTeXu, ale místo toho načte binární soubor, například `lualatex.fmt`. Vnitřní podrobnosti souborů formátu jsou specifické pro každý engine TeXu a každou verzi makrobalíku použitou k vytvoření `.fmt` souboru. Například pokud aktualizujete distribuci LaTeXu (tj. samotné jádro LaTeXu, nikoli doplňkové balíky), možná budete muset vygenerovat také nový `.fmt` soubor.

### Příklad

V distribuci zdrojového kódu LaTeXu najdete soubory s příponou `.ini` například lualatex.ini, které se používají k vytváření `.fmt` souborů — tyto `.ini` soubory obvykle obsahují inicializační kód specifický pro daný engine a poté pokračují načtením základních souborů maker LaTeXu. Pokud například spustíte LuaTeX s následující příkazovou řádkou:

`luatex --ini lualatex.ini`

LuaTeX zapíše soubor nazvaný `lualatex.fmt`

V době psaní tohoto textu `lualatex.ini` obsahuje následující kód:

```
% tex-ini-files 2016-04-15: lualatex.ini
% Původně napsal v roce 2008 Karl Berry. Public domain.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % Nastavení uvozování názvu úlohy před latex.ltx
  % Web2c pdfTeX/XeTeX uvádí názvy úloh obsahující mezery do uvozovek, ale LuaTeX to
  % na úrovni enginu nedělá. Chování lze změnit pomocí
  % callbacku. Původně byl tento kód načítán přes lualatexquotejobname.tex
  % ale to vyžadovalo obezličku kolem latex.ltx: chování bylo změněno
  % tak, aby bylo možné použít přímo cestu přes callback.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` začíná načtením souboru nazvaného `luatexconfig.tex` který provádí určitou inicializaci specifickou pro LuaTeX — jak byste od `.ini` (inicializačního) souboru očekávali! Na posledním řádku načítá `latex.ltx` který způsobí, že LuaTeX načte a zpracuje jádrová makra LaTeXu.

Po dokončení zpracování souboru `lualatex.ini` zapíše binární *soubor formátu* nazvaný `lualatex.fmt`. Jakmile je kód LaTeXu zkompilován do binárního formátu, může LuaTeX (nebo jakýkoli jiný engine TeXu) velmi rychle načíst `.fmt` soubor, aby provedl zavedení a inicializaci svých interních tabulek definic maker LaTeXu, písem a podobně — nemusí podstupovat zdlouhavý proces čtení a zpracování mnoha tisíců znaků obsažených v makrobalíku LaTeX.

Nyní můžete LuaTeXu nařídit, aby vysázel váš dokument LaTeXu `yourfile.tex` (pomocí `lualatex` souboru formátu) zadáním příkazu:

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

`.fmt` soubory jsou obvykle specifické pro konkrétní engine: např. soubory `.fmt` TeXu nejsou obecně přenositelné pro použití s jiným enginem TeXu: např. pdfTeX nebo XeTeX. Navíc, pokud je spustitelný soubor LuaTeXu aktualizován o nové funkce, je docela možné, že soubor `.fmt` připravený se starší verzí LuaTeXu nebude s novým enginem fungovat: budete muset znovu sestavit (překompilovat) `.fmt` souboru.

Pokud se pokusíte použít nekompatibilní `.fmt` soubor, engine TeXu jej nenačte a vrátí chybu:

```
Fatální chyba souboru formátu; jsem bezradný
```

Podobně, pokud jsou aktualizována jádrová makra LaTeXu, možná budete muset znovu sestavit také `lualatex.fmt` soubor.

`.fmt` soubory lze připravit z libovolného vhodného makrobalíku — nejen z LaTeXu; například původní, a mnohem jednodušší, makra „Plain“ TeXu lze také zpracovat a vygenerovat `.fmt` soubor. Kdybyste chtěli a měli čas, mohli byste napsat vlastní sbírku maker a vytvořit pro tento balík soubor formátu — všimněte si, že někde ve svém makrobalíku byste museli zavolat primitivní příkaz `\dump` který říká enginu TeXu, aby provedl svůj „binární výpis mozku“ a zapsal `.fmt` souboru.

Avšak drtivá většina uživatelů se nikdy nemusí starat o režim „INI“ enginů TeXu ani o proces generování `.fmt` souborů: Overleaf a distribuce TeX Live vás od těchto detailů chrání — pokud je samozřejmě nemusíte sami hledat.


---

# 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/cs/clanky-do-hloubky/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.
