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

# \badness

#### Summary

Each time TEX constructs a box (e.g., explicitly via an `\hbox` or `\vbox`) it sets, or calculates, that box’s “badness”: a numeric value which can be thought of as a way to measure, or classify, how “well” the content of a box fits inside that box. The badness value for the most-recently constructed box is saved in a read-only register (a memory location) which can be accessed by the command `\badness`: for example by `\the\badness`. Note that TEX also creates boxes during other typesetting activities (e.g. linebreaking) but here we’ll focus on explicit box-construction commands.

#### Explanation and examples

When TEX is asked to create a box using the following box-construction commands:

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

you can choose to set the size of the box and ask TEX to try to fit your content into it; for example `\hbox to 20pt{<stuff>}` will ask TEX to try to fit your `<stuff>` into a box that is 20pt wide. TEX will do its best to make `<stuff>` fit by stretching or shrinking any available glue.

Alternatively, if you *don’t* fix the size of a box, by writing `\hbox{<stuff>}`, TEX will simply construct an `\hbox` that is sufficiently wide to accommodate `<stuff>` and in that case TEX will assign that box a badness value of 0.

When TEX decides to calculate the badness of a box it compares the actual size of your content with the appropriate dimension of the box in which it has to fit: is your content too wide to fit the specified `\hbox` or too high to fit the designated `\vbox` or `\vtop`? As part of the badness calculation TEX also takes into account the *total* amount of each type of glue within the box—i.e., how much total stretch or shrink is available to help produce a box of the desired size.

In practise, when TEX needs to calculates a box’s badness value it uses (an approximation to) the following formula:

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

where $$t$$ is the desired “excess width” to be accommodated and $$s$$ is the amount of glue available for stretching or shrinking.

The value of badness usually falls between 0 and 10000 but a special value is reserved for boxes that, even after allowing for the shrinking of glue, are simply not big enough to hold the content: those boxes are classified as “overfull” and TEX assigns them a “special” badness value of 1000000.

OK, so much for discussion/theory we’ll now look at some examples. We’ll create 5 boxes and use 5 `\count` registers to hold the `\badness` value of the box that TEX has just created. We later use those `\count` registers to output the `\badness` value of the relevant box.

```
\newcount\aval\newcount\bval\newcount\cval\newcount\dval\newcount\eval
\setbox100=\hbox{Hello \TeX}\aval=\the\badness %We do not set the box size
\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 Here are the results:\vskip5mm
\noindent box 100 (\fbox{\copy100}) has a \verb|\badness| value of \number\aval\par
\noindent box 101 (\fbox{\copy101}) has a \verb|\badness| value of \number\bval\par
\noindent box 102 (\fbox{\copy102}) has a \verb|\badness| value of \number\cval\par
\noindent box 103 (\fbox{\copy103}) has a \verb|\badness| value of \number\dval\par
\noindent box 104 (\fbox{\copy104}) has a \verb|\badness| value of \number\eval\par
```

The following graphic shows the output:

![](/files/4hQnfa5MxKXYUKwDTW7A)

* box 100: `\hbox{Hello \TeX}`. This has `\badness` 0 because TEX was not asked to fit the content to a specific size.
* box 101: `\hbox to25mm{Hello \TeX\hskip0pt plus5pt}`. This box has two glues: an interword space after the word “Hello” and 5pt coming from the `\hskip` glue. However, the desired box is 25mm wide which results in a lot of space to fill with not much glue to do so. That combination of excess space and available glue results in the `\badness` value of 6396.
* box 102: `\hbox to50mm{Hello \TeX}`. This box has just one glue item: an interword space after the word “Hello” and has a lot of excess space to fill. That combination of excess space and small amount of glue results in a very large `\badness` value—so high that TEX “clips” it to the maximum value of 10000. In addition, the interword space is stretched considerably to fill up the box, resulting in a huge gap appearing between “Hello” and “TEX”
* box 103: `\hbox to50mm{Hello \TeX\hfill}`. This box is similar to box 102 but it has two glues: the interword space after the word “Hello” but it has a second very flexible glue provided by `\hfill`–a so-called “ininitely flexible” glue. Consequently,`\hfill` can stretch as far as required and expands to absorb all the excess space. Because of the “ininitely flexible” glue the resulting `\badness` is 0.
* box 104: `\hbox to5mm{Overleaf}` This box overlaps the text following it has a `\badness` value is 1000000. The very large badness value (and overlapping text) is due to the text “Overleaf” being too big to fit in an `\hbox` that is only 5mm wide—and, in addition, there are no available glues capable of absorbing the excess width. TEX classifies box 104 as an “overfull” box and sets `\badness` to the special value of 1000000.

#### Related commands

TEX provides a number of commands related to reporting and displaying the badness of boxes:

* `[\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/tex-latex-primitives/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.
