
Ich habe ein einfaches Problem, aber ich kann keine Lösung dafür finden. Ich möchte eine Matrix erstellen, in der alle Elemente in einer Zeile die gleiche Breite haben. So:
Mein Ansatz bestand darin, 12 Spalten (+1 Anfangsspalte) zu verwenden und dann mit mehreren Spalten zu arbeiten. Das Problem dabei ist, dass die Zeilen nicht auf die gleiche Breite skaliert sind wie in diesem Bild.
Ich habe tabularx wie in dieser Frage ausprobiert, aber es hat nicht wie gewünscht funktioniert. (12-mal X als Überschrift verwenden)Tabellenabstand, mehrspaltig
Kann mir jemand erklären wo der Fehler liegt, dass auch Tabularx nicht funktioniert?
Code für die einfache Tabel-Umgebung
\documentclass{article}
\begin{document}
\begin{table}[h]
\begin{tabular}{|c|cllcclclccll|}
\hline
N & \multicolumn{12}{c|}{Chance} \\ \hline
1 & \multicolumn{12}{c|}{100} \\ \hline
2 & \multicolumn{6}{c|}{50} & \multicolumn{6}{c|}{50} \\ \hline
3 & \multicolumn{4}{c|}{22} & \multicolumn{4}{c|}{56} & \multicolumn{4}{c|}{22} \\ \hline
4 & \multicolumn{3}{c|}{12.5} & \multicolumn{3}{c|}{37.5} & \multicolumn{3}{c|}{37.5} & \multicolumn{3}{c|}{12.5} \\ \hline
\end{tabular}
\end{table}
\end{document}
Antwort1
Mit Spalten fester Breite:
\documentclass{article}
\usepackage{array}
\newlength{\blockwidth}
\begin{document}
\begin{table}[htp]
\centering
% local settings
\setlength{\blockwidth}{0.5cm}
\newcommand{\block}[2]{% #1 = number of blocks to span, #2 = text
\multicolumn{#1}{w{c}{\dimeval{#1\blockwidth+10\arrayrulewidth*\f{#1}/#1}}|}{#2}%
}
\newcommand{\f}[1]{\inteval{4*(#1-3)}}
%%%
\begin{tabular}{|>{$\vphantom{\bigg|}}c<{$}|*{12}{c}}
\hline
N & \block{12}{Chance} \\ \hline
1 & \block{12}{100} \\ \hline
2 & \block{6}{50} & \block{6}{50} \\ \hline
3 & \block{4}{22} & \block{4}{56} & \block{4}{22} \\ \hline
4 & \block{3}{12.5} & \block{3}{37.5} & \block{3}{37.5} & \block{3}{12.5} \\ \hline
\end{tabular}
\caption{A caption}
\end{table}
\end{document}
Wahrscheinlich ein TikIn diesem Fall ist ein Z-basierter Ansatz besser. Oder vielleicht sogar ein Baum statt einer Tabelle.
Antwort2
Nur zum Spaß:
\multicolumn
fügt den gesamten „zusätzlichen“ Platz in die zuletzt verwendete Spalte ein und viele dieser Spalten werden nie einzeln verwendet.
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\begin{table}[h]
\begin{tabularx}{\textwidth}{|c|XXXXXXXXXXXX|}
\hline
&&&&&&&&&&&& \\[-\normalbaselineskip]% hidden
N & \multicolumn{12}{c|}{Chance} \\ \hline
1 & \multicolumn{12}{c|}{100} \\ \hline
2 & \multicolumn{6}{c|}{50} & \multicolumn{6}{c|}{50} \\ \hline
3 & \multicolumn{4}{c|}{22} & \multicolumn{4}{c|}{56} & \multicolumn{4}{c|}{22} \\ \hline
4 & \multicolumn{3}{c|}{12.5} & \multicolumn{3}{c|}{37.5} & \multicolumn{3}{c|}{37.5} & \multicolumn{3}{c|}{12.5} \\ \hline
\end{tabularx}
\end{table}
\end{document}
Antwort3
Ich bin nicht sicher, ob Sie das meinen, aber wenn Sie möchten, dass die Größe der Kästchen proportional zu den Zahlen ist, können Sie Ti verwenden.kZ. chains
Im Grunde ist die erste Spalte eine Kette, die nach n
unten geht, und jede nummerierte Zeile ist eine Kette, die nach rechts geht. Es gibt keine Fehlerprüfung, Ihre Zeilen können also kürzer oder länger als 100 sein.
Sie können den Wert ändern, \widthfactor
um die Breite der Tabelle anzupassen.
Es gibt auch ein optionales Argument, mit dem Ti festgelegt werden kannkZ-Optionen für die gesamte Tabelle, zum Beispiel:
\chancetable[thick, orange, text=blue]{{100},{50,50},{22,56,22},{12.5,37.5,37.5,12.5}}
würde funktionieren.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{chains}
\newcommand{\widthfactor}{1}
\tikzset{rect/.style={draw, minimum width=#1, minimum height=5mm, inner sep=0pt}}
\newcommand{\chancetable}[2][]{\tikz[node distance=-\pgflinewidth, #1]{
\node[rect=\widthfactor*5mm, start chain=n going below](N0){N}; \node[rect=\widthfactor*100mm, right=of N0]{Chance};
\foreach \r[count=\n, evaluate=\n as \k using {int(\n-1)}] in {#2} {
\node[rect=\widthfactor*5mm, below=of N\k, start chain=\n, on chain=\n](N\n){\n};
\foreach \p in \r {\node[on chain=\n, rect=\widthfactor*\p mm]{\p};}
}
}}
\begin{document}
\chancetable{{100},{50,50},{22,56,22},{12.5,37.5,37.5,12.5}}
\end{document}