> 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/chu-de-khac/01-a-six-part-series-how-do-tex-macros-actually-work.md).

# Loạt 6 phần: Các macro TeX thực sự hoạt động như thế nào?

## Về loạt bài này

Loạt bài viết này có một mục tiêu đầy tham vọng: giải thích, từng bước, *cách* các macro TeX, chẳng hạn như các lệnh LaTeX, thực sự hoạt động như thế nào—bằng cách khám phá các quy trình diễn ra bên trong phần mềm bộ máy TeX. Bài viết cố gắng kể lại câu chuyện về cách TeX xử lý:

* đọc các ký tự đầu vào và sử dụng mã phân loại;
* việc tạo ra các token ký tự và token lệnh—và các công thức mà TeX sử dụng;
* cách TeX nhận diện rồi xử lý các lệnh TeX;
* các chi tiết nội bộ về việc lưu trữ định nghĩa macro và đối số macro dưới dạng danh sách token—sử dụng đồ họa được tạo từ dữ liệu nội bộ của TeX;
* và kết thúc bằng việc khám phá quá trình mở rộng macro *thực sự* có nghĩa là gì—sử dụng dữ liệu thực từ bên trong một bộ máy TeX.

Tuy nhiên, vì các bộ máy TeX là những chương trình phần mềm rất phức tạp nên chúng ta không thể hy vọng bao quát mọi thứ, nhưng chúng tôi đã cố gắng đề cập đến những tính năng cốt lõi, quan trọng nhất của khả năng xử lý macro của TeX.

#### 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](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_1?preview=true) [Phần 2](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_2?preview=true) [Phần 3](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_3?preview=true) [Phần 4](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_4?preview=true) [Phần 5](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_5?preview=true) [Phần 6](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_6?preview=true)

### Phần 1: Mã phân loại

Bài viết này xem xét lý do đằng sau khái niệm mã phân loại của TeX: chúng là gì và TeX sử dụng chúng như thế nào để lọc dữ liệu đầu vào thành nội dung dàn trang và các lệnh cần thực thi.

### Phần 2: Đọc đầu vào qua “đôi mắt” của TeX

Thông qua một loạt đồ họa, chúng tôi sử dụng phép so sánh đã được kiểm chứng theo thời gian rằng TeX có “đôi mắt” để đọc (quét) dữ liệu đầu vào. Chúng tôi khám phá các ví dụ về việc TeX dùng mã phân loại để tạo các token ký tự và cách TeX nhận diện, xử lý các lệnh bằng cách sử dụng mã phân loại 0 (“ký tự thoát”).

### Phần 3: Từ văn bản đầu vào đến các lệnh

Bài viết này đi sâu vào cách TeX nhận diện và xử lý các lệnh được phát hiện trong đầu vào. Chúng tôi khám phá cách TeX lưu trữ và truy xuất thông tin về các lệnh: mã lệnh, bộ biến đổi lệnh, và khảo sát một vài biến nội bộ mà TeX dùng để lưu thông tin về các mục được đọc vào từ đầu vào. Một số phần của bài viết là tài liệu khá cấp thấp, có thể bỏ qua trong lần đọc đầu tiên.

### Phần 4: Cấu trúc của một macro

Chúng tôi giới thiệu và sử dụng “khuôn khổ” sau đây để mô tả cấu trúc của các macro:

```
<nguyên thủy macro TeX><tên macro><văn bản tham số>{<văn bản thay thế>}
```

Sau đó chúng tôi khám phá một loạt ví dụ để minh họa vai trò và mục đích của `<parameter text>` như một “mẫu token” có thể được tạo thành thông qua việc sử dụng các token đóng vai trò như *dấu phân tách*.

### Phần 5: Danh sách token và lưu trữ macro nội bộ của TeX

Bài viết này khám phá chi tiết cách TeX sử dụng danh sách token để lưu trữ các định nghĩa macro. Bằng cách sử dụng các sơ đồ phong phú được tạo bằng một phiên bản TeX đã được sửa đổi đặc biệt, chúng tôi tìm hiểu các token chuyên dụng mà TeX dùng để nhận diện và xử lý đối số macro của người dùng.

### Phần 6: Mở rộng macro và xử lý

Trong Phần 6, chúng tôi sử dụng một số đồ họa chi tiết để giải thích và khám phá ý nghĩa chính xác của việc mở rộng macro và những hệ quả của việc TeX chuyển các đối số macro thành token trước khi đưa chúng vào macro.

## Ghi chú ngắn: Sử dụng “TeX” chứ không phải LaTeX

Như đã thảo luận trong bài viết [Tên gọi có ý nghĩa gì: Hướng dẫn về nhiều biến thể của TeX](/latex/vi/bai-viet-chuyen-sau/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) một loạt thuật ngữ được dùng để chỉ/mô tả TeX, LaTeX và các biến thể của chúng. Do đó, cũng đáng để làm rõ ngắn gọn cách chúng tôi dùng/hiểu “TeX” trong bối cảnh của loạt bài này.

