> 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/24-how-tex-calculates-glue-settings-in-an-hbox.md).

# Cách TeX tính toán các thiết lập glue trong một \hbox

Đây là bài viết thứ ba, và cũng là bài cuối cùng, trong một loạt bài xem xét $$\mathrm \TeX$$ hộp và keo. Bài đăng đầu tiên [Hộp và Glue: Giới thiệu ngắn gọn, nhưng trực quan, bằng LuaTeX](/latex/vi/bai-viet-chuyen-sau/11-boxes-and-glue-a-brief-but-visual-introduction-using-luatex.md) giới thiệu các khái niệm về hộp và keo và được tiếp nối bởi [Pandora’s \hbox: Sử dụng LuaTeX để mở nắp các hộp TeX](/latex/vi/bai-viet-chuyen-sau/36-pandora-s-hbox-using-luatex-to-lift-the-lid-of-tex-boxes.md) đã trình bày một [$$\text{Lua}\mathrm\TeX$$dự án Overleaf dựa trên nút](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) để khám phá các cấu trúc sâu hơn của $$\mathrm \TeX$$ hộp thông qua việc sử dụng đồ thị nút. Trong phần cuối này, chúng ta thực hiện một “đi sâu” vào cơ chế về cách $$\mathrm \TeX$$ tính toán các giá trị keo trong một `\hbox`: một quá trình được gọi là *đặt keo*. Chúng tôi sử dụng rộng rãi đồ thị nút (đã được giới thiệu trong [Pandora’s \hbox: Sử dụng LuaTeX để mở nắp các hộp TeX](/latex/vi/bai-viet-chuyen-sau/36-pandora-s-hbox-using-luatex-to-lift-the-lid-of-tex-boxes.md) trong loạt bài này) và chỉ ra cách sử dụng và diễn giải một số dữ liệu mà chúng cung cấp: `glue_set`, `glue_sign` và `glue_order`.

Chúng tôi cung cấp một ví dụ làm việc đầy đủ về các phép tính keo cho một `\hbox` và trình bày rất nhiều chi tiết; tuy nhiên, có thể còn những hoàn cảnh và cân nhắc bổ sung mà chúng tôi không có chỗ để đề cập ở đây, và độc giả quan tâm được mời xem trang 77 của $$\text{The } \mathrm \TeX \text{book}$$.

## Thách thức

Giả sử chúng ta có một `\hbox` như thế này:

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

Đây là hình dạng của hộp này — để rõ hơn, được phóng to và có viền:

![hộp](/files/d85fdf6e2e34957f3168424e99ca044ea96f4935)

Câu hỏi là: giá trị cuối cùng, tính bằng $$\mathrm \TeX$$ điểm, của khoảng trống (keo) giữa các mục sau là bao nhiêu:

* A và B
* B và C
* C và D
* D và cuối hộp

tức là, chúng ta muốn tính các giá trị của $$\mathrm{g}*{1}, \mathrm{g}*{2}, \mathrm{g}*{3} \text{ and } \mathrm{g}*{4}:$$

![glue](/files/ef301852fbe9e656df934ce943533f34d2fa5ff6)

Đây là một đồ thị nút biểu diễn hộp ở trên. Đáng chú ý nhất là ba giá trị nằm trong phần “siêu dữ liệu”:

* `glue_set`
* `glue_sign`
* `glue_order`

![đồ thị nút](/files/d1a1bdcaecdcc924967e296d1b55f60d59615d3a)

Điều quan trọng là phải lưu ý rằng một bộ giá trị cụ thể cho `glue_set`, `glue_sign` và `glue_order` chỉ ảnh hưởng đến các keo trong hộp cấp cao nhất: chúng không ảnh hưởng đến các keo bên trong *lồng* hộp: mỗi hộp lồng (đối tượng hlist hoặc vlist) có bộ giá trị riêng cho ba tham số này. Đây là một ví dụ về một `\hbox` được lồng bên trong một `\hbox`. Trong ví dụ này, bạn có thể thấy rõ các giá trị khác nhau của `glue_set`—dĩ nhiên, hộp lồng cũng có thể có các giá trị khác nhau của `glue_sign` và `glue_order`.

