
Ich möchte den Text vertikal am oberen Rand jeder Zelle ausrichten, in einemtabular
Umgebung, in der einige Zellenmehrere Zeilen umfassen.
Versuchen Sie, wenn möglich, keine anderen Pakete zu verwenden. (Ich habe keine Kontrolle über die Installation zusätzlicher Pakete.)
\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}
Es gibt zwei Probleme:
Die Verwendung
p{#1}
anstelle vonm{#1}
hilft dabei, Foo, Bar, Spam und Eggs nach oben auszurichten, aber nicht Alpha und Beta. Das[t]
Argument hat nicht funktioniert.Alpha und seine 3 Zeilen erstrecken sich nicht über die Zeilen von Foo, Bar. Gleiches gilt für Beta.
Wie können wir beide Probleme lösen?
Antwort1
so was?
ohne multirow
, mit vereinfachten Spaltentypdefinitionen und mit Verwendung von 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}
Bearbeitung (1):oder suchen Sie nach einer einfachen Tabelle:
{\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}
}
welches einen leicht anderen vertikalen Abstand hat:
bearbeiten(2):Lösung mit multirow
(da op soviel Wunsch, jedoch welche/wieviele Zeilen das umfassen soll ist mir leider nicht klar)
\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}
Das Ergebnis sieht genauso aus wie zuvor (in Bearbeitung (1)), wenn in multirow
einer Zelle nur ein Wort steht. Falls es mehrere sind, zum Beispiel als:
\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}
Das Ergebnis ist: