表の 1 行目だけ中央揃えにしたい
LaTeX で表を作成する場合、すべてのセルが \begin{tabular}
に続く揃え位置に従います。そのため、\begin{tabular}{lll}
のような表はすべて左揃えになり、1 行目は中央揃え、2 行目以降は左揃えのような表を作成することは出来ません。
HTML における表では、デフォルトで表の 1 行目のが太字中央揃えになっていますが、LaTeX ではそのようになっていません。そもそも、LaTeX には HTML における <thead>
のような概念が無いようです。
本記事では、表の 1 行目だけ中央揃えにする方法を考えます。
■ 前提
本記事では、サンプルを作成する際に次の文書クラスとパッケージを利用します。
- 文書クラス:
- 表作成:
- ダミーテキスト:
また、実行は LuaLaTeX を利用します。特に制約はないので、(u)pLaTeX でも動作するはずです。
■ デフォルトでの対応
\multicolumn
コマンド を使ってある種の悪用をします。
\multicolumn{}{}{}
は本来、横のセルを結合するコマンドです。1 つ目の引数に結合するセルの数、2 つ目の引数に揃え位置の指定、3 つ目の引数にセルの内容を与えます。
本来、1 つ目の引数には 2
以上の数を与えることで横向きにセルを結合しますが、これに 1
を与えます。これに加えて、2 つ目の引数に c
(中央揃え)を指定します。
\multicolumn{1}{c}{...}
これによって、特定のセルだけが中央揃えになります。
実際にこれをそのまま利用するには面倒なので、次のように新しいコマンドとして定義しておくと良いでしょう。太字にしたい場合は、\textbf
で強調しておくと良いでしょう。
\newcommand{\thead}[1]{\multicolumn{1}{c}{#1}}
% or
\newcommand{\thead}[1]{\multicolumn{1}{c}{\textbf{#1}}}
これを利用することで、次のような表を作成することが出来ます。
\documentclass[ class = jlreq, border = 2pt ]{standalone}
\usepackage{lipsum, bxjalipsum}
\usepackage{booktabs, tabularx}
\newcommand{\thead}[1]{\multicolumn{1}{c}{\textbf{#1}}}
\begin{document}
\begin{tabularx}{0.8\linewidth}{XX}
\toprule
\thead{日本語} & \thead{English} \\
\midrule
\jalipsum[1]{kusamakura} & \lipsum[1][1] \\
\jalipsum[2]{kusamakura} & \lipsum[1][2] \\
\bottomrule
\end{tabularx}
\end{document}
期待した通りの結果を得ることが出来ました。
■ makecell パッケージの利用
makecell パッケージでは、上述した機能を有した \thead
コマンドが提供されています。
makecell パッケージから提供される \thead
で指定されたセルは中央揃えになりますが、\footnotesize
が適用されます。そのため、これを変更したい場合は \theadfont
を再定義します。
太字にしたい場合は次のようにします。
\renewcommand{\theadfont}{\bfseries}
これを利用することで、次のような表を作成することが出来ます。
\documentclass[ class = jlreq, border = 2pt ]{standalone}
\usepackage{lipsum, bxjalipsum}
\usepackage{booktabs, tabularx}
\usepackage{makecell} \renewcommand{\theadfont}{\bfseries}
\begin{document}
\begin{tabularx}{0.8\linewidth}{XX}
\toprule
\thead{日本語} & \thead{English} \\
\midrule
\jalipsum[1]{kusamakura} & \lipsum[1][1] \\
\jalipsum[2]{kusamakura} & \lipsum[1][2] \\
\bottomrule
\end{tabularx}
\end{document}
概ね \multicolumn
を利用した方法と同じ結果になりました。
\multicolumn
を用いた方法との大きな違いは、makecell パッケージの \thead
コマンドはコマンド内部で改行を許すことです。
\documentclass[ class = jlreq, border = 2pt ]{standalone}
\usepackage{lipsum, bxjalipsum}
\usepackage{booktabs, tabularx}
\usepackage{makecell} \renewcommand{\theadfont}{\bfseries}
\begin{document}
\begin{tabularx}{0.8\linewidth}{XX}
\toprule
\thead{日\\本\\語} & \thead{English} \\
\midrule
\jalipsum[1]{kusamakura} & \lipsum[1][1] \\
\jalipsum[2]{kusamakura} & \lipsum[1][2] \\
\bottomrule
\end{tabularx}
\end{document}
あくまで縦書きではないことに注意してください。
この他にもさまざまなコマンドが提供されています。詳しくはパッケージガイドを参照してください。
■ tabularray パッケージの利用
tabularray パッケージから提供される tblr 環境では、表作成で必要になる機能が揃っています。
tblr 環境の大きな特徴の 1 つとして、\begin{tblr}
に続く引数に表のスタイルを指定できます。そのため、表自体にスタイルのためのコマンドを持ち込む必要がありません。
tblr 環境を利用することで、次のような表を作成できます。
\documentclass[ class = jlreq, border = 2pt ]{standalone}
\usepackage{lipsum, bxjalipsum}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{
width = { 0.8\linewidth },
hline{1,Z} = { 0.08em },
hline{2} = { 0.05em },
colspec = { XX },
row{1} = { halign = c, font = \bfseries },
}
日本語 & English \\
\jalipsum[1]{kusamakura} & \lipsum[1][1] \\
\jalipsum[2]{kusamakura} & \lipsum[1][2]
\end{tblr}
\end{document}
ざっくり解説すると、次のようになっています。
-
width
:表の幅を指定します -
hline
:引数の位置に水平線を引きます-
hline{1,Z}
は、表の最上と最下に引きます -
hline{2}
は、表の 1 行目と 2 行目の間に引きます - 太さは booktabs パッケージに対応しています
コマンド 太さ \toprule
\bottomrule
0.08em \midrule
0.05em - 色や線のスタイルも変更できます
-
-
colspec
:列の揃い位置を指定します- tabularx パッケージと同様の
X
を指定しています
- tabularx パッケージと同様の
-
row{1}
:行 1 のスタイルを指定します-
halign
は水平方向の揃い位置を構成し、c
によって中央揃えを指定しています -
font
はフォントを構成し、\bfseries
を指定することで太字にしています
-
ちなみに、この表の設定は順序を問うため、calspec
と row{1}
を逆順にすると row{1}
の halign
設定が無視されてしまいます。(例によって、後の設定が優先されます)
実例は避けますが、tblr 環境では {}
でセルを囲うとセル内の改行が可能です。
余談
tabularray パッケージ便利〜〜。
記事内では \textbf
あるいは \bfseries
のみにしていますが、ラテン文字をサンセリフ体にしたい場合は次のようにしておくと良いでしょう。
{\bfseries\gtfamily\sffamily}
% or
{\gtfamily\sffamily}
otf パッケージを利用して多書体化している場合は、\bfseries
を除いた {\gtfamily\sffamily}
のみにしておくと良いです。