Overfull / Underfull \hbox

Overfull \hbox は、行をうまく分割できず 右マージンをはみ出した という警告、Underfull \hbox は逆に 行が間延びした(空きを引き伸ばしすぎた)という警告です。たいていの原因は、折れない長いもの——長い URL、長い単語、コード文字列。このページは理由と対処を扱います。

2 つの警告の違い

Overfull \hbox (X pt too wide) は、文字が右マージンを越えて飛び出した状態です(draft モードだと余白に黒い罫線が出ます)。見た目に直結する実害です。Underfull \hbox (badness N) は、TeX がうまく折れず空きを伸ばしすぎた「間延び」の警告で、緊急度は低め。どちらも「in paragraph at lines A--B」で該当の行範囲を示します。

主な原因

  • 分割できない長い語・長い URL・コード文字列・型番。
  • 段が狭い(2 段組みや表の中など)。
  • \\ で短い最終行を強制した。

対処

  • 言い換え が一番きれい——一語直すだけで解けることが多い。
  • URL\url{...}urlhyperref)で、適切な位置に折らせる。
  • microtype を読み込む——文字の微妙な突き出しと字幅伸縮で overfull/underfull が劇的に減る。ほぼ無料の改善で、まず入れる価値あり。
  • 頑固な語は \-(任意ハイフン)や \hyphenation で折れるように。言語が正しいか(babel)も確認(→「行分割・ページ調整」)。
  • 局所的に \sloppysloppypar で語間を緩める。
  • 些細なものは \hbadness\hfuzz で閾値を上げ、出力を変えずに警告だけ抑える。
latex
\usepackage{microtype}   % overfull/underfull を大幅に減らす / cuts them dramatically
\usepackage{hyperref}    % \url{} を提供 / provides \url
...
\url{https://example.com/very/long/path}   % 適切な位置で折る / breaks sensibly