“TeX”, khá dễ gây nhầm lẫn, vừa là tên của một chương trình thực thi vừa là tên của một ngôn ngữ dàn trang. Để phân biệt hai thứ này, thuật ngữ *bộ máy TeX* được dùng để phân biệt giữa một chương trình TeX thực thi và ngôn ngữ dàn trang. Một số dữ liệu, thông tin và chi tiết cụ thể được dùng trong loạt bài này được rút ra từ việc khảo sát chi tiết mã nguồn của phần mềm TeX nguyên bản của Knuth, nhưng các nguyên lý được mô tả là chung cho mọi bộ máy TeX. Vì vậy, xuyên suốt cuộc thảo luận của chúng tôi, “TeX” nên được hiểu là một trong các bộ máy TeX có thể thực thi—chẳng hạn như TeX nguyên bản của Knuth, pdfTeX, XeTeX hoặc LuaTeX.

Trong các bài viết, chúng tôi sử dụng lệnh nguyên thủy TeX `\def` để định nghĩa các ví dụ macro của chúng tôi: chúng tôi không dùng lệnh LaTeX `\newcommand` vốn có lẽ quen thuộc hơn với hầu hết người dùng Overleaf. Có một lý do rất chính đáng cho điều này: mục tiêu của chúng tôi là hiểu các nguyên lý nền tảng bên dưới hành vi macro của TeX, nhưng để làm được điều đó chúng tôi cần sử dụng các lệnh lõi (primitive) được tích hợp trong phần mềm TeX. Các lệnh LaTeX, chẳng hạn như `\newcommand`, bản thân chúng là các macro: những lệnh có hành vi được lập trình cụ thể và, cuối cùng, được cấu thành từ nhiều lớp lệnh nguyên thủy TeX ở mức thấp hơn. Để hiểu rõ hơn hành vi nền tảng của TeX, chúng ta phải dùng các nguyên thủy TeX, chứ không phải các macro LaTeX.

## Ví dụ và đồ họa

Thay vì chỉ dựa vào một bộ macro ví dụ được thiết kế để minh họa các tính năng, các trường hợp biên và hành vi khác nhau của TeX, chúng tôi còn sử dụng một loạt đồ họa phong phú để nhìn vào bên trong chính TeX nhằm xem *cách* và *vì sao* cách xử lý macro của nó hoạt động như vậy. Nhiều đồ họa (danh sách token/sơ đồ nút) đã được chuẩn bị bằng một phiên bản TeX nguyên bản của Knuth đã được sửa đổi đặc biệt.

Overleaf đã điều chỉnh TeX của Knuth bằng mã bổ sung (viết bằng C) để “móc vào” quá trình xử lý macro của TeX và khám phá dữ liệu cũng như các cấu trúc dữ liệu vốn bình thường người dùng không thể truy cập. Mỗi khi một macro được gọi, bộ máy TeX đã sửa đổi sẽ tạo thêm các tệp đầu ra chứa dữ liệu ở định dạng có thể được xử lý bằng [Graphviz](https://www.graphviz.org/), một chương trình trực quan hóa đồ thị mã nguồn mở. Kết quả cuối cùng là các đồ họa (sơ đồ danh sách nút) cho thấy chính xác cách TeX lưu trữ định nghĩa của một macro, cùng với biểu diễn đồ họa của bất kỳ đối số nào do người dùng cung cấp khi macro được gọi.

Do yêu cầu bắt buộc, mục tiêu của loạt bài này đòi hỏi thảo luận về một phạm vi rộng các chủ đề, nhiều chủ đề trong số đó khá ở mức thấp, và, lúc đầu, có thể dường như rất xa rời nhiệm vụ dàn trang tài liệu của bạn. Hy vọng rằng, sau khi đào sâu hơn, bạn sẽ có được một nền tảng để xây dựng sự hiểu biết tốt hơn, điều cuối cùng sẽ giúp bạn tiết kiệm rất nhiều thời gian và có lẽ cũng giảm bớt mức độ bực bội. Chúng tôi cũng hy vọng rằng các đồ họa được tạo riêng kèm theo loạt bài này sẽ mang lại một cái nhìn sâu sắc độc đáo để giúp đỡ và hỗ trợ mọi độc giả trong hành trình hiểu rõ hơn về các macro TeX.

## Phiên bản TeX tùy biến của Overleaf

Video này trình bày ngắn gọn phiên bản TeX đã được sửa đổi của Overleaf, được điều chỉnh để tạo các sơ đồ nút Graphiviz (`.gv` các tệp)—không có khía cạnh nào khác trong hành vi của TeX bị ảnh hưởng bởi những thay đổi đó. Các `.gv` tệp chứa các biểu diễn của danh sách token TeX được dùng để lưu trữ định nghĩa macro và đối số macro. Phần trực quan hóa Graphviz được xuất sang SVG rồi sau đó được nhập vào [Inkscape](https://inkscape.org/) để chú thích thêm trước khi đưa đồ họa vào bài viết.

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/40EAwKxZnNwgxwe9SpAwNY/5bce5de21509f3324bc50527ec6815e7/texdemo.mp4>" %}


---

# 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/chu-de-khac/01-a-six-part-series-how-do-tex-macros-actually-work.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.
