
tabular
一部のセルを垂直に揃える必要がある環境で、すべてのセルの上部にテキストを垂直に揃えたい。複数の行にまたがる。
可能であれば、他のパッケージを使用しないようにしてください。(追加パッケージのインストールについては制御できません。)
\documentclass[12pt, margin = 1mm]{standalone}
\newcommand\TS{\rule{0pt}{2.6ex}} % Top strut
\newcommand\BS{\rule[-0.9ex]{0pt}{0pt}} % Bottom strut
\usepackage{array, multirow}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\TS\BS\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering \let\newline\\\TS\BS\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft \let\newline\\\TS\BS\arraybackslash}p{#1}}
\begin{document}
\begin{tabular} [t] { C{2cm} C{3cm} | C{2cm} C{3cm} }
Column 1 & Column 2 & Column 3 & Column 4 \\ \hline
Foo & Line 1 \newline Line 2 &
\multirow{2}{*}{Alpha} & Line 1 \newline Line 2 \newline Line 3 \\
Bar & Line 1 \newline Line 2 \\
Spam & Line 1 \newline Line 2 &
\multirow{2}{*}{Beta} & Line 1 \newline Line 2 \newline Line 3 \\
Eggs & Line 1 \newline Line 2 \\
\end{tabular}
\end{document}
問題は2つあります。
p{#1}
instead ofを使用するとm{#1}
、Foo、Bar、Spam、Eggs を上に揃えることができますが、Alpha、Beta は上に揃えられません。この[t]
議論は機能しませんでした。Alpha とその 3 行は、Foo と Bar の行にまたがっていません。Beta についても同様です。
両方の問題をどのように解決できるでしょうか?
答え1
このような?
なしmultirow
、列定義の簡略化されたタイプあり、 の使用ありmakecell
:
\documentclass[12pt, margin=3mm]{standalone}
\usepackage{array, makecell}
\setcellgapes{3pt}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\begin{document}
{\makegapedcells
\begin{tabular} { C{2cm} C{3cm} | C{2cm} C{3cm} }
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
Foo & \makecell[t]{Line 1\\ Line 2} & Alpha & \makecell[t]{Line 1\\ Line 2} \\
Bar & \makecell[t]{Line 1\\ Line 2} & & \\
Spam & \makecell[t]{Line 1\\ Line 2} & Beta & \makecell[t]{Line 1\\ Line 2} \\
Eggs & \makecell[t]{Line 1\\ Line 2} & & \\
\end{tabular}
}
\end{document}
編集(1):またはシンプルなテーブルをお探しの場合:
{\makegapedcells
\begin{tabular} { C{2cm} C{3cm} | C{2cm} C{3cm} }
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
Foo & Line 1 & Alpha & Line 1 \\
& Line 2 & & Line 2 \\
Bar & Line 1 & & \\
& Line 2 & & \\
Spam & Line 1 & Beta & Line 1 \\
& Line 2 & & Line 2 \\
Eggs & Line 1 & & \\
& Line 2 & & \\
\end{tabular}
}
垂直方向の間隔が若干異なります。
編集(2):解決策multirow
(OP が非常に望んでいるように、どの行に何行をまたぐべきかは残念ながら私にはわかりません)
\documentclass[12pt, margin=3mm]{standalone}
\usepackage{array, makecell, multirow}
\setcellgapes{3pt}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\begin{document}
{\makegapedcells
\renewcommand\multirowsetup{\centering}% <-- for centering contents of multirow center
\begin{tabular} { C{2cm} C{3cm} | C{2cm} C{3cm} }
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\multirow[t]{2}{=}{Foo} & Line 1 & \multirow[t]{4}{=}{Alpha} & Line 1 \\
& Line 2 & & Line 2 \\
\multirow[t]{2}{=}{Bar} & Line 1 & & \\
& Line 2 & & \\
\multirow[t]{2}{=}{Spam}& Line 1 & \multirow[t]{4}{=}{Beta} & Line 1 \\
& Line 2 & & Line 2 \\
\multirow[t]{2}{=}{Eggs}& Line 1 & & \\
& Line 2 & & \\
\end{tabular}
}
\end{document}
multirow
セルに単語が1つだけある場合、結果は前(編集(1))と同じになります。単語が複数ある場合は、次のようになります。
\begin{tabular} { C{2cm} C{3cm} | C{2cm} C{3cm} }
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\multirow[t]{2}{=}{Foo} & Line 1 & \multirow[t]{4}{=}{Alpha} & Line 1 \\
& Line 2 & & Line 2 \\
\multirow[t]{2}{=}{Bar} & Line 1 & & \\
& Line 2 & & \\
\multirow[t]{2}{=}{Spam}& Line 1 & \multirow[t]{4}{=}{Beta Beta Beta Beta Beta
Beta Beta Beta Beta Beta}
& Line 1 \\
& Line 2 & & Line 2 \\
\multirow[t]{2}{=}{Eggs}& Line 1 & & \\
& Line 2 & & \\
\end{tabular}
結果は次のとおりです。