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

# \expandafter hoạt động như thế nào: Giới thiệu về các token TeX

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

## Bối cảnh cho \expandafter: các token TeX và danh sách token

Là bước đầu tiên để hiểu cách `\expandafter` thực sự hoạt động, chúng ta sẽ xem xét hai thành phần của TeX là nền tảng cho hoạt động của `\expandafter`: các token TeX (các số nguyên) và danh sách token (danh sách các số nguyên). Những độc giả muốn tìm hiểu kỹ hơn về các chủ đề đó có thể quan tâm đến các bài viết sau do Overleaf xuất bản:

* [Token TeX là gì?](/latex/vi/bai-viet-chuyen-sau/53-what-is-a-tex-token.md)
* [Danh sách token TeX là gì?](/latex/vi/bai-viet-chuyen-sau/54-what-is-a-tex-token-list.md)-[Macro TeX thực sự hoạt động như thế nào?](/latex/vi/chu-de-khac/01-a-six-part-series-how-do-tex-macros-actually-work.md)

### Dữ liệu token đến từ đâu?

Trong suốt bài viết này, chúng tôi sử dụng các giá trị token thực tế do TeX tính toán—những dữ liệu mà người dùng thường không thể truy cập. Đối với những độc giả tò mò muốn biết dữ liệu giá trị token này được lấy như thế nào, Overleaf có các bản dựng tùy biến của một số bộ máy TeX mà chúng tôi dùng cho nghiên cứu. Những bộ máy đó được sửa đổi để xuất ra thông tin về các hoạt động xử lý nội bộ của TeX—giúp cung cấp thêm tư liệu nền cho một số bài viết chúng tôi thực hiện. Bằng cách hiển thị/thảo luận các giá trị token dạng số, mục tiêu của chúng tôi là đưa vào những chi tiết mà, hy vọng, sẽ giúp độc giả hiểu rõ hơn về “token TeX”, khiến khái niệm quan trọng này bớt mơ hồ hơn một chút.

## TeX Tokens 101 (và khái niệm mở rộng)

Khi TeX xử lý tệp đầu vào của bạn, nó đọc văn bản và chuyển từng ký tự riêng lẻ cùng các chuỗi ký tự (lệnh) thành cái gọi là *token*. Token TeX đơn giản là một giá trị số nguyên, do TeX tính toán, được dùng để “mã hóa” dữ liệu mà TeX cần lưu về một mục được đọc vào từ nguồn đầu vào hiện tại của nó. Hãy xem token như những gói thông tin nhỏ “đóng gói cùng nhau” dữ liệu mà TeX cần ghi lại, sẵn sàng để chuyển sang giai đoạn xử lý tiếp theo. Ở bên trong, TeX hoạt động trên các giá trị token số nguyên đó—nó không dùng các chữ cái, ký hiệu, chữ số thực tế vốn có trong tệp đầu vào của bạn: mọi thứ đều được chuyển thành token (một số nguyên) và TeX làm việc với những token đó.

## Cách TeX tính giá trị token

Ở đây chúng ta xem xét các phép tính token được dùng trong TeX nguyên bản của Knuth, e-TeX và pdfTeX; đối với các bộ máy TeX khác, đặc biệt là XeTeX và LuaTeX, các phép tính token của chúng cần hơi khác để tính đến việc sử dụng Unicode nhưng các phương pháp tính toán thì tương tự như mô tả bên dưới.

### Token ký tự (các ký tự không hoạt hóa)

Việc tính giá trị token cho các ký tự không hoạt hóa rất đơn giản:

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

**Ví dụ**: Chữ A với [mã loại](/latex/vi/chu-de-khac/43-table-of-tex-category-codes.md) 11, mã ký tự 65 được TeX biểu diễn bằng giá trị token ký tự $$256\times 11 + 65 = 2881$$.

Bạn có thể gặp các mô tả trong tài liệu TeX lưu ý rằng một khi TeX đã nhận vào một ký tự, giá trị mã danh mục của nó sẽ trở thành “gắn chặt vĩnh viễn” với ký tự đó: phép tính giá trị token ở trên cho thấy vì sao điều đó đúng. Tuy nhiên, về sau trong quá trình xử lý của TeX, nó có thể, và thực sự có, “giải đóng gói” các token ký tự để lộ ra cặp thành phần (mã ký tự, mã danh mục) từ đó token được tạo ra—khi TeX làm điều đó “giải đóng gói”, nó vẫn sẽ không thay đổi mã danh mục của ký tự đó, mà chỉ dùng thông tin ấy trong quá trình xử lý tiếp theo.

