> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/latex/zh-cn/zhi-shi-ku/138-understanding-underfull-and-overfull-box-warnings.md).

# 了解欠满和过满盒警告

## 引言

在排版 LaTeX 文档后，Overleaf 通常会显示一些消息，报告存在不足填充或过满的 `\hbox` （或者 `\vbox`），以及所谓的 `badness` 值，用于表示不足填充盒子的 badness，或盒子超出填充的量。首先，重要的是要注意，这些消息不是错误——[更多详情见下文](#overfull-or-underfull-boxes-are-not-errors)。它们是 *警告* ，更准确地说，是“诊断消息”，来源于用于排版你的 LaTeX 文档的 TeX 引擎内部。

在这篇帮助文章中，我们将提供这些消息来源和原因的一些入门背景，并列出一些常见问题及建议解决方案。对于希望了解更多细节的读者，我们还在 Overleaf Gallery 中发布了一篇配套文章： [探索不足填充或过满盒子及 badness 计算](https://www.overleaf.com/latex/examples/exploring-underfull-or-overfull-boxes-and-badness-calculations/wpfsjnbkrfhv)。其他资源列表也可以在 [本文末尾找到](#further-reading).

## 我的项目有过满或不足填充警告吗？

要检查你的项目是否报告了这些警告，你需要点击下方截图中显示的图标。即使你的文档编译没有错误，这些消息也非常常见，而任何刚接触 TeX/LaTeX 的人都可能想知道它们是什么意思，以及是否应该担心。

![显示 Overleaf 报告不足填充或过满盒子的屏幕截图](/files/4a965f52a2706a31a89fdb5aa06fa676ab4f46f0)

在排版文档时，LaTeX 会尝试让内容的各个部分适应给定“尺寸”的边界；例如，在排版段落并将行断到某个长度时——最容易通过如下命令来演示 `\parbox`。如果我们尝试使用 50pt 的行宽来排版以下段落：

```latex
\parbox{50pt}{Some text typeset using a \texttt{\string\parbox}}
```

Overleaf 报告了两条 `Underfull \hbox...` 警告：

![显示 Overleaf 报告不足填充盒子的屏幕截图](/files/30b0c97dcaf8100ba1f7eca3e349b1139f4a5146)

这些 `Underfull \hbox...` 警告出现的原因是，TeX 引擎无法在此 \parbox 的限制内生成“漂亮”的断行。在 TeX 引擎内部，排版段落中的每一行都会变成一个 \hbox，随后引擎会检查并报告它，可能会对任何被 TeX 引擎判定为“不可取”的排版文本行生成警告。

如你在下面的图像中所见，文本行之间的间距非常大，而 TeX 的 `Underfull \hbox...` 警告会告诉你这一点——尽管在这个例子中，这一点其实非常明显。

![显示一个 parbox 的屏幕截图](/files/6c3343060b246609f06ed95ebfd0e4832b167f5c)

注意，在这个例子中，你可以通过使用 \raggedright 来避免这些警告：

```latex
\parbox{50pt}{\raggedright Some text typeset using a \texttt{\string\parbox}}
```

![显示一个 parbox 的屏幕截图](/files/2560404c9a05941032b7b26bf66872094101c1db)

## 过满和不足填充盒子

该 `\parbox` 这个例子展示了一个更普遍的问题：在处理你的 LaTeX 代码时，用于排版文档的 TeX 引擎（pdfTeX、XeTeX 或 LuaTeX）可能会认为 LaTeX 的要求导致排版内容无法在所提供或所请求的盒子范围内“很好地适配”。如果是这样，TeX 引擎会发出警告，你的内容仍然会被排版，但结果有时可能在美观上并不理想，你很可能需要修复它。理解这些消息的含义并识别何时需要采取行动来处理它们是很有必要的。

这些与盒子相关的警告形式如下

```
Overfull \hbox (<value>pt too wide) ... at line(s) ...
Overfull \vbox (<value>pt too high) ... at line(s) ...
Underfull \hbox (badness <value> ) ... at line(s) ...
Underfull \vbox (badness <value>) ... at line(s) ...
```

一个 `\hbox` 指的是一个 *水平盒子* ，TeX 引擎在其中将一系列项目并排放置，并且 `\vbox` 指的是一个 *垂直盒子* ，TeX 引擎在其中将项目一个叠放在另一个之上。

如果材料太少，TeX 引擎会报告一个 `Underfull \hbox` 警告或 `Underfull \vbox` 警告：

* **不足填充盒子** 没有足够的材料来填满分配给它的（盒子）尺寸，TeX 引擎需要将内容“拉伸”开来以尝试填充该空间。对于不足填充盒子，Overleaf 还会报告 TeX 所谓的“badness”（`badness <value>`），这是衡量 TeX 为填充预留空间而需要将内容“拉伸”多少的指标。badness 值通常范围从 0 到 10000。

如果材料太多，TeX 引擎会报告一条 \`Overfull \hbox\` 警告或一条 \`Overfull \vbox\` 警告：

* **过满盒子** 内容过多，无法适应分配给它的（盒子）尺寸，而 TeX 无法把它“压缩”进所提供的空间。TeX 引擎会报告内容超出可用空间的量（`<value>`），单位是 points——你的内容对于给定的 `\hbox` 来说太宽，或对于给定的 `\vbox`.

## 过满或不足填充盒子不是错误

如前所述，过满/不足填充 `\hbox` 或 `\vbox` 消息不是错误，而是用于排版你的 LaTeX 文档的 TeX 引擎（pdfTeX、XeTeX 或 LuaTeX）输出的“诊断性警告消息”。尽管这些警告是由 Overleaf *向你报告的* ，但它们并不是 *生成的* 由 Overleaf 产生的：它们来源于 TeX 引擎内部。在排版过程中，这些消息会被写入 `.log` 文件——这是 TeX 引擎生成的一个文本文件，用于在处理你的 LaTeX 代码时记录各种信息。Overleaf 会处理该 `.log` 文件，以提取 TeX 引擎的过满/不足填充 `\hbox` 或 `\vbox` 警告消息，并将其显示在 Overleaf 界面中。这有助于你定位并识别文档中可能需要编辑的部分，以生成尽可能好的排版结果。

## 我需要担心这些警告吗？

刚接触 TeX/LaTeX 的用户可能会对这些警告感到担心，想知道它们是否意味着文档存在严重问题，但通常大多数警告都可以放心忽略。不过，这些警告有时确实会指出文档中需要检查的部分，并且可能需要编辑以改进可见的排版效果。

解读这些消息需要一点练习，因此如果你是 TeX/LaTeX 新手，值得花时间通过定位生成该警告的源代码位置来积累经验。这样你很快就会学会识别那些确实指出了你可能需要处理的问题的警告。

## 我如何找到警告的来源？

1. 在 Overleaf 界面中，点击一条警告消息，编辑器就会滚动到你的 LaTeX 源代码中的相应位置。
2. 在源代码中该位置左侧会有一个带感叹号（!）的小黄三角形。
3. 如果你将鼠标指针悬停在三角形上，Overleaf 会显示该警告消息。

这段短视频演示了上述步骤。

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/1S1CW2vbVGRHnCXmsbjgAX/096e314caba0c1bafb762a528761e24d/findwarning.mp4>" %}

## 如何找到与我的 LaTeX 代码对应的 PDF 位置？

定位到生成某条特定警告的 LaTeX 代码后，你可以使用位于分隔编辑器和排版 PDF 面板的分隔条上的箭头，跳转到 PDF 中的相应位置。

![显示一个 parbox 的屏幕截图](/files/a5dee879c0e974d109ff2efdb4bd4a1f49e218a8)

如果你看不到这些箭头，请参阅我们的帮助文章 [如何从排版后的 PDF 跳转到源代码（SyncTeX）](/latex/zh-cn/zhi-shi-ku/069-how-to-jump-to-the-source-code-from-the-typeset-pdf-synctex.md) ，其中说明了如何启用它们。

## 常见问题及其修复方法

* 你可以使用 [microtype 宏包](https://ctan.org/pkg/microtype?lang=en) 它利用了 pdfTeX 引入的微排版扩展——从而产生更高质量的排版，也可能减少坏盒子的数量。
* 如果你在 URL 和断行方面遇到问题，可以为 `breaklinks` 添加选项 `hyperref` 宏包的示例代码： `\usepackage[breaklinks]{hyperref}`.
* 与 `\parbox`, `minipage` 环境类似，当 TeX 引擎尝试将段落断成行时，也可能产生过满或不足填充盒子的警告：

```latex

\begin{minipage}{width}
text...
\end{minipage}
```

如果可能，请增大 `width` 的值，以便让 TeX 引擎更有机会生成良好的断行——和/或使用 [microtype 宏包](https://ctan.org/pkg/microtype?lang=en).

### 关于使用 \\\ 的说明

`\\` 是一个宏（控制符号），其精确定义取决于它所使用的上下文——关于这一点，一篇出色的讨论/解释可以在这个 [tex.stackexchange 上的回答](https://tex.stackexchange.com/a/55481).

* `\\` 中找到。它不应用于在段落之间添加垂直间距——这样做被认为是非常不好的做法。
* `\\` 它仅用于换行（类似于 Microsoft Word 中的 Shift+Enter）。在 LaTeX 中生成新段落的正确方式，是在源代码中用空行分隔各段。
* 不要使用 `\\` （或者 `\newline`/`\vspace`）来模拟段落分隔，或增加段落间距；设置段落间距的推荐方案是加载 [parskip](https://ctan.org/pkg/parskip) 宏包：把 `\usepackage{parskip}` 放到文档导言区中。
* 在整篇文档的段落中使用 `\\` 会干扰 LaTeX 的算法，这些算法用于计算放置浮动体、分页等的最佳位置，并且在大型文档中可能导致编译错误。
* 对 `\\` 的合理使用 [tex.stackexchange](https://tex.stackexchange.com/)在关于
  * [何时使用 `\par` 以及何时使用 `\\`, `\newline`，或空行](https://tex.stackexchange.com/a/82666)
  * [\\\ `\\*` 的回答中有说明。](https://tex.stackexchange.com/a/55481)

## 控制 TeX 向你报告哪些盒子

TeX 引擎提供了若干底层原语命令，你可以用它们来引导 TeX 的启发式判断，并设置一个阈值，决定一个盒子需要有多“糟糕” TeX 才会报告它。下面是一些对这些命令感兴趣的读者可参考的链接：

* [\hfuzz 和 \vfuzz](/latex/zh-cn/tex-latex-yuan-yu/06-hfuzz.md)
* [\hbadness 和 \vbadness](/latex/zh-cn/tex-latex-yuan-yu/05-hbadness.md)

## 进一步阅读

关于 TeX 使用盒子和 glue 的进一步背景阅读，感兴趣的读者可参考以下资源：

* Overleaf 文章 [TeX 如何计算 \hbox 中的 glue 设置](/latex/zh-cn/shen-du-wen-zhang/24-how-tex-calculates-glue-settings-in-an-hbox.md).
* 一篇 17 页的 Overleaf 文章，作为此帮助条目的配套内容撰写： [探索不足填充或过满盒子及 badness 计算](https://www.overleaf.com/latex/examples/exploring-underfull-or-overfull-boxes-and-badness-calculations/wpfsjnbkrfhv)。该文章还讨论了 TeX 原语 `\hfuzz` 和 `\hbadness`.
* TeX FAQ： <https://texfaq.org/FAQ-overfull.html>.
* [tex.stackexchange](https://tex.stackexchange.com/) 包含了来自顶尖 TeX/LaTeX 专家的大量建议。


---

# 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://ayakaleaf-pro.ayaka.space/latex/zh-cn/zhi-shi-ku/138-understanding-underfull-and-overfull-box-warnings.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.
