> 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/11-boxes-and-glue-a-brief-but-visual-introduction-using-luatex.md).

# Boxes và Glue: Giới thiệu ngắn gọn nhưng trực quan bằng LuaTeX

## Phần giới thiệu cho các bài viết sắp tới

Bài viết này là phần giới thiệu ngắn gọn về một số khái niệm/mô hình chính liên quan đến việc dàn chữ với $$\mathrm \TeX$$: hộp và keo—“đặt bối cảnh” cho các bài viết sắp tới sẽ đi vào chi tiết hơn nhiều. Một bài viết sắp tới sẽ khám phá hành vi ở mức thấp của $$\mathrm \TeX$$ các hộp bằng $$\mathrm{Lua}\mathrm\TeX$$ để tạo ra các sơ đồ (đồ thị nút) như ví dụ sau:

![Đồ thị nút của một hộp](/files/4a159631cca0f899132953c0b6226df4b0700ffb)

Đồ thị nút này được tạo ra từ một `\hbox{...}` được tạo bằng đoạn $$\mathrm \TeX$$ mã sau:

```latex

\hbox to100pt{A\hskip4pt plus3pt minus 2pt B%
\hskip 0pt plus 2fil C\hskip 0pt plus 2fill D\hskip 0pt plus 3fill}
```

trông như thế này (được vẽ bằng một hình chữ nhật bao quanh):

![Ví dụ \hbox](/files/c84d98e47182d95f4278a7a914bec32ea59d90da)

Những đồ thị nút này cho thấy cấu trúc bên trong sâu của $$\mathrm \TeX$$ các hộp—phản ánh cách chúng được lưu trữ bên trong $$\mathrm \TeX$$ và cung cấp một mô tả đồ họa vô giá giúp hiểu rõ hơn hành vi của các lệnh tạo hộp như `\hbox{...}` hoặc `\vbox{...}`.

## Quay lại những điều cơ bản...

Ngay cả khi là một người dùng mới, hoặc dùng không thường xuyên, $$\mathrm \LaTeX$$ bạn cũng sẽ sớm bắt gặp khái niệm về $$\mathrm \TeX$$ “hộp” hoặc rằng $$\mathrm \TeX$$ sử dụng mô hình “hộp và keo” cho các hoạt động dàn chữ cốt lõi. Các thuật toán dàn chữ của $$\mathrm \TeX$$ dành phần lớn thời gian để tạo rồi xếp chồng các danh sách hộp theo chiều ngang và dọc. Ví dụ, khi $$\mathrm \TeX$$ khi dàn một đoạn văn bản và ngắt nó thành một chuỗi các dòng, nó coi văn bản của đoạn như một dòng chảy hoặc một dãy các hộp và sử dụng chiều rộng, chiều cao và độ sâu của các hộp ký tự đó (thực ra là các glyph) để tìm các điểm ngắt dòng tốt nhất rồi thêm khoảng trắng theo chiều dọc giữa các dòng văn bản đã dàn (phần keo đó được gọi là `\baselineskip`). Mỗi dòng của đoạn sau khi dàn tự nó cũng là một hộp (chứa các hộp khác—ví dụ như ký tự) và các dòng của đoạn đã dàn (các hộp) được xếp chồng theo chiều dọc để tạo thành đoạn văn. Cuối cùng, hộp lớn nhất trong tất cả được tạo ra: trang đã dàn. Rõ ràng đây là một bức tranh cực kỳ đơn giản hóa vì bạn còn cần khả năng di chuyển và định vị các hộp đó và $$\mathrm \TeX$$ làm điều này bằng cái gọi là *keo*: một dạng “khoảng cách linh hoạt”. Knuth đã nhận xét (trang 70 của cuốn The $$\mathrm \TeX \mathrm{book}$$) rằng “glue” có lẽ nên được gọi là “spring” nhưng thuật ngữ glue đã được chấp nhận từ sớm và, để dùng cách chơi chữ của Knuth, nó đã bám chặt.

## Trực quan hóa một đoạn văn đã dàn bằng $$\mathrm{Lua}\mathrm\TeX$$

