> 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/primitivy-tex-latex/02-badness.md).

# \badness

#### Краткое содержание

Каждый раз, когда TEX строит коробку (например, явно с помощью `\hbox` или `\vbox`) он устанавливает, или вычисляет, «badness» этой коробки: числовое значение, которое можно рассматривать как способ измерить или классифицировать, насколько «хорошо» содержимое коробки помещается внутри этой коробки. Значение badness для последней созданной коробки сохраняется в регистре только для чтения (участке памяти), к которому можно обратиться командой `\badness`: например с помощью `\the\badness`. Обратите внимание, что TEX также создаёт коробки во время других операций набора (например, при переносе строк), но здесь мы сосредоточимся на явных командах построения коробок.

#### Пояснение и примеры

Когда TEX просят создать коробку с помощью следующих команд построения коробок:

* `\hbox`
* `\vbox`
* `\vtop`

вы можете задать размер коробки и попросить TEX попытаться вписать в неё ваш текст; например `\hbox to 20pt{<stuff>}` заставит TEX попытаться вписать ваше `<stuff>` в коробку шириной 20pt. TEX постарается как можно лучше `<stuff>` вписать его, растягивая или сжимая любой доступный glue.

С другой стороны, если вы *не* задаёте размер коробки, написав `\hbox{<stuff>}`, TEX просто создаст `\hbox` такую, которая достаточно широка, чтобы вместить `<stuff>` и в этом случае TEX присвоит этой коробке значение badness 0.

Когда TEX решает вычислить badness коробки, он сравнивает фактический размер вашего содержимого с соответствующим размером коробки, в которую оно должно поместиться: слишком ли ваш текст широк, чтобы вписаться в заданную `\hbox` или слишком высок, чтобы вписаться в заданную `\vbox` или `\vtop`? В рамках вычисления badness TEX также учитывает *общее* количество каждого типа glue внутри коробки — то есть общий запас растяжения или сжатия, доступный для получения коробки нужного размера.

На практике, когда TEX нужно вычислить значение badness коробки, он использует (приближённо) следующую формулу:

$$\mathrm{badness}=100\left ({t \over s}\right )^3$$

где $$t$$ — это требуемая «избыточная ширина», которую нужно разместить, а $$s$$ — это количество glue, доступное для растяжения или сжатия.

Значение badness обычно находится в диапазоне от 0 до 10000, но для коробок, которые даже после учёта сжатия glue просто недостаточно велики, чтобы вместить содержимое, зарезервировано особое значение: такие коробки классифицируются как «переполненные», и TEX присваивает им «особое» значение badness 1000000.

Хорошо, на этом с обсуждением/теорией закончим — теперь посмотрим на несколько примеров. Мы создадим 5 коробок и используем 5 `\count` регистров для хранения `\badness` значения только что созданной TEX коробки. Затем мы используем эти `\count` регистры, чтобы вывести `\badness` значение соответствующей коробки.

```
\newcount\aval\newcount\bval\newcount\cval\newcount\dval\newcount\eval
\setbox100=\hbox{Hello \TeX}\aval=\the\badness %Размер коробки не задаётся
\setbox101=\hbox to25mm{Hello \TeX\hskip0pt plus5pt}\bval=\the\badness
\setbox102=\hbox to50mm{Hello \TeX}\cval=\the\badness
\setbox103=\hbox to50mm{Hello \TeX\hfill}\dval=\the\badness
\setbox104=\hbox to5mm{Overleaf}\eval=\the\badness
\setlength{\fboxsep}{0pt}% put a tight border around each box
\noindent Вот результаты:\vskip5mm
\noindent коробка 100 (\fbox{\copy100}) имеет значение \verb|\badness|, равное \number\aval\par
\noindent коробка 101 (\fbox{\copy101}) имеет значение \verb|\badness|, равное \number\bval\par
\noindent коробка 102 (\fbox{\copy102}) имеет значение \verb|\badness|, равное \number\cval\par
\noindent коробка 103 (\fbox{\copy103}) имеет значение \verb|\badness|, равное \number\dval\par
\noindent коробка 104 (\fbox{\copy104}) имеет значение \verb|\badness|, равное \number\eval\par
```

Следующая иллюстрация показывает результат:

![](/files/694976723b7608856df216ade6fbf90fe642778f)

* коробка 100: `\hbox{Hello \TeX}`. Это имеет `\badness` 0, потому что TEX не просили вписывать содержимое в конкретный размер.
* коробка 101: `\hbox to25mm{Hello \TeX\hskip0pt plus5pt}`. У этой коробки два glue: межсловный пробел после слова «Hello» и 5pt, полученные из `\hskip` glue. Однако требуемая коробка имеет ширину 25mm, из-за чего остаётся много места для заполнения при небольшом количестве glue. Такое сочетание избыточного пространства и доступного glue приводит к `\badness` значению 6396.
* коробка 102: `\hbox to50mm{Hello \TeX}`. У этой коробки есть только один элемент glue: межсловный пробел после слова «Hello», а заполнять нужно очень много лишнего пространства. Такое сочетание избыточного пространства и малого количества glue приводит к очень большому `\badness` значению — настолько большому, что TEX «обрезает» его до максимального значения 10000. Кроме того, межсловный пробел значительно растягивается, чтобы заполнить коробку, в результате между «Hello» и «TEX» появляется огромный промежуток
* коробка 103: `\hbox to50mm{Hello \TeX\hfill}`. Эта коробка похожа на коробку 102, но у неё два glue: межсловный пробел после слова «Hello», а также второй очень гибкий glue, предоставляемый `\hfill`— так называемый «бесконечно гибкий» glue. Следовательно,`\hfill` может растягиваться настолько, насколько требуется, и расширяется, чтобы поглотить всё избыточное пространство. Благодаря «бесконечно гибкому» glue получающееся `\badness` значение равно 0.
* коробка 104: `\hbox to5mm{Overleaf}` Эта коробка накладывается на следующий за ней текст; у неё `\badness` значение badness равно 1000000. Очень большое значение badness (и наложение текста) связано с тем, что текст «Overleaf» слишком велик, чтобы поместиться в `\hbox` коробке шириной всего 5mm, и, кроме того, нет доступных glue, способных поглотить избыточную ширину. TEX классифицирует коробку 104 как «переполненную» и устанавливает `\badness` для неё особое значение 1000000.

#### Связанные команды

TEX предоставляет ряд команд, связанных с выводом и отображением badness коробок:

* `[\overfullrule](./07-overfullrule.md)`
* `[\hfuzz](./06-hfuzz.md)`
* `[\vfuzz](./06-hfuzz.md)`
* `[\hbadness](./05-hbadness.md)`
* `[\vbadness](./05-hbadness.md)`


---

# 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/primitivy-tex-latex/02-badness.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.
