答案1
\documentclass{article}
\usepackage{array, multirow}
\setlength\extrarowheight{2pt}
\begin{document}
by merging columns
\begin{tabular}{|c| c|c | c|c |}
\hline
& \multicolumn{2}{c|}{A}
& \multicolumn{2}{c|}{B} \\
\hline
\multirow{2}{*}{1} & 1 & 2 & 1 & 2 \\ \cline{2-5}
& 3 & 4 & 3 & 4 \\
\hline
\end{tabular}
\medskip
by inserting tables
\begin{tabular}{|c| @{}c @{} | @{}c@{} |}
\hline
& A & B \\
\hline
\multirow{1.3}{*}{1} & \begin{tabular}{l|l}
1 & 2 \\ \hline
3 & 4 \\
\end{tabular}
& \begin{tabular}{l|l}
1 & 2 \\ \hline
3 & 4 \\
\end{tabular} \\
\hline
\end{tabular}
\end{document}
答案2
您遇到了什么编译错误?它为我编译。只需嵌套您的tabular
环境,记住每个环境都是一个单元,并在每行末尾&
用分隔它们:\\
\documentclass{article}
\begin{document}
\begin{tabular}{ll}
\hline
\begin{tabular}{ll}
1 & 2 \\
3 & 4 \\
\end{tabular} &
\begin{tabular}{ll}
1 & 2 \\
3 & 4 \\
\end{tabular} \\
\hline
\begin{tabular}{ll}
1 & 2 \\
3 & 4 \\
\end{tabular} &
\begin{tabular}{ll}
1 & 2 \\
3 & 4 \\
\end{tabular} \\
\hline
\end{tabular}
\end{document}
但是,我认为正确的解决方案不是嵌套表格,而是记住您实际上拥有的单元格数量是您想象的四倍;因此使用\multirow
和\multicolumn
:
\documentclass{article}
\usepackage{multirow}
\thispagestyle{empty}
\begin{document}
\begin{tabular}{lllll}
\hline
{} & \multicolumn{2}{c}{First Col.} & \multicolumn{2}{c}{Second Col.} \\
\multirow{2}{*}{1st Column} & 1 & 2 & 1 & 2 \\
{} & 3 & 4 & 3 & 4 \\
\hline
{} & \multicolumn{2}{c}{First Col.} & \multicolumn{2}{c}{Second Col.} \\
\multirow{2}{*}{1st Column} & 1 & 2 & 1 & 2 \\
{} & 3 & 4 & 3 & 4 \\
\hline
\end{tabular}
\end{document}
第二个会给你这个:
当然,哪一个更好地代表您的实际数据将取决于您的数据。
希望有所帮助。
答案3
我有两个示例,它们展示了满足您的要求的两种不同方法。示例 1 定义了一列宽和十二列窄,第 1 行的高度是第 2 行至第 5 行的两倍。第 1 列中单元格的高度(第一个单元格除外)只是较短规则造成的假象。
在示例 2 中,我定义了七列三行,宽度和高度相等。mini cells
第 2 行和第 3 行、第 2 列至第 13 列中的四列是通过嵌套表格创建的。嵌套表格有两列两行,宽度和高度相等。
示例 1
我首先加载包大批,并定义三种新的列类型 - D
(ouble) - S
(ingle) – Z
(ero) width
宽列(D
)是 1/7 线宽 - 但我们必须考虑列分隔符(tabcolsep
)的宽度和规则的宽度。
窄列的宽度为 1/14 行宽,因为除了双倍宽度的列外,还有 12 个窄列。总计为 14。我们必须校正tabcolsep
s 和所有垂直规则的宽度,以避免框过满。
最后一列的宽度为 0 pt – 我删除了右侧的列分隔符(“侧边距”)。我们向此列中的每个单元格中注入与窄单元格宽度一样高的零宽度规则。这将强制单元格为正方形,形成四个mini cells
。
我定义了一个新命令\hd
来格式化表格标题。使用 -command 可以将标题扩展到两列\multicolumn
。这只是一个简化的命令,可以减少输入和混乱。
在第一行中,我们设置了与宽列 (`D) 的宽度一样高的零宽度规则。这将强制标题行中单元格的宽度和高度相等,但会将文本推到单元格的底部。这在印刷上是正确的,但如果这不是您想要的,请查看下面的示例 2。
\documentclass[12pt,a4paper]{article}
\usepackage{array}
% Define three column types - D(ouble) - S(ingle) - Z(ero) width
\newcolumntype{D}{wc{\dimexpr(\linewidth/7)-(2\tabcolsep+2\arrayrulewidth)}}
% Wide column is 1/7 linewidth - minus the distance between the column and width of the rules
\newcolumntype{S}{wc{\dimexpr(\linewidth/14)-(2\tabcolsep+2\arrayrulewidth)}}
% Narrow column is 1/14 linewidth - minus the distance between the column and width of the rules
\newcolumntype{Z}{@{}>{\rule{0pt}{\dimexpr((\linewidth/14)-\tabcolsep)}}wc{0pt}@{}}
% The last column is 0 pt width - and the side bearing has to be removed. We induce a zero width rule into all cells, and the rule is as high as the width of the cell.
% Defining a command to be used as Table Heading
\newcommand\hd[1]{%
\multicolumn{2}{D|}{\Large\bfseries#1}}
\begin{document}
\sffamily
\noindent\begin{tabular}{|>{\Large\bfseries}D*{12}{|S}|Z}
\hline
&\hd{A}
&\hd{B}
&\hd{C}
&\hd{D}
&\hd{E}
&\hd{F}
&\rule{0pt}{\dimexpr((\linewidth/7)-\tabcolsep)}\\ % Force heading row to be as high as its width
\hline
&1&2&&&&&&&&&&&\\
\cline{2-13}
1&3&4&&&&&&&&&&&\\
\hline
&2&3&&&&&&&&&&&\\
\cline{2-13}
2&1&4&&&&&&&&&&&\\
\hline\end{tabular}
\end{document}
示例 2
在这里,我将所有单元格定义为双倍宽度和高度。在第 2 行和第 3 行、第 2 至第 6 列中,我嵌套了 2x2 的小表格,以创建四个mini cells
。
我没有在零宽度列中注入零宽度规则,而是定义了两个命令DD
和ss
,它们使用 -commands 执行相同的操作\vphantom
。但是,我在每行的开头也使用了它们,在嵌套的表格中也是如此。代码改编自 Yiannis Lazarides 的回答另一个问题。
我定义了命令\hd
来格式化标题行中的文本。此外,我还定义了嵌套表格的简写。它减少了打字和混乱。
如您所见,表格中的文本垂直和水平对齐。
\documentclass[12pt,a4paper]{article}
\usepackage{array}
\newcolumntype{D}{wc{\dimexpr(\linewidth/7)-(2\tabcolsep+2\arrayrulewidth)}}
\newcolumntype{S}{wc{\dimexpr(\linewidth/14)-(2\tabcolsep+2\arrayrulewidth)}}
\def\DD{\vphantom{\parbox[c][\dimexpr(\linewidth/7)]{10pt}{-}}}
\def\ss{\vphantom{\parbox[c][\dimexpr(\linewidth/14)]{10pt}{-}}}
\newcommand\hd[1]{\Large\bfseries#1}
\newcommand\ntab[4]{%
\multicolumn{1}{D|}{\centering\begin{tabular}{S|S}{\ss#1}&{#2}\\\hline\ss#3\end{tabular}}}
\begin{document}
\sffamily
\noindent\begin{tabular}{|>{\Large\bfseries}D*{6}{|D}|}
\hline
\DD
&\hd{A}
&\hd{y}
&\hd{C}
&\hd{g}
&\hd{E}
&\hd{m}\\
\hline
1
&\ntab{a}{ffj}{fj}{K}
&\ntab{1}{2}{4}{3}
&\ntab{4}{1}{3}{2}
&\ntab{3}{4}{2}{1}
&\ntab{2}{3}{1}{4}
&\ntab{1}{2}{4}{3}\\
\hline
2
&\ntab{1}{2}{4}{3}
&\ntab{4}{1}{2}{3}
&\ntab{3}{4}{2}{1}
&\ntab{2}{3}{1}{4}
&\ntab{1}{2}{4}{3}
&\ntab{4}{1}{3}{2}\\\hline
\end{tabular}
\end{document}