> 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/overleaf-learn-latex-pt/artigos-aprofundados/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# Os dois modos dos motores TeX: modo INI e modo de produção

Todos os motores TeX têm dois "modos" de operação: um modo "INI" e um modo de "produção"—este último é simplesmente o modo padrão (normal) usado para a produção de material composto. O modo INI é bastante diferente e é necessário usar uma opção da linha de comandos para colocar um motor TeX em modo INI. Pode ver como o fazer executando `--help` na linha de comandos. Por exemplo, com LuaTeX, se fizer

`luatex --help`

verá muitas opções de linha de comandos suportadas por esse motor:

```
Utilização: luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   ou: luatex --lua=FILE [OPTION]... \FIRST-LINE
   ou: luatex --lua=FILE [OPTION]... &FMT ARGS
  Execute LuaTeX em TEXNAME, criando normalmente TEXNAME.pdf.
  Quaisquer COMMANDS restantes são processados como entrada do luatex, depois de TEXNAME ser lido.

  Em alternativa, se o primeiro argumento sem opção começar por uma barra invertida,
  o luatex interpreta todos os argumentos sem opção como uma linha de entrada.

  Em alternativa, se o primeiro argumento sem opção começar por um &, o
  próximo termo é tomado como o FMT a ler, substituindo qualquer outra coisa. Quaisquer
  argumentos restantes são processados como acima.

  Se não forem especificados argumentos nem opções, pede entrada.

  As seguintes opções normais são compreendidas:

   --credits                     mostrar créditos e sair
   --debug-format                ativar depuração do formato
   --draftmode                   ativar modo de rascunho (não gera PDF de saída)
   --[no-]file-line-error        desativar/ativar mensagens no estilo ficheiro:linha:erro
   --[no-]file-line-error-style  alias de --[no-]file-line-error
   --fmt=FORMAT                  carregar o ficheiro de formato FORMAT
   --halt-on-error               parar o processamento no primeiro erro
   --help                        mostrar ajuda e sair
   --ini                         estar em iniluatex, para gerar formatos
   --interaction=STRING          definir o modo de interação (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              definir o nome do trabalho como STRING
   --kpathsea-debug=NUMBER       definir as flags de depuração da pesquisa de caminhos de acordo com os bits de NUMBER
   --lua=FILE                    carregar e executar um script de inicialização lua
   --[no-]mktex=FMT              desativar/ativar a geração de mktexFMT (FMT=tex/tfm)
   --nosocket                    desativar a biblioteca lua socket
   --output-comment=STRING       usar STRING como comentário do ficheiro DVI em vez da data (sem efeito para PDF)
   --output-directory=DIR        usar DIR existente como diretório para escrever ficheiros
   --output-format=FORMAT        usar FORMAT para a saída do trabalho; FORMAT é 'dvi' ou 'pdf'
   --progname=STRING             definir o nome do programa como STRING
   --recorder                    ativar o registo de nomes de ficheiro
   --safer                       desativar comandos lua facilmente exploráveis
   --[no-]shell-escape           desativar/ativar comandos do sistema
   --shell-restricted            restringir comandos do sistema a uma lista de comandos dada em texmf.cnf
   --synctex=NUMBER              ativar synctex (ver man synctex)
   --utc                         inicializar a hora para UTC
   --version                     mostrar a versão e sair

Modelos de comportamento alternativos podem ser obtidos através de opções especiais

  --luaonly                      executar um ficheiro lua e sair
  --luaconly                     compilar em bytecode um ficheiro lua e sair
  --luahashchars                 os bits usados pelo interpretador Lua atual para o hashing de strings

Consulte o manual de referência para obter mais informações sobre o processo de arranque.

Envie relatórios de erros para dev-luatex@ntg.nl.
```

Entre essas muitas opções há duas relevantes aqui:

```
--ini              estar em iniluatex, para gerar formatos
--fmt=FORMAT       carregar o ficheiro de formato FORMAT
```

Aqui, o LuaTeX refere-se ao seu modo INI pelo nome de `iniluatex`. Então, o que é que isto `iniluatex` (modo INI) significa realmente? Uma pequena pista é a segunda opção da linha de comandos apresentada acima:

```
--fmt=FORMAT       carregar o ficheiro de formato FORMAT
```

### Modo INI? Ficheiros de formato? Estou confuso...

Pacotes de macros, como o LaTeX, são grandes coleções de macros complexas: carregar e processar o texto bruto de todos os ficheiros constituintes implica de facto uma certa sobrecarga de tempo e de computação; por exemplo:

* ler e analisar dezenas de milhares de caracteres individuais de texto;
* analisar, processar e armazenar centenas de macros/comandos;
* inicializar tabelas internas de tipos de letra e dados de hifenização.

Tudo isto tem de acontecer, e os resultados têm de ser armazenados na memória, antes de o motor TeX estar efetivamente pronto para processar um documento TeX do utilizador que faça uso das macros fornecidas por, por exemplo, as coleções de macros Plain TeX ou LaTeX. Pode pensar nisto como o processo de arranque de um motor TeX: preparações essenciais antes de estar pronto para processar o seu documento.

Talvez refletindo a tecnologia da sua época, os motores TeX oferecem um atalho para processar ficheiros de texto cheios de coleções de macros: carregar ficheiros binários pré-processados (*formato*) ficheiros.

Quando colocado em modo INI, a tarefa de um motor TeX não é compor tipograficamente, mas sim:

