> 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/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md).

# \expandafter는 어떻게 작동하나요: TeX 토큰 소개

[1부](/latex/ko/in-depth-articles/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [2부](/latex/ko/in-depth-articles/22-how-does-expandafter-work-the-meaning-of-expansion.md) [3부](/latex/ko/in-depth-articles/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [4부](/latex/ko/in-depth-articles/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [5부](/latex/ko/in-depth-articles/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [6부](/latex/ko/in-depth-articles/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## \expandafter에 대한 배경: TeX 토큰과 토큰 목록

어떻게 작동하는지 이해하기 위한 첫 단계로 `\\expandafter` 실제로 작동하는지 살펴보기 위해, TeX의 작동에 근본적인 두 구성 요소를 살펴보겠습니다 `\\expandafter`: TeX 토큰(정수)과 토큰 목록(정수 목록)입니다. 이러한 주제를 훨씬 더 자세히 살펴보고 싶은 독자는 Overleaf에서 발행한 다음 글들을 읽어보면 좋을 것입니다:

* [TeX 토큰이란?](/latex/ko/in-depth-articles/53-what-is-a-tex-token.md)
* [TeX 토큰 목록이란?](/latex/ko/in-depth-articles/54-what-is-a-tex-token-list.md)-[TeX 매크로는 실제로 어떻게 작동하나요?](/latex/ko/more-topics/01-a-six-part-series-how-do-tex-macros-actually-work.md)

### 토큰 데이터는 어디에서 왔나요?

이 글 전반에서 우리는 TeX가 계산한 실제 토큰 값—보통 사용자가 접근할 수 없는 데이터—을 사용합니다. 이 토큰 값 데이터가 어떻게 얻어졌는지 궁금한 독자를 위해, Overleaf는 연구용으로 사용하는 여러 TeX 엔진의 맞춤 빌드를 보유하고 있습니다. 그 엔진들은 TeX의 내부 처리 활동에 대한 정보를 출력하도록 수정되어 있어, 우리가 제작하는 일부 글의 배경 자료를 보강하는 데 도움을 줍니다. 숫자 형태의 토큰 값을 보여주고 설명함으로써, 우리의 목표는 독자들이 “TeX 토큰”을 더 잘 이해하는 데 도움이 되는 세부 정보를 포함하는 것입니다. 이를 통해 이 중요한 개념이 조금 덜 난해하게 느껴지기를 바랍니다.

## TeX 토큰 101(및 확장 개념)

TeX가 입력 파일을 처리할 때 텍스트를 읽고 개별 문자와 문자들의 시퀀스(명령)를 이른바 *토큰*으로 변환합니다. TeX 토큰은 TeX가 계산하는 단순한 정수 값으로, 현재 입력 원본에서 읽어들인 항목에 대해 TeX가 저장해야 하는 데이터를 “인코딩”하는 데 사용됩니다. 토큰은 TeX가 기록해야 할 데이터를 “묶어” 담아 다음 처리 단계로 전달할 준비를 하는 작은 정보 꾸러미라고 생각하면 됩니다. 내부적으로 TeX는 이러한 정수 토큰 값을 다루며, 입력 파일에 원래 들어 있던 실제 글자, 기호, 숫자 등을 사용하지 않습니다. 모든 것은 토큰(정수)으로 변환되고, TeX는 그것을 가지고 작업합니다.

## TeX가 토큰 값을 계산하는 방법

여기서는 Knuth의 원래 TeX, e-TeX, pdfTeX에서 사용되는 토큰 계산을 살펴봅니다. 다른 TeX 엔진, 특히 XeTeX와 LuaTeX의 경우 Unicode 사용을 반영하기 위해 토큰 계산이 약간 달라야 하지만, 계산 방법은 아래에서 설명하는 것과 비슷합니다.

### 문자 토큰(비활성 문자)

비활성 문자의 토큰 값 계산은 간단합니다:

$$\text{character token} = 256\times \text{(category code)} + \text{character (ASCII) code}$$

**예제**문자 A는 [범주 코드](/latex/ko/more-topics/43-table-of-tex-category-codes.md) 11, 문자 코드 65는 TeX에서 문자 토큰 값 $$256\times 11 + 65 = 2881$$.

TeX 문헌에서, TeX가 문자를 입력하면 그 범주 코드 값이 그 문자에 “영구적으로 결합된다”고 설명하는 경우를 볼 수 있습니다. 위의 토큰 값 계산은 그 이유를 보여줍니다. 그러나 TeX의 이후 처리 과정에서는, 그리고 실제로 그렇게 하듯이, 문자 토큰을 “분해”하여 그 토큰이 만들어질 때 사용된 구성 요소인 (문자 코드, 범주 코드) 쌍을 드러낼 수 있습니다. TeX가 그렇게 “분해”할 때에도 그 문자의 범주 코드를 바꾸지는 않으며, 이후 처리에서 그 정보를 사용할 뿐입니다.

### 명령 토큰

TeX의 입력 처리와 토큰 생성은 두 가지 유형의 명령을 인식합니다:

* 범주 코드가 11인 하나 이상의 문자로 구성된 명령;
* 해당 문자의 범주 코드가 11이 아닌 단일 문자 명령; 예를 들면 `\$` 또는 `\#`.

두 경우 모두 TeX는 앞의 `\` 문자를 제외하고 나머지 각 문자의 문자 코드를 사용하여 TeX가 다음과 같이 부르는 정수를 계산합니다 `curcs` (**cur**rent **c**ontrol **s**equence). TeX는 이어서 `curcs` 의 값을 사용하여 명령의 토큰 값을 계산합니다.

#### 범주 코드가 11인 문자로 이루어진 명령

앞의 `\` 문자를 뺀 우리 명령이 다음과 같은 문자 시퀀스로 이루어져 있다고 가정해 봅시다: $$\mathrm{C\_1C\_2C\_3...C\_N}$$ 여기서 $$\mathrm{C}\_i$$ 는 각 문자의 문자 코드입니다—예를 들어 A의 문자 코드는 65입니다. TeX는 모든 문자 코드를 사용하여 $$\mathrm{C}\_i$$ 라는 정수를 계산합니다 `curcs` (다음과 같은 [해시 함수](https://en.wikipedia.org/wiki/Hash_function)를 사용하여). TeX가 `curcs` 의 값을 계산하면, 단순히 그 값에 4095를 더하여 다음 토큰 값을 만듭니다:

$$\text{command token} = \text{curcs + 4095}$$

변수 `curcs` 는 TeX의 내부 처리 활동에서 매우 중요한 역할을 합니다.

#### 단일 문자 명령

예를 들어 `\$`, `\#` 등을 나타내는 토큰은 약간 다른 계산을 거칩니다. 정수 `curcs` 에 대한 계산은 이제 더 간단해집니다:

$$\text{curcs} = 257 + \text{character (ASCII) code}$$

예를 들어, `\$`, $$\text{curcs}=257 + 36 = 293$$. TeX는 다시 이 값에 4095를 더하여( $$\text{command token} = \text{curcs} + 4095$$) 결과적으로 `\$` 는 토큰 값 $$293 + 4095 = 4388$$.

가 됩니다. 범주 코드가 11인 문자로 이루어진 명령과 비교했을 때, 여기서 유일한 차이는 TeX가 `curcs`.

**참고**의 값을 계산하는 방식입니다. 정수 `curcs` 는 문자 토큰에 대해 계산되지 않습니다. TeX가 문자 토큰을 만들거나 다룰 때 항상 0으로 설정됩니다.

#### 활성 문자 토큰

TeX에는 이른바 *활성 문자*라는 개념이 있습니다. 범주 코드 13이 할당된 모든 문자가 여기에 해당합니다. 이 특별한 종류의 문자에 대한 토큰은 일반 문자와 비교했을 때 다른 계산을 거칩니다.

활성 문자 메커니즘을 사용하면 사실상 단일 문자 매크로를 만들 수 있으며, 그것을 *없이* 활성 문자 앞에 이스케이프 문자를 붙이지 않고도(보통 `\`): 고립된 문자가 그 매크로 동작을 트리거합니다. 대표적인 예는 TeX/LaTeX에서 줄바꿈되지 않는 공백에 사용하는 물결표(\~) 문자로, 다음과 같이 정의/활성화할 수 있습니다:

```
\catcode`~=13 % ~에 범주 코드 13을 할당
\def~{\penalty100000\ } % ~가 매크로처럼 동작하도록 정의
```

TeX가 나중에 `~` 문자를 읽으면 범주 코드가 13임을 감지하고 이를 “미니 매크로”처럼 처리합니다. 활성 문자를 나타내는 토큰을 계산하기 위해 TeX는 `curcs`:

$$\begin{align\*} \text{curcs} &= \text{character code} + 1\ \text{active character token} &= \text{curcs} + 4095\ \end{align\*}$$

에 대한 계산의 또 다른 변형을 적용합니다

$$\begin{align\*} \text{curcs} &= 126 + 1\ \text{active character token} &= 127 + 4095\ &=4222\ \end{align\*}$$

예를 들어 \~ 문자는 문자 코드가 126이며, 활성 문자 토큰 값 표현은 다음과 같이 계산됩니다:

### 결과/참고

* 값이 4095를 초과하는 토큰은 즉시 명령 토큰으로 식별됩니다. 따라서 TeX는 특정 토큰이 문자를 나타내는지 명령을 나타내는지 매우 쉽게 감지할 수 있습니다.
* 어떤 토큰 값이든 TeX는 필요할 때 그 토큰을 “분해”하여 원래 귀하의 `.tex` 파일에 있던 문자(및 그 범주 코드) 또는 명령이 매크로 정의에 저장되어 있었거나 다른 토큰 목록에 들어 있었는지를 드러낼 수 있습니다.
* 이른바 `curcs`라는 “중간” 값은 TeX가 명령 토큰 값을 계산하는 데 사용하며, TeX의 저수준 처리에서 중요한 역할을 합니다. `curcs` 는 TeX가 명령의 현재 의미를 저장/조회하는 데 사용하는 “인덱스 값” 역할을 합니다. 어떤 명령 토큰이든, $$\mathrm{T}$$ , TeX는 단순히 4095를 빼서 `curcs`: $$\text{curcs} = \mathrm{T}-4095$$

의 값을 참조합니다. 덧붙여 말하자면, TeX는 명령 토큰이 생성된 문자들의 사람이 읽을 수 있는 문자열도 저장합니다. 이는 오류 보고와 다음과 같은 다른 명령에 필수적입니다 `\string` 이는 토큰 값의 사람이 읽을 수 있는 버전으로 확장됩니다. 그러나 TeX 내부에 저장된 이러한 사람이 읽을 수 있는 문자열은 요청될 때만 사용/출력되며, 그 밖의 모든 처리에서는 토큰 정수 값이 사용됩니다.

## 실제 토큰 몇 가지 살펴보기

토큰이라는 개념이 조금 덜 난해하게 느껴지도록, 다음과 같은 간단한 매크로를 정의하고 TeX가 생성하는 토큰을 살펴보겠습니다:

```
\def\hello{Greetings, from \TeX. \hskip 10pt}
```

대해 `\hello` 매크로의 경우, TeX는 문자 `h`, `e`, `l`, `l`, `또는` 를 사용하여 `curcs`에 대한 값 3745를 계산한 다음, TeX는 $$3745 + 4095 = 7840$$ 에 대해 토큰 값

를 나타내는 토큰을 만든 후에는 `\hello`에서 관찰했듯이, `\def` 명령은 TeX가 이어지는 토큰들을 읽어들여 토큰 목록을 만들도록 하며, 그 목록은 *정의* 로 저장됩니다 `\hello` 명령의 `\hello` 명령을 사용해.

아래 표는 `\hello` 매크로 정의에 들어 있는 각 항목(문자, 매크로 또는 원시 명령)에 대해 실제로 생성된 토큰 값을 나열합니다. 이 토큰들(정수)의 목록이 TeX가 메모리에 저장하는 것(연결 리스트라는 데이터 구조로)입니다. 토큰 목록을 더 자세히 이해하고 싶은 독자는 Overleaf 글 [링크드](https://en.wikipedia.org/wiki/Linked_list)를 참고하세요. [TeX 토큰 목록이란?](/latex/ko/in-depth-articles/54-what-is-a-tex-token-list.md)

|              |            |
| ------------ | ---------- |
| **TeX 토큰 값** | **표현된 항목** |
| 2887         | G          |
| 2930         | r          |
| 2917         | e          |
| 2917         | e          |
| 2932         | t          |
| 2921         | i          |
| 2926         | n          |
| 2919         | g          |
| 2931         | s          |
| 3116         | ,          |
| 2592         |            |
| 2918         | f          |
| 2930         | r          |
| 2927         | 또는         |
| 2925         | m          |
| 2592         |            |
| 5235         | \TeX       |
| 3118         | .          |
| 2592         |            |
| 7943         | \hskip     |
| 3121         | 1          |
| 3120         | 0          |
| 2928         | p          |
| 2932         | t          |

위의 토큰 목록에서 문자들은 범주 코드 10, 11 또는 12를 가집니다. 예를 들어:

* 문자들은 범주 코드 10과 문자 코드 32를 가지며, 토큰 값 $$256\times 10 + 32 = 2592$$
* `,` 및 `.` 을 줍니다. 문자들은 범주 코드 12와 문자 코드가 각각 44와 46이므로, 다음과 같은 토큰이 됩니다:
* 에 대한 토큰 `,` $$= 256 \times 12 + 44 = 3116$$
* 에 대한 토큰 `.` $$= 256\times 12+ 46 = 3118$$

TeX가 나중에 토큰 값 7840(을/를 나타내는)을 만나면 필요할 경우 그 토큰을 “분해”하여 `\hello`를 추출할 수 있습니다 `curcs` 라는 간단한 계산을 통해 $$\text{curcs} = \text{token value} - 4095$$ (위 참조). `curcs` 의 값을 사용하여 TeX는 내부 데이터 표를 조회해 명령 토큰 7840이 매크로 명령을 나타낸다는 것을 알아낼 수 있습니다. 또한 역시 `curcs`를 통해 TeX는 저장된 `\hello`.

의 정의를 조회하고 가져올 수 있습니다 `\hello` TeX가 토큰 7840을 완전히 처리해야 할 때, 즉 *을 실행할 때는 더 이상 토큰 7840이 필요하지 않습니다. 그 토큰은*을 촉발하는 역할을 `\hello`했습니다. 이제 TeX는 토큰 7840을 버리고 메모리에 저장된 정의(토큰 목록)를 나타내는 토큰들을 가져올 수 있습니다. 사실상 `\hello` 매크로 명령(토큰 7840)은 *제거* 되어 현재 입력 원본에서 *되고* 정의에 들어 있는 토큰으로 `\hello`대체 *되었습니다. 지금 우리가 설명한 것은*.

다음 `\TeX` 명령(위에 나열된 토큰 값 5235)은 `\hello` 자체가 더 많은 토큰으로 구성된 매크로이므로, 그 정의 역시 토큰 목록으로 저장됩니다:

|              |            |
| ------------ | ---------- |
| **TeX 토큰 값** | **표현된 항목** |
| 2900         | T          |
| 19598        | \kern      |
| 3117         | -          |
| 3118         | .          |
| 3121         | 1          |
| 3126         | 6          |
| 3126         | 6          |
| 3127         | 7          |
| 2917         | e          |
| 2925         | m          |
| 19597        | \lower     |
| 3118         | .          |
| 3125         | 5          |
| 2917         | e          |
| 2936         | x          |
| 6175         | \hbox      |
| 379          | {          |
| 2885         | E          |
| 637          | }          |
| 19598        | \kern      |
| 3117         | -          |
| 3118         | .          |
| 3121         | 1          |
| 3122         | 2          |
| 3125         | 5          |
| 2917         | e          |
| 2925         | m          |
| 2904         | X          |

우리가 `\hello` 명령을 그것이 구성되는 전체 토큰 목록으로 대체한다면, 여기에는 `\TeX` 매크로도 포함되므로 꽤 긴 목록이 될 것입니다. 즉, 우리가 또한 *확장* 다음 `\TeX` 한다면 다음을 보게 될 것입니다:

![TeX 매크로에 저장된 토큰 목록](/files/d7911b849e35d3864134f38360db78d4ba0ed9e6)

본질적으로 단일 토큰 값 7840( `\hello`)은 완전히 확장되면 문자와 원시 명령을 나타내는 총 51개의 토큰(정수)을 생성합니다. 다음 목록에서 각 토큰이 나타내는 문자 또는 명령은 괄호 “(...)” 안에 표시되어 있습니다. 이는 TeX의 토큰 목록에 직접 저장되는 것이 아니라 독자를 돕기 위해 보여주는 것입니다:

```
2887 (G), 2930 (r), 2917 (e), 2917 (e), 2932 (t), 2921 (i), 2926 (n), 2919 (g), 2931 (s), 3116 (,), 2592 (<space>), 2918 (f), 2930 (r), 2927 (o), 2925 (m), 2592 (<space>),  2900 (T), 19598 (\kern), 3117 (-), 3118 (.), 3121 (1), 3126 (6), 3126 (6), 3127 (7), 2917 (e), 2925 (m), 19597 (\lower), 3118 (.), 3125 (5), 2917 (e), 2936 (x), 6175 (\hbox), 379 ({), 2885 (E), 637 (}), 19598 (\kern), 3117 (-), 3118 (.), 3121 (1), 3122 (2), 3125 (5), 2917 (e), 2925 (m), 2904 (X), 3118 (.), 2592 (<space>), 7943 (\hskip), 3121 (1), 3120 (0), 2928 (p), 2932 (t)
```

인간 독자에게는 이것이 단지 정수들의 나열이지만, TeX에게는 매우 많은 정보를 인코딩합니다.

## 이제 토큰을 읽어들여 나중을 위해 저장하기

TeX가 입력을 읽을 때, 어떤 특정한 토큰 집합의 완전한 처리를 지연해야 하거나 그렇게 하라는 지시를 받는 경우가 있습니다. 그렇게 지시되면 TeX는 멈추라는 지시를 받을 때까지 입력으로부터 계속 토큰을 만들지만, 나중에 사용할 수 있도록 저장해 둡니다. 그런 다음 나중에 다시 불러와 인쇄 조판 작업의 일부로 처리합니다. 이렇게 저장된 토큰은 이른바 *토큰 목록* 으로 저장되며, 사실상 TeX의 유일한(내부) 토큰 데이터 저장 메커니즘입니다.

우리는 이미 토큰 목록의 예를 보았습니다—위에 나열된 `\hello` 및 `\TeX` 매크로들입니다. 해당 매크로들의 정의는 TeX의 메모리에 토큰 목록으로 저장됩니다. TeX는 여러분이 그 매크로들을 호출하기로 결정할 때에만 이러한 토큰 목록을 처리(동작)합니다. 또한 각 토큰(정수 값)은 매크로 정의에 저장된 각 토큰이 문자인지 명령인지 TeX가 쉽게 알아낼 수 있을 만큼 충분한 정보를 담고 있다는 점도 기억하세요.

### 토큰 레지스터로 토큰 저장하기

토큰 저장의 또 다른 예는 이른바 *토큰 레지스터*에 저장되는 토큰 목록을 명시적으로 만드는 것입니다. 이것은 TeX가 사용자에게 토큰 목록을 저장하도록 제공하는 전용 내부 저장 영역입니다. TeX 원시 명령 `\toksdef` 은 토큰 레지스터를 사용하는 한 가지 방법입니다. 예를 들어 토큰 레지스터 `100` 를 사용하고 명령 `\mylist`:

```
        \toksdef\mylist=100
        \mylist={some \TeX{} tokens here}
```

`\mylist` 은 사실상 위치 `100`에 저장된 토큰 목록에 여러분이 붙이는 이름일 뿐입니다. 매크로 정의와 비슷하게, `\mylist` 에는 다음과 같은 토큰 목록이 들어 있습니다:

|              |            |
| ------------ | ---------- |
| **TeX 토큰 값** | **표현된 항목** |
| 2931         | s          |
| 2927         | 또는         |
| 2925         | m          |
| 2917         | e          |
| 2592         |            |
| 5235         | \TeX       |
| 379          | {          |
| 637          | }          |
| 2592         |            |
| 2932         | t          |
| 2927         | 또는         |
| 2923         | k          |
| 2917         | e          |
| 2926         | n          |
| 2931         | s          |
| 2592         |            |
| 2920         | h          |
| 2917         | e          |
| 2930         | r          |
| 2917         | e          |

**참고**: 다음의 `\TeX` 매크로를 종료하고 뒤따르는 `<space>` 문자가 흡수되는 것을 막기 위해 우리는 중괄호 쌍을 `{}` 바로 뒤에 `\TeX`사용했습니다. 즉, 토큰 목록에는 `{` (379)와 `}` (637)의 토큰이 저장됩니다. 다른 방법으로는 “control space” 토큰 `\<space>` 을 사용하는 방법도 있으며, 이는 아래와 같이(굵게 표시하여) 토큰 목록에 나타납니다:

|              |            |
| ------------ | ---------- |
| **TeX 토큰 값** | **표현된 항목** |
| 2931         | s          |
| 2927         | 또는         |
| 2925         | m          |
| 2917         | e          |
| 2592         |            |
| 5235         | \TeX       |
| **4384**     | **\\**     |
| 2932         | t          |
| 2927         | 또는         |
| 2923         | k          |
| 2917         | e          |
| 2926         | n          |
| 2931         | s          |
| 2592         |            |
| 2920         | h          |
| 2917         | e          |
| 2930         | r          |
| 2917         | e          |

다음에 유의하세요 `<space>` 문자는 *문자 토큰* 로 표현되며 값은 $$256\times 10 + 32 = 2592$$ 하지만 `\<space>` 은 단일 문자 *명령 토큰* (값 4384)으로 취급되며, 위에 제시된 공식을 사용해 계산됩니다:

\begin{align\*} \text{curcs} & = 257 + \text{character (ASCII) code}\\\ & = 257 + 32\\\ &=289\\\ \text{command token for} \left<\text{\\\space}\right> & = \text{curcs + 4095}\\\ & = 289+4095\\\ &=4384\\\ \end{align\*}

본질적으로 `\mylist={some \TeX{} tokens here}` 는 TeX에게 다음과 같이 말합니다. 제 입력 파일을 스캔하여 다음 문자/명령을 토큰으로 변환하고 나중에 사용할 수 있도록 저장해 주세요. TeX는 이에 응답하고 그 토큰들을 메모리 위치에 저장하며, 여러분은 `\the\mylist`를 써서 접근할 수 있습니다. 이는 TeX에게 토큰 레지스터 `\mylist`에 들어 있는 토큰의 복사본을 삽입하라고 지시합니다. TeX 엔진에는 명시적으로 토큰 목록을 생성하고 저장하는 여러 원시 명령이 포함되어 있으며—예를 들어 `\everyjob`, `\everypar`, `\mark`등이 있고, 그 밖에도 많이 있습니다.

[1부](/latex/ko/in-depth-articles/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [2부](/latex/ko/in-depth-articles/22-how-does-expandafter-work-the-meaning-of-expansion.md) [3부](/latex/ko/in-depth-articles/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [4부](/latex/ko/in-depth-articles/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [5부](/latex/ko/in-depth-articles/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [6부](/latex/ko/in-depth-articles/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)


---

# 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/19-how-does-expandafter-work-an-introduction-to-tex-tokens.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.
