> 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/zh-cn/zhi-shi-ku/138-understanding-underfull-and-overfull-box-warnings.md).

# 理解不足和过满盒警告

## 引言

在排版 LaTeX 文档后，Overleaf 通常会显示报告欠满或溢出的消息 `\hbox` （或者 `\vbox`），以及所谓的 `劣度` 欠满盒子的值，或盒子溢出的量。首先，必须注意，这些消息并非错误——[详见下文](#overfull-or-underfull-boxes-are-not-errors)。它们是 *警告* 或者更准确地说，是“诊断消息”，它们来自用于排版您的 LaTeX 文档的 TeX 引擎内部。

在这篇帮助文章中，我们将简要介绍这些消息的来源和原因，并列出一些常见问题及建议的解决方案。对于希望了解更多细节的读者，我们已在 Overleaf Gallery 发布了一篇配套文章： [探索欠满或溢出的盒子及劣度计算](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}{使用 \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 使用 \texttt{\string\parbox} 排版的一些文本}
```

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

## 溢出和欠满的盒子

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

这些与盒子相关的警告采用以下形式

```
Overfull \hbox（宽出 <value>pt）... 位于第 ... 行
Overfull \vbox（高出 <value>pt）... 位于第 ... 行
Underfull \hbox（劣度 <value>）... 位于第 ... 行
Underfull \vbox（劣度 <value>）... 位于第 ... 行
```

可变字体的 `\hbox` 指的是一个 *水平盒子* TeX 引擎在其中将一列项目并排放置，而 `\vbox` 指的是一个 *垂直盒子* TeX 引擎在其中将项目逐个上下堆叠。

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

* **欠满盒子** 没有足够的材料来填充为容纳它而分配的（盒子）尺寸，TeX 引擎需要“拉伸”内容以尝试填满该空间。对于欠满盒子，Overleaf 还会报告 TeX 所谓的“劣度”（`劣度 <value>`），它衡量了 TeX 为填充预留的容纳空间而需要“拉伸”内容的程度。劣度值通常范围为 0 到 10000。

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

* **溢出盒子** 包含的内容过多，无法适应为容纳它而分配的（盒子）尺寸，TeX 无法将其“压缩”进所提供的空间。TeX 引擎会报告内容超出可用空间的量（`<value>`），单位为点——您的材料对于给定的 `\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}
文本……
\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-ji-yuan/06-hfuzz.md)
* [\hbadness 和 \vbadness](/latex/zh-cn/tex-latex-ji-yuan/05-hbadness.md)

## 进一步阅读

如需进一步了解 TeX 对盒子和胶水的使用，感兴趣的读者可参阅以下资源：

* Overleaf 文章 [TeX 如何计算 \hbox 中的胶水设置](/latex/zh-cn/shen-ru-wen-zhang/24-how-tex-calculates-glue-settings-in-an-hbox.md).
* 一篇为配合此帮助条目而撰写的 17 页 Overleaf 文章： [探索欠满或溢出的盒子及劣度计算](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://overleaf-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.
