コンテンツへスキップ
Topos Uranos

要約

この回では、前回の読みやすい表を、単純な格子では片づかない場合へと広げる。\multicolumn でセルを横方向に結合し、部分罫の下に見出しをまとめたり、一つのセルだけ揃え方を変えたりする方法を学び、まとめた見出しの余った幅がどこへ行くかを導く。\multirow でセルを縦方向に結合する方法と、それを避けたほうがよい場合を学ぶ。表を行の幅に合わせる三つの方法(tabularx とその X 列、\extracolsep を使う tabular*、そして勧められない \resizebox による拡大縮小)を比べる。longtable で複数ページにわたる表を組み、繰り返される見出しと必要なコンパイル回数を確かめる。非常に幅の広い表のためにページを回転する方法を紹介する。csvsimple と pgfplotstable でデータファイルから表を生成し、そのファイルを filecontents で作る。現代的な代替として tabularray を示す。最後に、よくあるエラーを実際のログで読む。

学習目標

  1. \multicolumn と \cmidrule でまとめた見出しを作り、各行のセルを数え、数が合わないときの結果を予見する。
  2. \multirow と booktabs の伝統にある空セルのどちらを使うかを、読みやすさを根拠に選ぶ。
  3. tabularx または tabular* で表を行の幅に合わせ、表を \resizebox で拡大縮小しない理由を説明する。
  4. longtable で独自の見出しと脚をもつ複数ページの表を組み、その警告を読み解き、それをフロートの中に入れられない理由を知る。
  5. データファイルから表を生成し、データの出所を一つにすることで何が得られるかを説明する。

複数の列にまたがるセル

命令 \multicolumn{n}{揃え}{テキスト} は、行の中で隣り合う n 個のセルの場所を占め、それらを一つのセルに置き換える。揃え方は第二引数で指定し、表のプリアンブルと同じように書く(l、c、r、p{…}、さらに @{})。ここから、著者が行ごとに確かめるべき数え方の規則が導かれる。普通のセルの数と、各 \multicolumn で宣言した幅の合計は、プリアンブルの列数を超えてはならない。

一つのセルだけ揃え方を変える

\multicolumn のもっとも控えめな使い方は、一列だけにまたがるものである。\multicolumn{1}{c}{…} は何も結合しないが、そのセルに列とは異なる揃え方を課す。右揃えの数値の列の見出しを中央に置いたり、合計の行の見出しを右揃えにして数値の隣に置いたりするのに使う。

例ある研究計画の予算
LaTeX コード
\documentclass{article}\usepackage{luatexja-fontspec}\setmainjfont{Noto Serif CJK JP}\usepackage{booktabs}\begin{document}\begin{tabular}{llr}\toprule費目 & 内訳 & \multicolumn{1}{c}{金額} \\\midrule旅費     & 文書館への出張二回       & 1\,200 \\物品費   & 用紙と外付けディスク     &    300 \\役務費   & 史料のデジタル化         &    850 \\\midrule\multicolumn{2}{r}{合計} & 2\,350 \\\bottomrule\end{tabular}\end{document}
結果
結果

見出し「金額」は、右揃えのままの列の上で中央に置かれる。最初の二列にまたがる「合計」は右揃えになり、その数値の隣に来る。

まとめた見出し

いくつかの列が一つの区分に属するとき、表は二段の見出しで読みやすくなる。上段には区分の名前を置いてその列にまたがらせ、下段には各列の名前を置く。二段のあいだに、booktabs は部分罫 \cmidrule{2-3} を用意している。これは第2列から第3列の下だけに罫を引く。オプション (lr) をつけて \cmidrule(lr){2-3} とすると、罫の左右の端が少し切り詰められ、隣り合う二本の罫が接しないので、目には二つのまとまりが見える。

例ある研究の群ごとの結果
LaTeX コード
\documentclass{article}\usepackage{luatexja-fontspec}\setmainjfont{Noto Serif CJK JP}\usepackage{booktabs}\begin{document}\begin{tabular}{lrrrr}\toprule& \multicolumn{2}{c}{対照群}& \multicolumn{2}{c}{実験群(反転授業)} \\\cmidrule(lr){2-3} \cmidrule(lr){4-5}測定 & 平均 & 標準偏差 & 平均 & 標準偏差 \\\midrule事前 & 52.1 & 8.3 & 51.7 & 7.9 \\事後 & 54.0 & 8.1 & 61.2 & 7.4 \\\bottomrule\end{tabular}\end{document}
結果
結果

一行目には空のセルが一つ(先頭の &)と、二列ずつにまたがるセルが二つある。一たす二たす二で五となり、プリアンブルと一致する。実験群の標準偏差の列が、対照群のそれより広いことに注意してほしい。

余った幅はどこへ行くか

前の例の幅の違いは偶然ではない。\multicolumn のテキストが、またがる列の幅の合計より広いと、表は広がらなければならず、エンジンは超過分をすべて、それらの列の最後の列に与える。ほかの列は自然な幅を保つ。「実験群(反転授業)」は「平均」と「標準偏差」を合わせたより広く、その差を後者が受け取る。「対照群」は短いので、その下の二列は影響を受けない。見出しがデータよりずっと長いと、この効果は目立たないではすまなくなる。

例長すぎる見出し
LaTeX コード
\documentclass{article}\usepackage{luatexja-fontspec}\setmainjfont{Noto Serif CJK JP}\usepackage{booktabs}\begin{document}\begin{tabular}{lrr}\toprule& \multicolumn{2}{c}{反転授業による介入を終えた後の実験群} \\\cmidrule(lr){2-3}測定 & 平均 & 標準偏差 \\\midrule事前 & 51.7 & 7.9 \\事後 & 61.2 & 7.4 \\\bottomrule\end{tabular}\end{document}
結果
結果

平均の数値は標準偏差の数値から遠く離れ、何の意味もない空白で隔てられる。直すべきは組版ではなく文章である。短い見出し(「実験群」)にして、説明は表のキャプションか本文に書く。