
Me deparo com um problema simples, mas não consigo encontrar uma solução para ele. Quero criar uma matriz onde todos os elementos em uma linha tenham largura igual. Assim:
Minha abordagem foi 12 colunas (+1 coluna inicial) e depois trabalhar com multicolunas. O problema que recebo é que as linhas não são dimensionadas para a mesma largura desta imagem.
Tentei tabularx como nesta pergunta mas não funcionou como desejado. (Usando 12 vezes X como cabeçalho)Espaçamento entre tabelas, múltiplas colunas
Alguém pode me explicar onde está o erro de que o tabularx também não funciona?
Código para o ambiente de tabela simples
\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}
Responder1
Com colunas de largura fixa:
\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}
Provavelmente um TikA abordagem baseada em Z é melhor, para este caso. Ou talvez até uma árvore em vez de uma mesa.
Responder2
Apenas por diversão:
\multicolumn
coloca todo o espaço "extra" na última coluna usada, e muitas dessas colunas nunca são usadas individualmente.
\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}
Responder3
Não tenho certeza se é isso que você quer dizer, mas se quiser que as caixas sejam proporcionais em tamanho aos números, você pode usar TikZ. chains
Basicamente, a primeira coluna é uma cadeia chamada n
de baixo, e cada linha numerada é uma cadeia que vai para a direita. Não há verificação de erros, portanto suas linhas podem ser menores ou maiores que 100.
Você pode alterar o valor de \widthfactor
para ajustar a largura da tabela.
Há também um argumento opcional que pode definir TikOpções Z para toda a tabela, por exemplo:
\chancetable[thick, orange, text=blue]{{100},{50,50},{22,56,22},{12.5,37.5,37.5,12.5}}
podia funcionar.
\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}