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

# Boxes and Glue: краткое, но наглядное введение с использованием LuaTeX

## Введение к будущим статьям

Этот пост — краткое введение в некоторые ключевые концепции/модели, используемые при верстке с помощью $$\mathrm \TeX$$: боксов и клея — «создавая основу» для будущих статей, в которых всё будет рассмотрено гораздо подробнее. В следующем посте будет исследовано низкоуровневое поведение $$\mathrm \TeX$$ боксы с помощью $$\mathrm{Lua}\mathrm\TeX$$ для создания диаграмм (графов узлов), таких как следующий пример:

![Граф узлов бокса](/files/53c385cf90445bf90a0c9b18fb706565d432bd00)

Этот граф узлов создан на основе `\hbox{...}` созданный с помощью следующего $$\mathrm \TeX$$ кода:

```latex

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

который выглядит так (с ограничивающим прямоугольником):

![Пример \hbox](/files/ef5d494aa1354430ce0c0bf7ce0753f390e1390c)

Эти графы узлов показывают глубинную внутреннюю структуру $$\mathrm \TeX$$ боксов — отражая, как они хранятся внутри $$\mathrm \TeX$$ и дают бесценное графическое описание, помогающее лучше понять поведение команд построения боксов, таких как `\hbox{...}` или `\vbox{...}`.

## Вернёмся к основам...

Даже будучи новым или случайным, $$\mathrm \LaTeX$$ пользователем, вы довольно скоро столкнётесь с понятием $$\mathrm \TeX$$ «боксов» или с тем, что $$\mathrm \TeX$$ использует модель «боксы и клей» для своих основных операций верстки. Алгоритмы верстки $$\mathrm \TeX$$ значительную часть времени тратят на создание, а затем на укладку горизонтальных и вертикальных списков боксов. Например, когда $$\mathrm \TeX$$ верстает абзац текста и разбивает его на серию строк, он рассматривает текст абзаца как поток или последовательность боксов и использует ширину, высоту и глубину этих символьных боксов (на самом деле глифов), чтобы найти наилучшие переносы строк, а затем добавляет вертикальный промежуток между строками набранного текста (этот клей называется `\baselineskip`). Каждая набранная строка абзаца сама является боксом (содержащим другие боксы — например, символы), и набранные строки абзаца (боксы) складываются вертикально, чтобы образовать абзац. В итоге получается самый большой бокс из всех: набранная страница. Очевидно, это чрезвычайно упрощённая картина, потому что вам также нужна возможность перемещать и позиционировать эти боксы и $$\mathrm \TeX$$ делает это с помощью так называемого *клей*: формы «гибкого интервала». Кнут заметил (страница 70 книги The $$\mathrm \TeX \mathrm{book}$$) что «glue», вероятно, следовало бы называть «пружиной», но термин glue был принят на раннем этапе и, если воспользоваться каламбуром Кнута, прижился.

## Визуализация набранного абзаца с помощью $$\mathrm{Lua}\mathrm\TeX$$

Использование $$\mathrm{Lua}\mathrm\TeX$$, набранный абзац можно обработать, чтобы отобразить компоненты, использованные для его верстки: боксы символов и гибкий клей, используемый для пробелов между словами. Мы создали простой [$$\mathrm{Lua}\mathrm\TeX$$ (обычный $$\mathrm \TeX$$) проект](https://www.overleaf.com/latex/examples/using-a-luatex-callback-to-parse-typeset-paragraphs/mzbpwxtjshsj) чтобы продемонстрировать это:

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

Код проекта был написан для иллюстрации этого поста и не является полной реализацией «парсера» абзацев — он игнорирует ряд $$\mathrm{Lua}\mathrm \TeX$$ типов узлов и предназначен исключительно для иллюстрации идей, обсуждаемых в этом посте.

![боксы и клей](/files/a8f1c025c2d0cc445cf01eff37ed295f550457a0)

В разделе увеличенного изображения ниже вы можете видеть отдельные строки абзаца, закрашенные серыми полосами — обратите внимание, что между строками есть белое пространство: вертикальный клей, который $$\mathrm \TeX$$ вставляет, укладывая их, чтобы сформировать абзац. Если вы хотите узнать больше о вертикальном клее, вставляемом между строками в набранном абзаце, воспользуйтесь Google, чтобы найти статьи, в которых обсуждается `\baselineskip` и `\lineskiplimit`.

![разобранный абзац, показывающий боксы и клей](/files/5ccfcd663384b30940f956ff3ede9755abaa4494)

Когда $$\mathrm \TeX$$ читает и верстает абзац, он преобразует пробелы между словами в порции клея, точное значение которого является свойством используемого шрифта. Во время верстки эти межсловные клейкие промежутки растягиваются или сжимаются на величину, которая считается необходимой для красивого переноса строки. На изображении выше следует обратить внимание на следующее:

* серые полосы — это границы отдельных строк набранного абзаца;
* каждый символ показан внутри бокса, определяющего его размеры (как $$\mathrm \TeX$$ это видит
* жёлтые боксы показывают клей, который $$\mathrm \TeX$$ вставил между словами, чтобы добиться красивого переноса строки. Обратите внимание на следующее:
* ширина межсловного клея меняется от строки к строке, поскольку $$\mathrm \TeX$$ он растягивает или сжимает его, чтобы добиться каждого переноса строки;
* в третьей строке клей после символа точки шире, чем другие клеи в той же строке.
* красный бокс показывает, где был явный `\hbox{...}` использован. Определение `\TeX` команды помещает E в `\hbox{...}` чтобы его можно было опустить и создать $$\mathrm \TeX$$ логотип.

В конце нашего примерного абзаца есть длинная полоса клея, которая называется `\parfillskip`: она вставляется $$\mathrm \TeX$$ движками, чтобы заполнить пространство в последней строке. ![parfillskip glue](/files/c119e3d55a70b07b93faca542f3bf71f903b8c77)

### До следующего поста

Надеемся, этот пост дал полезное введение в принцип боксов и клея, используемый в $$\mathrm \TeX$$. В предстоящем посте мы будем использовать $$\mathrm{Lua}\mathrm\TeX$$ чтобы гораздо глубже разобраться в содержимом $$\mathrm \TeX$$ боксов — с помощью графов узлов, подобных примеру, показанному в начале этой статьи.


---

# 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/ru/podrobnye-stati/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.