### Token lệnh

Việc xử lý đầu vào và tạo token của TeX nhận diện hai loại lệnh:

* các lệnh được tạo từ một hoặc nhiều ký tự có mã danh mục 11;
* các lệnh một ký tự, trong đó mã danh mục của ký tự đó không phải 11: chẳng hạn như `\$` hoặc `\#`.

Trong cả hai trường hợp, TeX loại bỏ ký tự `\` đầu tiên và sử dụng mã ký tự của mỗi ký tự còn lại để tính một số nguyên mà TeX gọi là `curcs` (**cur**rent **c**ontrol **s**equence). TeX sau đó sử dụng giá trị của `curcs` để tính giá trị token cho lệnh.

#### Các lệnh được tạo từ các ký tự có mã danh mục 11

Giả sử lệnh của chúng ta (bỏ ký tự đầu tiên) được cấu thành từ một chuỗi các ký tự: `\` đầu tiên) được cấu thành từ một chuỗi các ký tự: $$\mathrm{C\_1C\_2C\_3...C\_N}$$ trong đó $$\mathrm{C}\_i$$ là mã ký tự của từng ký tự—ví dụ, mã ký tự của A là 65. TeX sử dụng tất cả các mã ký tự $$\mathrm{C}\_i$$ để tính số nguyên `curcs` (sử dụng một [hàm băm](https://en.wikipedia.org/wiki/Hash_function)). Khi TeX đã tính được giá trị của `curcs` nó chỉ cần cộng thêm 4095 vào giá trị đó để tạo ra giá trị token:

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

Lưu ý rằng biến `curcs` đóng một vai trò cực kỳ quan trọng trong các hoạt động xử lý bên trong của TeX.

#### Lệnh một ký tự

Các token biểu diễn các lệnh như `\$`, `\#` v.v. được tính theo một cách hơi khác: số nguyên `curcs` lúc này được tính đơn giản như sau:

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

Ví dụ, với `\$`, $$\text{curcs}=257 + 36 = 293$$. TeX lại cộng 4095 vào giá trị này (sử dụng $$\text{command token} = \text{curcs} + 4095$$) dẫn đến `\$` có giá trị token $$293 + 4095 = 4388$$.

So với các lệnh gồm các ký tự có mã danh mục 11, điểm khác duy nhất ở đây là cách TeX tính giá trị cho `curcs`.

**Lưu ý**: số nguyên `curcs` không được tính đối với token ký tự: nó luôn được đặt bằng 0 khi TeX tạo hoặc làm việc với token ký tự.

#### Token ký tự hoạt hóa

TeX có khái niệm gọi là *các ký tự hoạt hóa*: bất kỳ ký tự nào được gán mã danh mục 13. Token cho lớp ký tự đặc biệt này được tính khác với các ký tự thông thường.

