Правильный интервал между столбцами

Правильный интервал между столбцами

Я столкнулся с простой проблемой, но не могу найти ее решение. Я хочу создать матрицу, где все элементы в строке имеют одинаковую ширину. Вот так:

Цель таблицы

Мой подход был 12 столбцов (+1 начальный столбец) и затем работа с несколькими столбцами. Проблема, которую я получаю, заключается в том, что строки не масштабируются до той же ширины, что на этой картинке.

введите описание изображения здесь

Я попробовал tabularx, как в этом вопросе, но это не сработало так, как хотелось бы. (Использование 12 раз X в качестве заголовка)Расстояние между таблицами, несколько столбцов

Может ли кто-нибудь объяснить мне, в чем ошибка, из-за которой tabularx тоже не работает?

Код для простой табличной среды

\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}

решение1

Со столбцами фиксированной ширины:

\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}

введите описание изображения здесь

Вероятно, ТикВ этом случае лучше использовать подход на основе Z. Или, может быть, даже дерево вместо таблицы.

решение2

Просто ради развлечения:

\multicolumnпомещает все «лишнее» пространство в последний используемый столбец, и многие из этих столбцов никогда не используются по отдельности.

\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}

решение3

Я не уверен, что вы это имеете в виду, но если вы хотите, чтобы размеры ячеек были пропорциональны числам, вы можете использовать TiкZ chains. По сути, первый столбец — это цепочка, называемая nидущей вниз, а каждая пронумерованная строка — это цепочка, идущая вправо. Проверка ошибок отсутствует, поэтому ваши строки могут быть короче или длиннее 100.

Вы можете изменить значение, \widthfactorчтобы отрегулировать ширину таблицы.

введите описание изображения здесь

Также есть необязательный аргумент, который может установить TiкПараметры Z для всей таблицы, например:

\chancetable[thick, orange, text=blue]{{100},{50,50},{22,56,22},{12.5,37.5,37.5,12.5}}

должно сработать.

\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}

Связанный контент