1. carregar e inicializar todos os seus comandos primitivos e configurar apenas o mínimo indispensável de catcodes (e outros códigos) para que o motor TeX possa iniciar o processamento seguinte.
2. quando (1) estiver concluído, irá então carregar e processar uma coleção de macros fornecida pelo utilizador, referida como um "formato" (por ex., Plain TeX ou a coleção de macros LaTeX).
3. depois de concluir com êxito (1) e (2), o TeX fará um "despejo binário do cérebro" de tudo o que foi carregado e processado na sua memória e escrevê-lo-á para um ficheiro binário *formato* ficheiro (por ex., `lualatex.fmt`).

Um ficheiro de formato é um ficheiro binário que armazena uma representação do "estado de espírito" do TeX após ter inicializado inúmeras tabelas internas de dados (incluindo os primitivos) e processado todos os comandos de macro presentes na coleção de macros fornecida pelo utilizador. Os motores TeX fazem isto porque é mais rápido carregar um ficheiro binário "pré-compilado" do que voltar a processar as macros em bruto sempre que quiser executar um motor TeX usando, por exemplo, as macros Plain TeX de Knuth ou o pacote de macros LaTeX—ou mesmo qualquer pacote de macros concebido como um "formato".

Quando processa um documento que será composto tipograficamente pelo LaTeX, por exemplo, o motor TeX não volta a ler (reprocessar) todas as macros centrais do LaTeX, mas em vez disso lê um ficheiro binário chamado, por exemplo, `lualatex.fmt`. Os detalhes internos dos ficheiros de formato são específicos de cada motor TeX e de cada versão do pacote de macros utilizado para gerar um `.fmt` ficheiro. Por exemplo, se atualizar a sua distribuição LaTeX (isto é, o núcleo do próprio LaTeX, não pacotes adicionais), então poderá ser necessário gerar um novo `.fmt` ficheiro também.

### Exemplo

Na distribuição do código-fonte do LaTeX encontrará ficheiros com uma `.ini` extensão, por exemplo lualatex.ini, que são usados para gerar `.fmt` ficheiros—esses `.ini` ficheiros normalmente contêm código de inicialização específico do motor e depois passam a incluir os ficheiros de macros centrais do LaTeX. Por exemplo, se executar LuaTeX com a seguinte linha de comandos:

`luatex --ini lualatex.ini`

o LuaTeX escreverá um ficheiro chamado `lualatex.fmt`

No momento em que isto foi escrito, `lualatex.ini` contém o seguinte código:

```
% tex-ini-files 2016-04-15: lualatex.ini
% Originalmente escrito em 2008 por Karl Berry. Domínio público.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % Configurar o tratamento de aspas do nome do trabalho antes de latex.ltx
  % O Web2c pdfTeX/XeTeX envolve entre aspas nomes de trabalho que contenham espaços, mas o LuaTeX
  % não faz isto ao nível do motor. O comportamento pode ser alterado usando
  % um callback. Originalmente este código era carregado através de lualatexquotejobname.tex
  % mas isso exigia um artifício em torno de latex.ltx: o comportamento foi alterado
  % para permitir que a via do callback seja usada diretamente.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` começa por incluir um ficheiro chamado `luatexconfig.tex` que faz alguma inicialização específica do LuaTeX—como seria de esperar de um `.ini` ficheiro de (inicialização)! Na última linha, inclui `latex.ltx` o que faz com que o LuaTeX leia e processe as macros centrais do LaTeX.

Depois de o LuaTeX terminar de processar `lualatex.ini` irá escrever o binário *ficheiro de formato* chamado `lualatex.fmt`. Uma vez que o código LaTeX tenha sido compilado para um formato binário, o LuaTeX (ou qualquer outro motor TeX) pode ler muito rapidamente o `.fmt` ficheiro para efetuar o arranque e inicializar as suas tabelas internas de definições de macros do LaTeX, tipos de letra e assim por diante—não tem de passar pelo longo processo de ler e processar as muitas milhares de caracteres contidas no pacote de macros do LaTeX.

Pode agora instruir o LuaTeX a compor tipograficamente o seu documento LaTeX `yourfile.tex` (usando o `lualatex` ficheiro de formato) executando o comando:

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

`.fmt` Os ficheiros são normalmente específicos de um motor em particular: por ex., os do LuaTeX `.fmt` Os ficheiros geralmente não são portáveis para uso com um motor TeX diferente: por ex., pdfTeX ou XeTeX. Além disso, se o executável LuaTeX for atualizado com novas funcionalidades, é bem possível que um `.fmt` ficheiro preparado com uma versão mais antiga do LuaTeX não funcione com o novo motor: teria de reconstruir (recompilar) o `.fmt` ficheiro.

Se tentar usar um `.fmt` ficheiro incompatível, então um motor TeX falhará ao carregá-lo e responderá com o erro:

```
Erro fatal de ficheiro de formato; estou bloqueado
```

Do mesmo modo, se as macros centrais do LaTeX forem atualizadas, talvez também tenha de reconstruir os `lualatex.fmt` ficheiro também.

`.fmt` Os ficheiros podem ser preparados a partir de qualquer pacote de macros adequado—e não apenas do LaTeX; por exemplo, as macros TeX "Plain" originais de Knuth, muito mais simples, também podem ser processadas para gerar um `.fmt` ficheiro. Poderia, se tivesse tempo, escrever a sua própria coleção de macros e produzir um ficheiro de formato para esse pacote—note que algures no seu pacote de macros teria de invocar o comando primitivo `\dump` que diz ao motor TeX para fazer o seu "despejo binário do cérebro" e escrever o `.fmt` ficheiro.

No entanto, a grande maioria dos utilizadores nunca precisa de se preocupar com o modo "INI" dos motores TeX, nem com o processo de gerar `.fmt` ficheiros: o Overleaf e a distribuição TeX Live protegem-no desses detalhes—a menos que precise de os procurar.


---

# 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/overleaf-learn-latex-pt/artigos-aprofundados/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.
