
簡単な問題に遭遇しましたが、解決策が見つかりません。行内のすべての要素の幅が等しい行列を作成したいです。次のようになります。
私のアプローチは、12 列 (+ 1 初期列) で、その後複数列で作業するというものでした。私が遭遇した問題は、行がこの図と同じ幅に拡大縮小されないことです。
この質問のように tabularx を試しましたが、期待どおりに動作しませんでした。(ヘッダーとして X の 12 倍を使用)表の間隔、複数列
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}
おそらくTiけこの場合、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}