```latex
\hbox to 75pt{\hfill ABC\hbox to15pt{\hfill D}}
```

![đồ thị nút](/files/2eb3402d53d9f9922784efae04f38b2048db1e66)

## Các loại keo, vô cực và thứ tự: Tóm tắt

$$\mathrm \TeX$$ cung cấp một số lệnh nguyên thủy liên quan đến keo, bao gồm:

* keo ngang: `\hskip`, `\hfil`, `\hfill`, `\hfilneg`, `\hss`;
* keo dọc:`\vskip`, `\vfil`, `\vfill`, `\vfilneg`, `\vss`;

cùng với `\mskip` để chèn keo trong các biểu thức toán học.

Một mục keo được định nghĩa bởi một bộ ba giá trị:

* **chiều rộng tự nhiên**: độ lớn không gian mà nó chiếm nếu bạn không kéo giãn hay co nó;
* **thành phần giãn**: mức độ mà keo có thể giãn ra;
* **thành phần co**: mức độ mà keo có thể co lại.

Điều chúng ta sẽ xem xét là việc sử dụng keo bên trong một `\hbox{...}` và các phép tính $$\mathrm \TeX$$ mà nó dùng để xác định lượng không gian mà keo cuối cùng sẽ chiếm. Lệnh chúng ta sẽ dùng để tạo một số *ngang* keo là `\hskip`, có dạng:

`**\hskip** *<chiều rộng tự nhiên>* **plus** *<lượng giãn>* **minus** *<lượng co>*`

Đối với *dọc* keo bạn sẽ dùng `**\vskip** *<chiều rộng tự nhiên>* **plus** *<lượng giãn>* **minus** *<lượng co>*`.

Ví dụ, một keo ngang điển hình sẽ được biểu diễn như `\hskip 3pt plus 2pt minus 1pt`. Bạn cũng có thể dùng các đơn vị vật lý khác:

* `\hskip 3mm plus 2mm minus 1mm`
* `\hskip 3in plus 2in minus 1in`
* `\hskip 1in plus 3cm minus 20mm`

## $$\mathrm \TeX$$ keo và các đơn vị “vô cực”

Đối với thành phần co hoặc giãn của keo $$\mathrm \TeX$$ giới thiệu một loại đơn vị khác: cái gọi là “vô cực”: $$\text{fil}$$, $$\text{fill}$$ và $$\text{filll}$$. Ba “mức vô cực” này được sắp xếp sao cho khi liệt kê theo chuỗi, mỗi mức sau “vô hạn hơn” mức trước:

$$\text{fil} < \text{fill} < \text{filll}$$

Có lẽ “vô cực” là một tên hơi gây nhầm lẫn cho các đơn vị này — cũng có thể hữu ích khi nghĩ về chúng như các mức độ khác nhau của *ưu tiên*, bởi vì rốt cuộc chúng giúp xác định những keo nào thực sự tham gia vào quá trình giãn hoặc co. Bằng cách có keo với thành phần giãn hoặc co “vô hạn”, $$\mathrm \TeX$$ cho phép bạn tạo keo có thể giãn hoặc co với bất kỳ lượng mong muốn nào. Lưu ý rằng đối với các keo hữu hạn, $$\mathrm \TeX$$ sẽ giới hạn mức độ mà các keo như vậy có thể co lại. Một ví dụ về keo “vô hạn” là

`\hskip 3pt plus 2fil minus 1fill`

Lưu ý, chúng ta không thể viết, chẳng hạn, `\hskip 1fil` vì $$\mathrm \TeX$$ sẽ báo lỗi với thông báo `Đơn vị đo không hợp lệ (đã chèn pt)`. Đến thời điểm này, các “mức vô cực” này có thể nghe rất lạ nhưng hiện giờ, cứ chấp nhận chúng theo nghĩa đen và chúng ta sẽ sớm thấy cách $$\mathrm \TeX$$ sử dụng các vô cực này khi thực hiện các phép tính keo.

### Các mức vô cực (“thứ tự keo”)