Cơ chế ký tự hoạt hóa cho phép TeX tạo ra, trên thực tế, các macro một ký tự mà bạn có thể dùng *không có* mà không cần đặt trước ký tự hoạt hóa bằng một ký tự thoát (thường là `\`): ký tự đứng riêng lẻ sẽ kích hoạt hành vi macro của nó. Ví dụ điển hình là ký tự dấu ngã (\~) mà TeX/LaTeX dùng cho khoảng trắng không ngắt, có thể được định nghĩa/bật như sau:

```
\catcode`~=13 %assign category code 13 to ~
\def~{\penalty100000\ } % define ~ to act as a macro
```

Khi TeX sau đó đọc một `~` ký tự, nó sẽ phát hiện mã danh mục của nó là 13 và xử lý nó như một “macro mini”. Để tính một token biểu diễn ký tự hoạt hóa, TeX áp dụng một biến thể khác để tính `curcs`:

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

Ví dụ, ký tự \~ có mã ký tự 126, nghĩa là giá trị token ký tự hoạt hóa của nó được tính như sau:

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

Lưu ý rằng, giống như các lệnh, các token biểu diễn ký tự hoạt hóa đều > 4095.

### Hệ quả/ghi chú

* Bất kỳ token nào có giá trị vượt quá 4095 đều ngay lập tức được nhận diện là token lệnh—do đó TeX có thể rất dễ dàng phát hiện một token cụ thể biểu diễn một ký tự hay một lệnh.
* Với bất kỳ giá trị token nào, TeX có thể, khi cần, “giải đóng gói” token đó để hiển thị ký tự (và mã danh mục của nó), hoặc lệnh, vốn ban đầu có trong `.tex` tệp của bạn, được lưu trong một định nghĩa macro hoặc chứa trong một danh sách token khác.
* Đại lượng “trung gian” gọi là `curcs`—mà TeX dùng để tính giá trị token lệnh—đóng vai trò quan trọng trong xử lý cấp thấp của TeX. `curcs` đóng vai trò như một “giá trị chỉ mục” mà TeX dùng để lưu/tìm nghĩa hiện tại của một lệnh. Với bất kỳ token lệnh nào, $$\mathrm{T}$$, TeX chỉ cần trừ 4095 để truy cập giá trị của `curcs`: $$\text{curcs} = \mathrm{T}-4095$$

Nhân tiện, TeX có lưu chuỗi ký tự có thể đọc được bởi con người mà từ đó token lệnh được tạo ra—điều này rất cần thiết cho việc báo lỗi và các lệnh khác như `\string` mà phần mở rộng của nó là phiên bản có thể đọc được của một giá trị token. Tuy nhiên, các chuỗi ký tự có thể đọc được bởi con người được lưu bên trong TeX chỉ được dùng/xuất ra khi được yêu cầu: trong mọi xử lý khác, giá trị số nguyên của token được sử dụng.

## Xem một số token thực tế

Để khái niệm token bớt mơ hồ hơn một chút, chúng ta sẽ định nghĩa macro đơn giản sau và xem các token mà TeX tạo ra:

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

Đối với `\hello` macro, TeX sử dụng các ký tự `h`, `e`, `l`, `l`, `o` để tính giá trị 3745 cho `curcs`; sau đó TeX cộng 4095 để tạo ra giá trị token $$3745 + 4095 = 7840$$ (đối với TeX của Knuth, e-TeX hoặc pdfTeX).

Sau khi tạo một token để biểu diễn `\hello`, còn `\def` lệnh khiến TeX đọc các token tiếp theo và dùng chúng để tạo ra một danh sách token được lưu như là *định nghĩa* của `\hello` lệnh. Định nghĩa đã lưu (danh sách token) đó sau đó có thể được truy xuất bất cứ khi nào bạn yêu cầu TeX sử dụng `\hello` lệnh này.

Bảng sau liệt kê các giá trị token thực tế được tạo cho từng mục (ký tự, macro hoặc primitive) có trong `\hello` định nghĩa macro—danh sách token (các số nguyên) này là thứ TeX lưu trong bộ nhớ của nó (dưới dạng cấu trúc dữ liệu được gọi là một [danh sách liên kết](https://en.wikipedia.org/wiki/Linked_list)). Những độc giả muốn hiểu kỹ hơn về danh sách token có thể xem bài viết của Overleaf [Danh sách token TeX là gì?](/latex/vi/bai-viet-chuyen-sau/54-what-is-a-tex-token-list.md)

|                       |                        |
| --------------------- | ---------------------- |
| **Giá trị token TeX** | **Mục được biểu diễn** |
| 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                  | o                      |
| 2925                  | m                      |
| 2592                  |                        |
| 5235                  | \TeX                   |
| 3118                  | .                      |
| 2592                  |                        |
| 7943                  | \hskip                 |
| 3121                  | 1                      |
| 3120                  | 0                      |
| 2928                  | p                      |
| 2932                  | t                      |

Trong danh sách token ở trên, các ký tự có mã danh mục 10, 11 hoặc 12. Ví dụ:

* các ký tự có mã danh mục 10 và mã ký tự 32, cho ra giá trị token $$256\times 10 + 32 = 2592$$
* `,` và `.` có mã danh mục 12 và các mã ký tự lần lượt là 44 và 46, cho ra các token:
* token cho `,` $$= 256 \times 12 + 44 = 3116$$
* token cho `.` $$= 256\times 12+ 46 = 3118$$

Bất cứ khi nào TeX sau đó gặp giá trị token 7840 (biểu diễn `\hello`) nó có thể, nếu cần, “giải đóng gói” token đó để trích xuất `curcs` thông qua phép tính đơn giản $$\text{curcs} = \text{token value} - 4095$$ (xem ở trên). Sử dụng giá trị của `curcs` TeX có thể tra cứu các bảng dữ liệu nội bộ của nó để xác định rằng token lệnh 7840 biểu thị một lệnh macro. Ngoài ra, cũng thông qua `curcs`, TeX cũng có thể tra cứu và lấy lại định nghĩa đã lưu của `\hello`.

Khi TeX cần xử lý đầy đủ token 7840, tức là để chạy `\hello` macro, nó không còn cần token 7840 nữa: token đó đã *hoàn thành nhiệm vụ của nó*—tức là nó đã kích hoạt TeX chạy macro `\hello`. TeX giờ có thể loại bỏ token 7840 và lấy các token biểu thị định nghĩa (danh sách token) được lưu trong bộ nhớ. Thực chất, lệnh `\hello` macro (token 7840) đã được *loại bỏ* khỏi nguồn đầu vào hiện tại của TeX và *được thay thế* bằng các token chứa trong định nghĩa của `\hello`. Điều chúng ta vừa mô tả là một dạng của *mở rộng token*.

Tính năng `\TeX` lệnh (giá trị token 5235 được liệt kê ở trên) được dùng trong `\hello` bản thân nó cũng là một macro được cấu tạo từ nhiều token hơn—vì vậy định nghĩa của nó cũng được lưu như một danh sách token:

|                       |                        |
| --------------------- | ---------------------- |
| **Giá trị token TeX** | **Mục được biểu diễn** |
| 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                      |

Nếu chúng ta thay thế `\hello` lệnh bằng danh sách đầy đủ các token tạo nên nó, bao gồm cả `\TeX` macro, thì đó sẽ là một danh sách khá dài—tức là, nếu chúng ta cũng *mở rộng* trang `\TeX` macro thì sẽ thấy:

![Danh sách các token được lưu trong một macro TeX](/files/6aef33749e6e124768fe21f4e99d0d63ca378739)

Về cơ bản, giá trị token đơn lẻ 7840 (cho `\hello`) khi được mở rộng đầy đủ sẽ tạo ra tổng cộng 51 token (các số nguyên) biểu diễn các ký tự và các lệnh nguyên thủy. Trong danh sách sau, ký tự hoặc lệnh được biểu diễn bởi mỗi token được đặt trong ngoặc đơn “(...)”—những thứ này không được lưu trực tiếp trong các danh sách token của TeX và được hiển thị để hỗ trợ người đọc:

```
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)
```

Đối với người đọc, đây chỉ là một chuỗi các số nguyên nhưng đối với TeX nó mã hóa rất nhiều thông tin.

## Đọc token ngay và lưu chúng để dùng sau

Khi TeX đọc đầu vào của bạn, đôi khi nó cần (hoặc được chỉ thị) trì hoãn việc xử lý đầy đủ một tập hợp token cụ thể nào đó. Nếu được yêu cầu như vậy, TeX sẽ, cho đến khi được bảo dừng, tiếp tục tạo token từ đầu vào nhưng lưu chúng để dùng về sau—sau đó truy xuất và xử lý chúng như một phần trong hoạt động dàn trang của nó. Những token được lưu này được lưu dưới dạng cái gọi là *danh sách token* vốn trên thực tế là cơ chế lưu trữ dữ liệu token nội bộ duy nhất của TeX.

Chúng ta đã thấy các ví dụ về danh sách token—đó là `\hello` và `\TeX` các macro được liệt kê ở trên: định nghĩa của các macro đó được lưu trong bộ nhớ của TeX dưới dạng các danh sách token. TeX sẽ chỉ xử lý (thực thi) các danh sách token như vậy khi bạn quyết định gọi các macro đó. Cũng hãy nhớ rằng mỗi token (giá trị số nguyên) mã hóa đủ thông tin để TeX dễ dàng xác định liệu mỗi token được lưu trong một định nghĩa macro biểu diễn một ký tự hay một lệnh.

### Lưu token bằng các thanh ghi token

Một ví dụ khác về lưu trữ token là việc tạo rõ ràng các danh sách token được lưu trong cái gọi là *các thanh ghi token*: các vùng lưu trữ nội bộ chuyên dụng mà TeX cung cấp cho người dùng để lưu danh sách token. Primitive của TeX `\toksdef` là một cách để sử dụng các thanh ghi token; ví dụ, để dùng thanh ghi token `100` và tham chiếu nó bằng lệnh `\mylist`:

```
        \toksdef\mylist=100
        \mylist={một vài token \TeX{} ở đây}
```

`\mylist` trên thực tế chỉ là một tên mà bạn gán cho một danh sách token được lưu ở vị trí thanh ghi `100`. Tương tự như một định nghĩa macro, `\mylist` chứa danh sách token sau:

|                       |                        |
| --------------------- | ---------------------- |
| **Giá trị token TeX** | **Mục được biểu diễn** |
| 2931                  | s                      |
| 2927                  | o                      |
| 2925                  | m                      |
| 2917                  | e                      |
| 2592                  |                        |
| 5235                  | \TeX                   |
| 379                   | {                      |
| 637                   | }                      |
| 2592                  |                        |
| 2932                  | t                      |
| 2927                  | o                      |
| 2923                  | k                      |
| 2917                  | e                      |
| 2926                  | n                      |
| 2931                  | s                      |
| 2592                  |                        |
| 2920                  | h                      |
| 2917                  | e                      |
| 2930                  | r                      |
| 2917                  | e                      |

**Lưu ý**: để kết thúc `\TeX` macro và ngăn nó hấp thụ `<space>` ký tự theo sau, chúng ta đã dùng một cặp dấu ngoặc nhọn `{}` ngay sau `\TeX`—các token cho `{` (379) và `}` (637) được lưu trong danh sách token. Một lựa chọn khác là dùng token “khoảng trắng điều khiển” `\<space>` mà sẽ xuất hiện trong danh sách token như minh họa bên dưới (in đậm):

|                       |                        |
| --------------------- | ---------------------- |
| **Giá trị token TeX** | **Mục được biểu diễn** |
| 2931                  | s                      |
| 2927                  | o                      |
| 2925                  | m                      |
| 2917                  | e                      |
| 2592                  |                        |
| 5235                  | \TeX                   |
| **4384**              | **\\**                 |
| 2932                  | t                      |
| 2927                  | o                      |
| 2923                  | k                      |
| 2917                  | e                      |
| 2926                  | n                      |
| 2931                  | s                      |
| 2592                  |                        |
| 2920                  | h                      |
| 2917                  | e                      |
| 2930                  | r                      |
| 2917                  | e                      |

Lưu ý rằng `<space>` ký tự được biểu diễn như một *token ký tự* với giá trị $$256\times 10 + 32 = 2592$$ nhưng `\﻿<space>` được xem như một *token lệnh* (giá trị 4384) được tính theo các công thức nêu ở trên:

\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\*}

Về cơ bản `\mylist={một vài token \TeX{} ở đây}` nói với TeX: vui lòng quét tệp đầu vào của tôi để chuyển các ký tự/lệnh sau thành token và lưu chúng để dùng sau. TeX sẽ làm theo và lưu các token đó ở một vị trí bộ nhớ mà bạn có thể truy cập bằng cách viết `\the\mylist`, yêu cầu TeX chèn một bản sao của các token chứa trong thanh ghi token `\mylist`. Các bộ máy TeX bao gồm một số lệnh nguyên thủy tạo và lưu danh sách token một cách tường minh—chẳng hạn như `\everyjob`, `\everypar`, `\mark`, và nhiều lệnh khác.

[Phần 1](/latex/vi/bai-viet-chuyen-sau/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Phần 2](/latex/vi/bai-viet-chuyen-sau/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Phần 3](/latex/vi/bai-viet-chuyen-sau/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Phần 4](/latex/vi/bai-viet-chuyen-sau/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Phần 5](/latex/vi/bai-viet-chuyen-sau/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Phần 6](/latex/vi/bai-viet-chuyen-sau/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/vi/bai-viet-chuyen-sau/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.
