罫線(標準 / booktabs / hhline)

表の罫線には三つの流儀があります。LaTeX 標準の **\hline\cline と列指定の |、専門的な表のための booktabs**(\toprule\midrule\bottomrule)、そして二重罫線と縦罫線の交わりを精密に制御する **hhline**。標準の罫線は手軽ですが、引きすぎると表は読みにくくなります。このページでは三層を順に見て、なぜ booktabs が既定の選択肢として推奨されるのかを示します。

標準の罫線——\hline・\cline・|

素の LaTeX が用意する横罫線は **\hline** です。行末の \\ のあと(または表の先頭・末尾)に置くと、その位置に表の幅いっぱいの横線を一本引きます。\hline を二つ続けて **\hline\hline** と書けば、\doublerulesep だけ離れた 二重の横罫線 になります。最終行のあとの \\ はふつう省けますが、最終行の下に \hline を引くときは \\ で行を閉じてから置きます。

表の途中で 一部の列だけ に横罫線を引きたいときは **\cline{i-j}** を使います。i 列目から j 列目までの範囲だけに線が渡り、\cline{2-3} なら 2・3 列目の下だけに引かれます。離れた範囲に同時に引くには \cline{1-1}\cline{3-4} のように並べます。縦罫線 は本文ではなく 列指定 の側で作ります。{|l|c|r|} のように列指定に |(縦棒)を挟むと、その位置に表の高さいっぱいの縦線が入り、|| とすれば二重縦罫線です。これら |\hline\vline の線の太さは長さ **\arrayrulewidth**(既定 0.4pt)で、二重線どうしの間隔は \doublerulesep で決まります。

latex
\begin{tabular}{|l|c|r|}
  \hline
  項目 & 個数 & 価格 \\
  \hline\hline
  りんご & 3 & 380 \\
  \cline{2-3}
  みかん & 12 & 120 \\
  \hline
\end{tabular}

この例は、縦罫線 | で全列を囲み、見出しの下を \hline\hline の二重罫線、途中を \cline{2-3}(2・3 列目だけ)で区切っています。罫線の機能をひととおり使った例ですが——まさにこれが 避けるべき過剰な罫線 の見本でもあります。

というのも、罫線の引きすぎは読みやすさを損なう からです。組版の伝統では、線(罫線)はデータを囲う檻ではなく、情報の 論理的な区切り を示す控えめな道具とされます。とりわけ縦罫線は列の間に視覚的な壁を作って目の流れを妨げ、二重罫線は意味もなく重く見えます。次節の booktabs の作者サイモン・フィアは「この表組みは何世紀もの経験で確立されてきたもので、よほどのことがない限り変えるべきではない」と述べ、縦罫線も二重罫線も使わない簡素な横罫線だけの表を勧めています。

booktabs——プロ品質の表

booktabs** は、サイモン・フィアによる「学術書・学術誌に載るような表」を簡単に組むためのパッケージです。プリアンブルに \usepackage{booktabs} を書いて使います。標準の \hline と何が違うかというと、罫線の 太さに区別を付ける ことと、罫線の 上下に適切な空き を自動で入れることです。これにより、線で囲わずとも構造が読み取れる、洗練された表になります。

中心となるのは三つの命令です。表の最上部に **\toprule、見出しと本体を分ける位置に \midrule、表の最下部に \bottomrule**。\toprule\bottomrule は太め(既定 \heavyrulewidth = 0.08em)、\midrule は細め(\lightrulewidth = 0.05em)に組まれ、この太さの差が表の上下端と内部の区切りを目で見分けやすくします。いずれも角括弧で太さを個別指定でき(例 \toprule[1pt])、\hline と同じく行末の \\ のあとに置きます(\toprule だけは \begin{tabular}{…} の直後)。

latex
\begin{tabular}{@{}llr@{}}
  \toprule
  \multicolumn{2}{c}{品目} \\
  \cmidrule(lr){1-2}
  種類 & 状態 & 価格 \\
  \midrule
  りんご & 蜜入り & 380 \\
  みかん & 訳あり & 120 \\
  \addlinespace
  合計 & & 500 \\
  \bottomrule
\end{tabular}

この例には booktabs の要素がそろっています。一部の列だけに引く部分罫線は **\cmidrule{a-b}** で、\clinebooktabs 版にあたります。ただし \cmidrule は線が列幅いっぱいに届いて隣の罫線とぶつかりやすいので、ふつうは トリム(端の切り詰め) を添えます。丸括弧で (l)(r)(lr) を指定すると左・右・両端を \cmidrulekern(既定 0.5em)だけ詰め、(lr){1-2} なら 1〜2 列目に左右を詰めた罫線を引きます。トリムの量は (r{.75em}) のように個別指定もできます。完全な構文は \cmidrule[幅](トリム){a-b} です。

行と行のあいだに少し空きを入れたいとき——たとえば合計行の手前——は **\addlinespace** を \\ のあとに置きます。既定で \defaultaddspace0.5em)の空きが入り、\addlinespace[1ex] のように量を指定できます。\\[…] で個別に伸ばすより意図が明確で、罫線の前後に置けば余白を厳密に制御できます。さらに精密に「線の太さと上下の空きを三つとも自分で決めたい」場合は **\specialrule{太さ}{上の空き}{下の空き}**(三引数すべて必須)を使います。これは特殊な状況のための命令で、ふつうは三本の \toprule\midrule\bottomrule で事足ります。