Sử dụng $$\mathrm{Lua}\mathrm\TeX$$, một đoạn văn đã dàn có thể được xử lý để hiển thị các thành phần dùng để dàn nó: các hộp ký tự và phần keo linh hoạt dùng để tạo khoảng cách giữa các từ. Chúng tôi đã tạo một dự án [$$\mathrm{Lua}\mathrm\TeX$$ (plain $$\mathrm \TeX$$) dự án](https://www.overleaf.com/latex/examples/using-a-luatex-callback-to-parse-typeset-paragraphs/mzbpwxtjshsj) để minh họa điều này:

[![Screenshot of Overleaf](/files/0ede97606ccc1de6a7cbe84f3743871185653f52)](https://www.overleaf.com/latex/examples/using-a-luatex-callback-to-parse-typeset-paragraphs/mzbpwxtjshsj)

Mã của dự án được viết để minh họa cho bài viết này và không phải là một triển khai hoàn chỉnh của “bộ phân tích” đoạn văn—nó bỏ qua một số $$\mathrm{Lua}\mathrm \TeX$$ loại nút và chỉ được thiết kế nhằm minh họa các ý tưởng được thảo luận trong bài viết này.

![hộp và keo](/files/f42b6c6c77cccc2c52aa2668d33eb411a79c2d8e)

Trong phần hình phóng to bên dưới, bạn có thể thấy từng dòng của đoạn văn được tô thành các dải màu xám—lưu ý có khoảng trắng giữa các dòng: đó là keo theo chiều dọc mà $$\mathrm \TeX$$ được chèn vào khi nó xếp chúng lại để tạo thành đoạn văn. Nếu bạn muốn biết thêm về keo theo chiều dọc được chèn giữa các dòng trong một đoạn đã dàn, hãy dùng Google để tìm các bài viết thảo luận về `\baselineskip` và `\lineskiplimit`.

![đoạn văn đã phân tích hiển thị hộp và keo](/files/7afab7d05c51c5d9c81c900968918268aa6cc06a)

Khi $$\mathrm \TeX$$ khi đọc và dàn một đoạn văn, nó chuyển các ký tự khoảng trắng giữa các từ thành các khối keo mà giá trị chính xác của chúng là một thuộc tính của phông chữ đang được dùng. Trong quá trình dàn chữ, các khối keo giữa từ này được kéo giãn hoặc co lại theo mức được xem là cần thiết để đạt một ngắt dòng hài hòa. Trong hình trên, bạn nên lưu ý những điều sau:

* các dải xám là ranh giới của từng dòng trong đoạn văn đã dàn;
* mỗi ký tự được hiển thị trong một hộp xác định kích thước của nó (theo cách $$\mathrm \TeX$$ mà nó nhìn thấy);
* các hộp màu vàng cho thấy phần keo mà $$\mathrm \TeX$$ đã chèn giữa các từ để đạt được một ngắt dòng hài hòa. Hãy quan sát điều sau:
* độ rộng của keo giữa các từ thay đổi từ dòng này sang dòng khác khi $$\mathrm \TeX$$ nó kéo giãn hoặc co lại để tạo ra từng ngắt dòng;
* ở dòng thứ ba, phần keo sau ký tự dấu chấm rộng hơn các phần keo khác trên cùng dòng.
* ô đỏ cho thấy nơi một `\hbox{...}` được dùng rõ ràng. Định nghĩa của `\TeX` lệnh đặt chữ E vào một `\hbox{...}` để nó có thể được hạ xuống nhằm tạo ra $$\mathrm \TeX$$ logo.

Ở cuối đoạn ví dụ của chúng ta có một dải keo dài được gọi là `\parfillskip`: phần này được chèn bởi $$\mathrm \TeX$$ các bộ máy dàn chữ để lấp đầy khoảng trống ở dòng cuối. ![parfillskip glue](/files/65740c223ac35073d607dd1496217b0cd7e0e7d7)

### Hẹn gặp ở bài viết tiếp theo

Chúng tôi hy vọng bài viết này đã cung cấp một phần giới thiệu hữu ích về nguyên lý hộp và keo được dùng trong $$\mathrm \TeX$$. Trong một bài viết sắp tới, chúng ta sẽ dùng $$\mathrm{Lua}\mathrm\TeX$$ để đi sâu hơn nhiều vào nội dung của $$\mathrm \TeX$$ các hộp—bằng cách dùng các đồ thị nút như ví dụ được hiển thị ở đầu bài viết này.


---

# 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/11-boxes-and-glue-a-brief-but-visual-introduction-using-luatex.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.
