> 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/03-a-six-part-article-series-on-expandafter-tex-tokens-and-expansion.md).

# Chuỗi bài viết gồm sáu phần về \expandafter, các token TeX và phép mở rộng

## Tổng quan

Lệnh nguyên thủy TeX `\expandafter` là một lệnh đa năng, được các lập trình viên LaTeX/TeX dùng để tạo ra các macro tinh vi—chẳng hạn như các lệnh (macro) do các gói LaTeX cung cấp. Bề ngoài, `\expandafter` rất dễ sử dụng nhưng lớp vỏ đơn giản đó nhanh chóng biến mất khi bạn gặp những cấu trúc phức tạp hơn như nhiều lệnh liên tiếp `\expandafter` các lệnh được dùng để thực hiện đủ kiểu “xáo trộn token” `...\expandafter\expandafter\expandafter...`.

Loạt bài này có một mục tiêu tham vọng: giải thích *cách* trang `\expandafter` lệnh, và phép mở rộng TeX, thực sự hoạt động như thế nào—từ các nguyên lý cơ bản cho đến việc khám phá các quy trình diễn ra sâu bên trong phần mềm bộ máy TeX. Bạn đọc có thể nhảy thẳng đến các [bài viết](#accessing-articles-the-navigation-bar) hoặc đọc một [phần giới thiệu](#introduction-and-who-is-this-series-for) và lý do, cũng như cơ sở của loạt bài.

## Truy cập các bài viết: thanh điều hướng

Mỗi bài viết đều có thanh điều hướng sau đây ở trước và sau phần nội dung để bạn có thể nhanh chóng chuyển sang bài viết khác trong loạt bài:

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

Dưới đây là các liên kết tới 6 bài viết trong loạt bài:

1. [Giới thiệu về các token TeX](/latex/vi/bai-viet-chuyen-sau/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md)
2. [Ý nghĩa của phép mở rộng](/latex/vi/bai-viet-chuyen-sau/22-how-does-expandafter-work-the-meaning-of-expansion.md)
3. [TeX sử dụng các danh sách token tạm thời](/latex/vi/bai-viet-chuyen-sau/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md)
4. [Từ các nguyên lý cơ bản đến việc khám phá mã nguồn của TeX](/latex/vi/bai-viet-chuyen-sau/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md)
5. [Một nghiên cứu tình huống chi tiết về macro](/latex/vi/bai-viet-chuyen-sau/17-how-does-expandafter-work-a-detailed-macro-case-study.md)
6. [Một nghiên cứu chi tiết về các lệnh liên tiếp `\expandafter` lệnh](/latex/vi/bai-viet-chuyen-sau/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Giới thiệu và loạt bài này dành cho ai?

### \expandafter: các nguyên lý hoạt động cơ bản

Mục đích của \expandafter là buộc mở rộng sớm một token trong đầu vào: khi có hai token liên tiếp trong đầu vào, $$\mathrm{T\_1}$$ và $$\mathrm{T\_2}$$, `\expandafter` sẽ lưu token $$\mathrm{T\_1}$$, mở rộng token $$\mathrm{T\_2}$$ và đặt token $$\mathrm{T\_1}$$ trở lại trước phần mở rộng của $$\mathrm{T\_2}$$:

$$\verb\*\expandafter\*\ \mathrm{T\_1}\mathrm{T\_2} \rightarrow \mathrm{T\_1}\text{\<expansion of }\mathrm{T\_2}\text{>}$$

Theo mô tả tiêu chuẩn về `\expandafter`của nó, chúng ta đã lưu ý rằng nó “lưu token $$\mathrm{T\_1}$$”, buộc “mở rộng” token $$\mathrm{T\_2}$$ (trước khi TeX thường làm như vậy) rồi sau đó đặt token $$\mathrm{T\_1}$$ “trở lại vào đầu vào” để TeX đọc lại. Tác giả của bài viết này nhớ rằng mình đã từng bối rối trước một số khía cạnh của `\expandafter`hành vi “xáo trộn token” của nó; đặc biệt là:

* “Lưu một token” hay “đặt một token trở lại vào đầu vào” nghĩa là gì—những token đã lưu này “đi đâu” và TeX đọc lại chúng như thế nào?
* Phép mở rộng “trông như thế nào” hoặc thực sự có nghĩa là gì?
* TeX xử lý nhiều lệnh liên tiếp như thế nào `\expandafter` lệnh—điều đó *thực sự* hoạt động như thế nào?

### Mục tiêu của loạt bài

Loạt bài này nhằm giải đáp các câu hỏi nêu trên bằng cách ghi lại kết quả nghiên cứu về cơ chế bên trong của TeX. Overleaf đã xây dựng một phiên bản tùy biến của một trong các bộ máy TeX và sử dụng [Eclipse IDE](https://www.eclipse.org/ide/) để quan sát mã nguồn TeX đang hoạt động khi nó xử lý một `.tex` tệp chứa các ví dụ sử dụng `\expandafter`.

Chúng tôi sẽ chia sẻ kết quả của nghiên cứu đó để xem xét:

* bản chất/ý nghĩa thực sự của các token TeX;
* việc TeX tạo ra/sử dụng các danh sách token tạm thời;
* “mở rộng” thực sự nghĩa là gì.

Thông qua việc khám phá các chủ đề này, chúng ta sẽ ghép nối bức tranh tổng thể để giải thích *cách* `\expandafter` thực hiện hành vi “xáo trộn token” của nó. Loạt bài này được viết cho bất kỳ ai muốn hiểu sâu hơn về các chủ đề này: nhìn sâu hơn vào chính TeX, xem xét những phần trong các hoạt động nội bộ của TeX cho phép `\expandafter` phát huy “phép màu” của nó.

Viết các bài về TeX và các khái niệm/nguyên lý liên quan đến TeX là một thách thức vì TeX là một phần mềm phức tạp phi thường—mã nguồn đã dàn trang của nó dài hàng trăm trang. Ví dụ, hãy xem [dự án Overleaf](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) tài liệu này, mà theo mặc định sẽ dàn trang mã nguồn của $$\mathrm{\varepsilon}\text{-}\mathrm{\TeX}$$: tệp PDF đã dàn trang có hơn 600 trang.

Về mặt nội bộ, TeX là một mạng lưới phức tạp gồm các hành động và quá trình liên quan lẫn nhau, gây khó khăn khi cố gắng bàn về những khía cạnh riêng lẻ trong hành vi của nó: tách ra một “thành phần” cụ thể, chẳng hạn như `\expandafter`, và cố gắng giải thích nó mà không phải liên tục viện đến các khía cạnh khác của phần mềm TeX. Xét theo bản chất của nó, `\expandafter` lệnh tương tác với quá trình *mở rộng*—một quá trình mà, đối với nhiều người trong chúng ta, là một khái niệm mơ hồ và khá khó để hiểu đầy đủ. Tuy nhiên, phép mở rộng là một khía cạnh thực sự nền tảng trong hành vi của TeX, đan xen khắp các cơ chế bên trong của TeX và diễn ra sâu bên trong chính phần mềm TeX. Trong loạt bài này, chúng ta sẽ khám phá ý nghĩa thực sự của phép mở rộng, bắt đầu bằng việc tập hợp một tập hợp các nguyên lý và hành vi liên quan đủ để xây dựng hiểu biết cơ bản về phép mở rộng. Dựa trên những nền tảng đó, chúng ta kết thúc bằng một “cuộc đào sâu” để nhìn vào bên trong chính TeX, khám phá mã nguồn thực tế triển khai cơ chế mở rộng của TeX.

## Kết luận

Trong những bài viết này, chúng tôi đã cố gắng cung cấp nội dung hữu ích/có giá trị hoặc thú vị cho số lượng độc giả nhiều nhất có thể: cố gắng cân bằng giữa sự ngắn gọn với những chi tiết không thể tránh khỏi, đồng thời tránh làm mất kiên nhẫn của độc giả bằng cách cung cấp quá nhiều, hoặc quá ít, bối cảnh. Chúng tôi hy vọng đã đóng góp điều gì đó hữu ích/có giá trị cho kho tàng tài liệu về TeX, mà các thành viên hiện tại và có lẽ cả tương lai của cộng đồng TeX sẽ thích đọc.

Chúc bạn $$\mathrm{\TeX}\text{ing!}$$, từ Graham Douglas và đội ngũ Overleaf.


---

# 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/03-a-six-part-article-series-on-expandafter-tex-tokens-and-expansion.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.