Về bên trong, khi $$\mathrm \TeX$$ thực hiện các phép tính keo của nó, nó coi mỗi mức vô cực là một “thứ tự keo” từ 0–3, trong đó thứ tự 0 là cho keo với các kích thước vật lý như bp, pt, mm, v.v. Tuy nhiên, với $$\text{Lua}\mathrm\TeX$$ có một chút khác biệt vì nó thực sự có thêm một loại (thứ tự) vô cực mà nhiều $$\mathrm \TeX$$ bộ máy khác không có: $$\text{fi}$$ (xem giải thích bên dưới). Nếu bạn đọc $$\text{The } \mathrm \TeX\text{book}$$ bạn sẽ không thấy bất kỳ đề cập nào đến $$\text{fi}$$ vô cực — đơn giản vì nó không được triển khai trong $$\mathrm \TeX$$ phần mềm gốc của Knuth. Do đó, chúng ta có một chút “ngắt kết nối” giữa $$\text{Lua}\mathrm\TeX\text{'s}$$ thứ tự của các vô cực và những gì bạn có thể thấy trong sách về $$\mathrm \TeX$$. $$\text{Lua}\mathrm\TeX$$ dùng các vô cực có thứ tự từ 0–4 nhưng các bộ máy (thông dụng) khác $$\mathrm \TeX$$ có thứ tự từ 0–3. Đây là một bảng cho thấy thứ tự keo được gán cho từng loại đơn vị keo.

|                           |                            |               |     |      |       |
| ------------------------- | -------------------------- | ------------- | --- | ---- | ----- |
|                           | Đơn vị vật lý (pt, mm, in) | fi            | fil | fill | filll |
| $$\text{Lua}\mathrm\TeX$$ | 0                          | 1             | 2   | 3    | 4     |
| Các bộ máy khác           | 0                          | Không áp dụng | 1   | 2    | 3     |

### Ghi chú về $$\text{Lua}\mathrm\TeX$$: Tại sao có thêm một vô cực?

$$\text{Lua}\mathrm\TeX$$ được phát triển từ một số dự án và thư viện mã, bao gồm một dự án có tên là [Omega](https://en.wikipedia.org/wiki/Omega_\(TeX\)). $$\text{Lua}\mathrm\TeX$$ đã tích hợp một số khía cạnh của mã Omega, và điều đó bao gồm một loại keo vô hạn mới được gọi là $$\text{fi}$$. Theo sổ tay Omega:

> “Một mức vô cực mới $$\text{fi}$$ đã được thêm vào. Nó nhỏ hơn $$\text{fil}$$ nhưng lớn hơn mọi đại lượng hữu hạn. Mục đích ban đầu của nó là để giãn giữa các chữ: hoặc để lấp đầy các khoảng đen, như được thực hiện với các hệ chữ viết thư pháp như tiếng Ả Rập; hoặc để nhấn mạnh, như trong tiếng Nga; tất cả điều này mà không cần viết lại các gói macro hiện có. Do đó, có một từ khóa mới, $$\text{fi}$$, và hai primitive mới, `\hfi` và `\vfi`.”

## Quay lại với thách thức của chúng ta

Theo mô hình của Knuth, hãy định nghĩa hai đại lượng:

* chiều rộng mong muốn của một hộp: $$\mathrm{W}\_{\mathrm{D}}$$—chúng ta muốn nó lớn đến mức nào;
* chiều rộng tự nhiên của một hộp: $$\mathrm{W}\_{\mathrm{N}}$$—tổng không gian mà các phần tử cấu thành của nó chiếm trước khi bất kỳ keo nào được giãn hay co.

### Chiều rộng tự nhiên của một hộp

Chiều rộng tự nhiên của một hộp là tổng chiều rộng của tất cả các thành phần trong hộp đó: các ký tự, kern, hộp lồng và bất kỳ keo nào. Đối với keo bên trong hộp, chiều rộng tự nhiên của nó bỏ qua mọi phần giãn hay co của keo: tức là kích thước của nó trước khi bất kỳ sự giãn hay co nào diễn ra.

Một lần nữa, đây là hộp mà chúng ta đang xem xét:

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

Rõ ràng, chúng ta muốn hộp rộng 100pt, do đó $$\mathrm{W}*{\mathrm{D}}=100\mathrm{pt}$$ nhưng còn chiều rộng tự nhiên của nó, $$\mathrm{W}*{\mathrm{N}}$$? Để tính chiều rộng tự nhiên, rõ ràng chúng ta cần độ rộng của bốn ký tự (A, B, C và D) cộng với chiều rộng tự nhiên của bốn keo.

$$\eqalign{\mathrm{W}\_{\mathrm{N}} &= &\text{width(A)} + \text{width(B)} + \text{width(C)} + \text{width(D)} \ & &+ \text{width}(\verb\*\hskip 4pt plus3pt minus 2pt\*)\ & &+\text{width}(\verb\*\hskip 0pt plus 2fil\*)\ & &+\text{width}(\verb\*\hskip 0pt plus 2fill)*\ & &+\text{width}(\verb*\hskip 0pt plus 3fill\*)\ }$$

Trong đó $$\text{width}$$ chỉ là một ký hiệu dùng để chỉ chiều rộng tự nhiên của một mục. Chúng ta có thể lấy chiều rộng tự nhiên của bốn ký tự (A, B, C và D) từ đồ thị nút của mình:

![đồ thị nút](/files/e2f9cef97ab0d5e4fb26ef868b0c29469455e544)

Từ đồ thị nút ở trên, ta có thể thấy rằng:

$$\eqalign{ \text{width(A)} &= 7.50002\text{pt}\ \text{width(B)} &= 7.08336\text{pt}\ \text{width(C)} &= 7.22223\text{pt}\ \text{width(D)} &= 7.6389\text{pt}\ }$$

Bây giờ, tất cả những gì chúng ta cần là chiều rộng tự nhiên của các keo, vốn có thể dễ dàng thu được bằng cách bỏ qua các thành phần giãn và co:

$$\eqalign{ &\text{width}(\verb\*\hskip 4pt plus3pt minus 2pt\*) & = 4\text{pt}\ &\text{width}(\verb\*\hskip 0pt plus 2fil\*) &=0\text{pt}\ &\text{width}(\verb\*\hskip 0pt plus 2fill)*&=0\text{pt}\ &\text{width}(\verb*\hskip 0pt plus 3fill\*)&=0\text{pt}\ }$$

Vì vậy:

$$\eqalign{ \mathrm{W}\_{\mathrm{N}} & = \text{widths of characters} + \text{width of all glues}\ &= 7.50002\text{pt}+ 7.08336\text{pt} + 7.22223\text{pt} + 7.6389\text{pt} + 4\text{pt}\space \text{(from }\verb\*\hskip\*\text{)}\ &=33.4445\text{pt}\ }$$

Bây giờ chúng ta đã có hai thông tin quan trọng:

$$\eqalign{ \mathrm{W}*{\mathrm{D}} & = 100\text{pt}\ \mathrm{W}*{\mathrm{N}} & = 33.4445\text{pt}\ }$$

Rõ ràng, $$\mathrm{W}*{\mathrm{D}} > \mathrm{W}*{\mathrm{N}}$$ và sự chênh lệch là $$(100-33.4445)\text{pt}=66.5555\text{pt}$$; khoảng trống dư này phải được lấp bằng cách kéo giãn các keo — nhưng là những keo nào và bao nhiêu?

### Ai có độ giãn lớn nhất?

Theo phương pháp của Knuth (trang 77 của $$\text{The } \mathrm \TeX \text{book}$$), nhưng cho phép loại vô cực bổ sung ($$\text{fi}$$) do $$\text{Lua}\mathrm \TeX$$, bước tiếp theo là viết ra *tổng* độ giãn dưới dạng:

$$\text{total stretch} = y\_{0}+ y\_{1}\text{fi} +y\_{2}\text{fil} +y\_{3}\text{fill} +y\_{4}\text{filll}$$

Đầu tiên, nếu chúng ta ghi lại $$\text{total glue}$$:

$$\text{total glue } = (\verb*4pt plus3pt minus 2pt*) + (\verb*0pt plus 2fil*) + (\verb*0pt plus 2fill*) + (\verb*0pt plus 3fill*)$$

thì ta có thể thấy rằng $$\text{total stretch}$$ là:

$$\eqalign{ \text{total stretch} & = 3\text{pt}+ 0\text{fi} + (2\text{fil}) + (2\text{fill} + 3\text{fill}) + 0\text{filll}\ &=3\text{pt}+ 0\text{fi} + 2\text{fil} + 5\text{fill} + 0\text{filll}\ }$$

So sánh điều này với $$\text{total stretch} = y\_{0}+ y\_{1}\text{fi} +y\_{2}\text{fil} +y\_{3}\text{fill} +y\_{4}\text{filll}\space$$ta có thể thấy rằng:

$$\eqalign{ y\_0 &=3\text{pt}\ y\_1 &=0\ y\_2 &=2\ y\_3&=5\ y\_4&=0\ }$$

$$\mathrm\TeX$$ tiếp theo “tự hỏi”: nhìn vào $$\text{total stretch}$$, mức vô cực cao nhất nào có giá trị khác không? Khi xem xét $$\text{total stretch}$$ của hộp, rõ ràng thành phần giãn khác không “vô hạn nhất” là $$\text{fill}$$ và chúng ta có $$y\_3=5$$ đơn vị của nó: chính các keo có thành phần $$\text{fill}$$ giãn cung cấp toàn bộ sự giãn. Chỉ số dưới 3 của $$y\_3$$ cho chúng ta biết `glue_order` của keo sẽ được dùng — trong trường hợp này là để giãn. Bây giờ, nếu ta nhìn vào phần “siêu dữ liệu” trong sơ đồ nút của hộp này `\hbox` bây giờ chúng ta có thể hiểu thêm hai “giá trị siêu dữ liệu” nữa (chúng ta sẽ đề cập `glue_set` ở phần tiếp theo)

![siêu dữ liệu](/files/3c72155ddcb0afeaa6b881db81c739558a99f236)

* `glue_sign`: cho biết keo đang được đặt ở chiều dài tự nhiên, bị kéo giãn hay bị co lại:
* 0=đặt ở chiều rộng tự nhiên
* 1=giãn
* 2=co

Trong ví dụ của chúng tôi, `glue_sign` có giá trị là `1`, nghĩa là các keo tham gia sẽ bị kéo giãn.

* `glue_order` cho biết “vô cực” nào đang được dùng; đối với $$\text{Lua}\mathrm \TeX$$ một giá trị 3 cho biết các keo có thành phần $$\text{fill}$$ sẽ tham gia vào các phép tính keo — trong trường hợp của chúng ta, chúng sẽ giãn ra.

Bất kỳ keo nào không có thành phần giãn được xác định bằng đơn vị $$\text{fill}$$ sẽ được **đặt về chiều dài tự nhiên của nó**: tức là, trong trường hợp của chúng ta, nó sẽ không giãn ra chút nào.

### Cần giãn hoặc co bao nhiêu: tính glue\_set

Tóm tắt chúng ta đang ở đâu và những gì chúng ta biết:

1. chiều rộng mong muốn của hộp: $$\mathrm{W}\_{\mathrm{D}} = 100\text{pt}$$;
2. chiều rộng tự nhiên của hộp: $$\mathrm{W}\_{\mathrm{N}} = 33.4445\text{pt}$$;
3. keo sẽ phải giãn nhưng chỉ những keo có $$\text{fill}$$ thành phần giãn mới có thể thực hiện việc giãn đó;
4. chúng ta có tổng cộng $$(2+3)=5$$ đơn vị của $$\text{fill}$$ có sẵn.

Câu hỏi tiếp theo là: các keo đó thực sự sẽ giãn bao nhiêu? Hãy đến với *tỷ lệ glue\_set*—được gọi là `glue_set` trong đồ thị nút của chúng ta. Điều $$\mathrm \TeX$$ làm là tính xem cần lấp đầy bao nhiêu không gian rồi phân phối lượng không gian đó cho các keo phù hợp theo tỷ lệ kích thước thành phần giãn của chúng. Nếu bạn nhìn lại `\hbox` thực tế của chúng ta, bạn có thể thấy chính xác những keo nào có thành phần giãn chứa các đơn vị $$\text{fill}$$:

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

Tính năng $$\textit{glue set ratio }(\text{or } \verb*glue\_set*)$$ được tính như sau:

$$\eqalign{ \text{glue set ratio}\space (\verb*glue\_set*) = & {\text{amount to stretch}}\over{\text{value of highest infinity}}\ =& {\mathrm{W}*{\mathrm{D}}-\mathrm{W}*{\mathrm{N}}}\over{y\_3}\ =& {(100-33.4445)}\over{5}\ =& {66.5555}\over{5}\ =& 13.3111\space (\text{to 4 decimal places})\ }$$

Và bây giờ là bước cuối cùng trong $$\mathrm\TeX$$ thuật toán được áp dụng:

1. đối với mỗi mục keo có thành phần giãn khớp với `glue_order` (trong trường hợp của chúng ta là 3) thì độ dài của keo đó sẽ trở thành:

$$\text{stretched value} = \text{natural length} + (\verb*glue\_set* \times \text{value of stretch component})$$

3. mọi keo khác được đặt về chiều dài tự nhiên của chúng — tức là, chúng hoàn toàn không giãn.

Nhìn vào các keo trong hộp của chúng ta:

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

chúng ta có thể lần lượt đi qua chúng để tính các giá trị cuối cùng:

1. **Giữa A và B**: `\hskip 4pt plus3pt minus 2pt`. Thành phần giãn là `3pt`, tức là bậc `0`. Phần `glue_order` là `3`: thành phần giãn bị bỏ qua và keo này nhận chiều rộng tự nhiên là `4pt`.
2. **Giữa B và C**: `\hskip 0pt plus 2fil`. Thành phần giãn là `2fil`, tức là bậc `2`. Phần `glue_order` là `3`: thành phần giãn bị bỏ qua và keo này nhận chiều rộng tự nhiên là `0pt`.
3. **Giữa C và D**: `\hskip 0pt plus 2fill`. Thành phần giãn là `2fill`, tức là bậc `3` và khớp với `glue_order` của `3`. Keo này sẽ được kéo giãn thành: $$\eqalign{ \text{stretched value}\space = & \text{natural width} + (\verb*glue\_set* \times \text{value of stretch component})\ = & 0\text{pt} + 13.3111 \times 2 \ = & 26.6222\text{pt}\ }$$5. **Giữa D và cuối hộp**: `\hskip 0pt plus 3fill`. Thành phần giãn là `3fill`, tức là bậc `3` và khớp với `glue_order` của `3`. Keo này sẽ được kéo giãn thành: $$\eqalign{ \text{stretched value}\space = &\text{natural width} + (\verb*glue\_set* \times \text{value of stretch component})\ =& 0\text{pt} + 13.3111 \times 3 \ = &39.9333\text{pt}\ }$$

## Và cuối cùng: Kiểm tra tổng chiều rộng

Quá trình tính không gian thực tế mà keo chiếm giữ được gọi là *đặt keo* vì vậy bây giờ chúng ta có thể kiểm tra xem mình đã lấp đầy hộp đến chiều rộng mong muốn chưa, $$(\mathrm{W}\_{\mathrm{D}} = \text{100pt})$$:

$$\eqalign{ \mathrm{W}\_{\mathrm{D}} & = \text{width of all characters} + \text{width of all }\textbf{set}\text{ glue values}\ & = \text{A:7.50002pt} + \text{B:7.08336pt} + \text{C:7.22223pt} + \text{D:7.6389pt}\ & + \text{4pt} + \text{0pt} + \text{26.6222pt} + \text{39.9333pt}\ & = \text{100.00pt} }$$

Bây giờ chúng ta đã biết độ rộng của tất cả các keo và có thể chuẩn bị một hình minh họa trả lời câu hỏi được đặt ra ở đầu bài viết này: dưới đây là độ rộng keo giữa các ký tự trong `\hbox`:

![glue](/files/1f0d200b2a6f406540ae35d7b609276368ff9dfb)


---

# 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/24-how-tex-calculates-glue-settings-in-an-hbox.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.
