
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}
有兩個問題:
使用
p{#1}
代替有助於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
(正如操作人員所希望的那樣,但是不幸的是我不清楚應該跨越哪些/多少行)
\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
如果s 單元格中只有一個單詞,結果看起來與之前(在編輯 (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}
結果是: