
Wie kann ich in Latex eine Tabelle wie das folgende Bild erhalten?
Antwort1
Eine mögliche Lösung. Ich schlage vorkeine Verwendung der vertikalen Linien, sondern vielmehr diebooktabs
Paket. Für die horizontale Ausrichtung 20
können Sie dasmultirow
Paket, während Sie für die vertikale Ausrichtung die Breite des größten Eintrags der ersten Spalten über dascalc
Paket.
\documentclass{article}
\usepackage{booktabs,calc,multirow}
\newlength\wdx% for vertical alignment
\setlength{\wdx}{\widthof{66}}
\begin{document}
\begin{table}
\centering
\addtolength{\tabcolsep}{10pt}% increase distance between cells
\begin{tabular}{cccccc}
\toprule
\textsf{x} & \multicolumn{5}{c}{\textsf{y}}\\
\cmidrule(l{\wdx}r{\wdx}){1-1}\cmidrule(l){2-6}
10 & 22 & 33 \\
\multirow{2}[2]{\wdx}{20} & 45 & 34 & 88 & 77 & 80 \\
& 34 & 67\\
66 & 12 & 10 & 45 & 66\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
Antwort2
Wenn Sie in Ihrer Tabelle eine vertikale Linie verwenden müssen, würde ich vorschlagen, dass Sie auch "Streben" einfügen, um einen besseren vertikalen Abstand über und unter den von gezeichneten horizontalen Linien zu erhalten \hline
. Im Allgemeinen finde ich es jedoch vorzuziehen, Tabellen zu konstruierenohnevertikale Regeln und um das booktabs
Paket zu verwenden, um horizontale Linien mit gleichmäßigem Abstand zu erhalten, die mit \toprule
, \midrule
, usw. gezeichnet werden.
Um den zweiten Eintrag in der ersten Spalte vertikal zu zentrieren, verwenden Sie eine \multirow
Anweisung.
Sie können die Aufgabe, die erste Spalte immer fett darzustellen, auch automatisieren.
Wenn Sie das Paket schließlich verwenden möchten tabularx
, etwa weil Sie eine vordefinierte Breite der Tabelle erreichen möchten und wenn Sie möchten, dass der Inhalt zentriert ist (was in dem von Ihnen geposteten Screenshot der Fall zu sein scheint), müssen Sie auch eine spezielle, „zentrierte“ Version des X
vom Paket bereitgestellten Spaltentyps definieren tabularx
.
Die erste Tabelle unten verwendet eine tabular
Umgebung, und die zweite verwendet eine tabularx
Umgebung mit der Gesamtbreite von 0.7\textwidth
. Die zweite Tabelle ist ebenfalls in serifenloser Schrift gesetzt.
\documentclass[10pt,a4paper]{article}
\usepackage{multirow,array}
% define "struts" as suggested by Claudio Beccari in
% a piece in TeX and TUG News, Vol. 2, 1993.
\newcommand\T{\rule{0pt}{2.6ex}} % = `top' strut
\newcommand\B{\rule[-0.9ex]{0pt}{0pt}} % = `bottom' strut
\newcommand\TB{\T\B} % top-and-bottom strut
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{tabular}{>{\bfseries}c|ccccc}
x & \multicolumn{5}{c}{\bfseries y\B}\\
\hline
10 & 22 & 33\TB\\
\hline
\multirow{2}{*}{20} & 45 & 34 & 88 & 77 & 80\T\\
& 34 & 67\B \\
\hline
66 & 12 & 10 & 45 & 66\T\\
\end{tabular}
\bigskip
\textsf{ % switch to sans-serif for the second table
\begin{tabularx}{0.7\textwidth}{>{\bfseries}C|CCCCC}
x & \multicolumn{5}{c}{\bfseries y\B}\\
\hline
10 & 22 & 33\TB\\
\hline
\multirow{2}{*}{20} & 45 & 34 & 88 & 77 & 80\T\\
& 34 & 67\B \\
\hline
66 & 12 & 10 & 45 & 66\T\\
\end{tabularx}}
\end{document}
Antwort3
Eine Lösung, die zusätzlich zu array
nur das makecell
Paket verwendet. Ein Vorteil ist, dass man mit dem Befehl viel weniger enge Reihen haben kann \makecell*
(es fügt hinzu\jot
symmetrischam oberen und unteren Rand einer Zelle, im Gegensatz zu \renewcommand{\arraystretch}{…}
. Eine weitere Möglichkeit ist die Möglichkeit, die Dicke der vertikalen Linien zu ändern (wie booktabs
, aber mit der Möglichkeit, vertikale Linien zu verwenden).
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array, makecell}
\begin{document}
\begin{table}
\centering\sffamily
\addtolength{\tabcolsep}{10pt}% increase distance between cells
\begin{tabular}{c!{\vline width1pt}*{5}{c}}
\makecell*{x} & \multicolumn{5}{c}{y}\\
\Xhline{1pt}
\makecell*{10} & 22 & 33 \\
\hline
\makecell{20\\[-2.5ex]}& \makecell*[tc]{45\\34} & \makecell[tc]{34\\67} & 88 & 77 & 80 \\
\hline
\makecell*{66} & 12 & 10 & 45 & 66
\end{tabular}
\end{table}
\end{document}