booktabs の哲学は、冒頭で二つの単純な指針として示されます——「縦罫線は絶対に使うな」「二重罫線は使うな」。フィアは「これらは極端に見えるかもしれないが、破ってよい理由を一度も見いだせなかった」と書いています。左右で性質の違う情報を分けたいなら縦線ではなく 表を二つに分け、合計行の上にも単に \midrule を一本引けばよい、という考え方です。実装上も booktabs の罫線は **列指定の | とは接続しない** よう作られており、これは仕様(=縦罫線を使わせない設計)です。

もう一点、**\hlinebooktabs の罫線は混ぜない** こと。フィア自身「\hline\cline と一緒に使っても動く保証はないが、混ぜたい理由が思いつかない」と明言しています。二本の \cmidrule を同じ高さに重ねて二重の部分罫線を作りたい例外的な場合だけは、間に **\morecmidrules** を挟みます(\cmidrule{1-2}\morecmidrules\cmidrule{1-2})。とはいえ二重罫線自体が非推奨なので、これも常用するものではありません。

命令役割既定の太さ/空き
\toprule表の最上部の罫線太さ \heavyrulewidth = 0.08em
\midrule見出しと本体の区切り太さ \lightrulewidth = 0.05em
\bottomrule表の最下部の罫線太さ \heavyrulewidth = 0.08em
\cmidrule(lr){a-b}a〜b 列だけの部分罫線太さ \cmidrulewidth = 0.03em、トリム \cmidrulekern = 0.5em
\addlinespace行間に追加の空き\defaultaddspace = 0.5em
\specialrule太さ・上下の空きを全指定引数 3 つすべて必須

hhline——縦横の交差を制御する

hhline**(デビッド・カーライル作、LaTeX の tools バンドル収録)は、標準の \hline と同じ横罫線・二重横罫線を引きつつ、縦罫線との交わり方 を制御できるパッケージです。\usepackage{hhline} で読み込みます。\hline\hline の二重罫線では、縦罫線がそこで途切れるか貫くかを選べませんが、\hhline なら一文字ずつ指定できます。どうしても二重罫線・部分罫線を縦線と組み合わせる必要があるとき(標準機能では難しい場面)に役立ちます。

\hhline{…} の引数は、tabular の列指定に似たトークンの並びです。各文字の意味は次のとおり。**= は列幅ぶんの二重横罫線、- は単一の横罫線、~(チルダ)は罫線なしの列。縦線については、| はその二重(または単一)横罫線を 貫く 縦線、: は二重横罫線で 途切れる 縦線、# は二本の縦線にはさまれた二重横罫線の一区切りを表します。さらに二重罫線の角を作るための t(二重横罫線の上半分)と b**(下半分)があり、これらは必ず二本の縦線のあいだで使います(|t: で左上の角、:b| で右下の角)。列指定と同じ ***{n}{…}** の繰り返し形も使えます。

注意点として、二重縦罫線(||::)を指定すると、\hhline の横罫線はそこで途切れます。途切れさせずに横罫線を貫かせたいときは # を使うか、縦線の指定そのものを省きます。次は公式ドキュメントの例で、ほとんどの機能を使っています。

latex
\begin{tabular}{||cc||c|c||}
  \hhline{|t:==:t:==:t|}
  a & b & c & d \\
  \hhline{|:==:|~|~||}
  1 & 2 & 3 & 4 \\
  \hhline{#==#~|=#}
  i & j & k & l \\
  \hhline{||--||--||}
  w & x & y & z \\
  \hhline{|b:==:b:==:b|}
\end{tabular}

この表では、上端 |t:==:t:==:t| で各二重横罫線の上半分と縦線の角を作り、下端 |b:==:b:==:b| で下半分を作って、二重罫線の枠を縦罫線ときれいに接続させています。中ほどの行では ~(罫線なし)や #(縦線にはさまれた二重罫線)を混ぜ、横罫線が縦罫線をどこで途切れ・どこで貫くかを 1 行ごとに変えています。ここまで凝った交差を標準の \hline\cline だけで再現するのはほぼ不可能で、hhline の出番はまさにこうした 二重罫線と縦罫線が交わる細工 に限られます。

技術的な補足を一つ。\hline の線は TeX の単一の \hrule ですが、\hhline の線は小さな線分の集まりです。DVI 上では正確に配置されますが、ビューアやドライバによっては線分の継ぎ目がわずかにずれて見えることがあります。気になる場合は別のドライバを試すか、\arrayrulewidth を少し太くすると目立たなくなる、とドキュメントは助言しています。

どれを使うべきか

結論はおおむね一つです——**通常の表は booktabs を既定とする**。\toprule\midrule\bottomrule の三本に、必要なら \cmidrule を加えるだけで、学術誌に載るような簡素で読みやすい表になります。縦罫線も二重罫線も使わない、という指針に従えば、罫線で迷うこと自体がほぼなくなります。

  • booktabs** — ほぼすべての表の第一候補。横罫線だけ、太さと空きが整い、プロ品質。
  • **標準の \hline\cline|** — パッケージなしで使える手軽さが利点。格子状の表や、ごく簡単な下書きに。引きすぎに注意。
  • hhline** — 二重罫線と縦罫線の交差を細かく制御する必要がある特殊なケースに限定。常用しない。

罫線そのものよりも前に、列をどう揃え・どう区切るかが表の骨格を決めます。列指定の基礎は「tabular の基本」、\multicolumn や幅指定などの応用は「列指定の詳細」を参照してください。