> 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/ko/in-depth-articles/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`

그 엔진이 지원하는 많은 명령줄 옵션을 볼 수 있습니다:

```
Usage: luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   or: luatex --lua=FILE [OPTION]... \FIRST-LINE
   or: luatex --lua=FILE [OPTION]... &FMT ARGS
  TEXNAME에서 LuaTeX를 실행하며, 보통 TEXNAME.pdf를 생성합니다.
  남아 있는 COMMANDS는 TEXNAME를 읽은 뒤 luatex 입력으로 처리됩니다.

  또는, 첫 번째 옵션이 아닌 인자가 백슬래시로 시작하면,
  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 소켓 라이브러리 비활성화
   --output-comment=STRING       날짜 대신 DVI 파일 주석에 STRING 사용(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 엔진이 실제로 Plain TeX나 LaTeX 매크로 모음이 제공하는 매크로를 사용하는 사용자의 TeX 문서를 처리할 준비가 되기 전에 이루어져야 하며, 그 결과는 메모리에 저장되어야 합니다. 이를 TeX 엔진의 부트스트랩 과정으로 생각할 수 있습니다: 문서를 처리할 준비가 되기 전에 필요한 필수 준비 단계입니다.

아마도 그 시대의 기술을 반영하듯, TeX 엔진은 매크로 모음으로 가득한 텍스트 파일을 처리하는 지름길을 제공합니다: 미리 처리된 이진(*format*) 파일을 불러오는 것입니다.

INI 모드로 설정되면 TeX 엔진의 역할은 조판을 수행하는 것이 아니라 대신 다음을 하는 것입니다:

1. 모든 원시 명령을 불러와 초기화하고, TeX 엔진이 추가 처리를 시작할 수 있도록 최소한의 catcode(및 기타 코드)만 설정합니다.
2. (1)이 끝나면 사용자 제공 매크로 모음, 즉 "포맷"(예: Plain TeX 또는 LaTeX 매크로 모음)을 불러와 처리합니다.
3. (1)과 (2)를 성공적으로 완료한 뒤 TeX는 메모리에 로드되고 처리된 모든 것을 "이진 두뇌 덤프"하여 이진 *format* 파일(예: `lualatex.fmt`).

포맷 파일은 여러 내부 데이터 테이블(원시 명령 포함)을 초기화하고, 사용자 제공 매크로 모음에 있는 모든 매크로 명령을 처리한 뒤의 TeX의 "정신 상태"를 나타내는 내용을 저장하는 이진 파일입니다. TeX 엔진이 이런 방식을 쓰는 이유는, 예를 들어 Knuth의 Plain TeX나 LaTeX 매크로 패키지, 또는 실제로 어떤 "포맷"으로 설계된 매크로 패키지를 사용해 TeX 엔진을 실행할 때마다 원시 매크로를 다시 처리하는 것보다 "미리 컴파일된" 이진 파일을 불러오는 편이 더 빠르기 때문입니다.

예를 들어 LaTeX로 조판할 문서를 처리할 때, TeX 엔진은 LaTeX의 핵심 매크로를 모두 다시 읽고(재처리하고) 처리하는 것이 아니라, 대신 예를 들어 다음과 같은 이름의 이진 파일을 읽어들입니다 `lualatex.fmt`. 포맷 파일의 내부 세부 사항은 각 TeX 엔진과 해당 .fmt 파일을 생성하는 데 사용된 매크로 패키지의 각 버전에 따라 다릅니다 `.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년에 Karl Berry가 작성. 퍼블릭 도메인.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % latex.ltx 전에 job name 따옴표 처리를 설정
  % Web2c의 pdfTeX/XeTeX는 공백이 포함된 job name을 따옴표로 감싸지만, LuaTeX은
  % 엔진 수준에서는 이렇게 하지 않습니다. 이 동작은 다음을 사용해 변경할 수 있습니다:
  % 콜백을 통해. 원래 이 코드는 lualatexquotejobname.tex를 통해 로드되었지만
  % 그렇게 하려면 latex.ltx 주변에 해킹이 필요했습니다. 이제 동작이 변경되어
  % 콜백 경로를 직접 사용할 수 있게 되었습니다.
  \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` 파일은 일반적으로 pdfTeX나 XeTeX 같은 다른 TeX 엔진에서 사용할 수 있도록 이식 가능하지 않습니다. 더 나아가 LuaTeX 실행 파일이 새 기능으로 업데이트되면, `.fmt` 더 오래된 버전의 LuaTeX로 준비된 파일은 새 엔진에서 동작하지 않을 수 있습니다. 그 경우 다음을 다시 빌드(재컴파일)해야 합니다: `.fmt` 파일에 있습니다.

호환되지 않는 `.fmt` 파일을 사용하려고 하면 TeX 엔진이 이를 로드하지 못하고 다음 오류를 반환합니다:

```
치명적인 포맷 파일 오류; 막혔습니다
```

마찬가지로 핵심 LaTeX 매크로가 업데이트되면, 다음도 다시 빌드해야 할 수 있습니다: `lualatex.fmt` 파일도 생성해야 할 수 있습니다.

`.fmt` 파일은 LaTeX뿐만 아니라 적절한 어떤 매크로 패키지로도 만들 수 있습니다. 예를 들어 Knuth의 원래 버전이자 훨씬 단순한 "Plain" TeX 매크로도 처리하여 다음을 생성할 수 있습니다: `.fmt` 파일. 시간만 있다면 직접 매크로 모음을 작성해 그 패키지용 포맷 파일을 만들 수도 있습니다—주의할 점은, 매크로 패키지 어딘가에서 반드시 다음의 원시 명령을 호출해야 한다는 것입니다: `\dump` 이는 TeX 엔진에게 "이진 두뇌 덤프"를 수행하여 다음을 출력하라고 알려줍니다: `.fmt` 파일에 있습니다.

하지만 대부분의 사용자는 TeX 엔진의 "INI" 모드나 다음을 생성하는 과정에 대해 걱정할 필요가 없습니다: `.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/ko/in-depth-articles/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.
