考虑以下 MWE
\documentclass{standalone}
\usepackage{multirow}
\usepackage[table]{xcolor}
\usepackage{hhline}
\newcommand{\firstrow}[1]{%
\multicolumn{2}{|c|}{\cellcolor{blue!25} #1}
}
\newcolumntype{C}{>{\cellcolor{blue!50} }c<{}}
\begin{document}
\renewcommand{\arraystretch}{2}
\begin{tabular}{|C|C|c|C|C|}
\hhline{--~--}
\firstrow{R1C1--2}&&\firstrow{R1C4--5} \\
\hhline{--~--}
\hhline{==~~~}
R2C1 & R2C2 & \multicolumn{3}{c}{\strut} \\
\hhline{--~--}
R3C1 & R3C2 && R3C4 & R3C5 \\
\hhline{--~--}
R4C1 & R4C2 && \multirow{2}{*}{R4--5C4} & \multirow{2}{*}{R4--5C5} \\
\hhline{--~~~}
R5C1 & R5C2 &&& \\
\hhline{--~--}
R6C1 & R6C2 && R6C5 & R6C5
\\
\hhline{--~--}
\end{tabular}
\end{document}
结果是
存在一些问题:
- 第 3 列和第 4 列之间的角画得不太好;
- 单元格 R5C4-5 的背景颜色覆盖了单元格 R4C4-5 的内容;
- R4C4-5 和 R5C4-5 之间的水平线不应该存在;
- 所有单元格的边框看起来并不统一,但我不明白这是显示器上显示的图形问题还是实际问题;
- 小问题:第 3 列用于将第 1-2 列与第 4-5 列分隔开;如果能够控制其宽度就更好了(我希望它比现在更窄)。
问题 3 与这个问题但我无法在那里找到解决方案,因为那里的代码太乱了。
答案1
{NiceTabular}
以下是使用构建该表的一种方法nicematrix
。
\documentclass{article}
\usepackage{xcolor}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{cc>{\hspace*{-2mm}}ccc}[cell-space-limits=2mm]
\Block[draw,fill=blue!50]{1-2}{R1C1-2} & & & \Block[draw,fill=blue!50]{1-2}{R1C4-5} \\
\noalign{\vspace{-2mm}}
\\
\Block[hvlines,fill=blue!25]{5-2}{}
R2C1 & R2C2 \\
R3C1 & R3C2 & & \Block[hvlines,fill=blue!25]{4-2}{}
R3C4 & R3C5 \\
R4C1 & R4C2 & & \Block{2-1}{R4-5C4} & \Block{2-1}{R4-5C5} \\
R5C1 & R5C2 \\
R6C1 & R6C2 & & R6C4 & R6C5
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。
答案2
通过努力,我解决了我的问题。
我发布该解决方案是为了防止其他人需要它。
\documentclass{standalone}
\usepackage{multirow}
\usepackage[table]{xcolor}
\usepackage{hhline}
\newcommand{\firstrow}[2]{%
\multicolumn{2}{#1}{\cellcolor{blue!25} #2}
}
\newcolumntype{C}{>{\cellcolor{blue!50} }c<{}}
\setlength{\arrayrulewidth}{2pt}
\begin{document}
\renewcommand{\arraystretch}{2}
\begin{tabular}{|C|C|>{\hspace*{-3mm}}c|C|C|}
\hhline{--~|--}
\firstrow{|c|}{R1C1--2}&&\firstrow{c|}{R1C4--5} \\
\hhline{--~|--}
\multicolumn{5}{c}{\strut\vspace{-20pt}} \\
\hhline{--~~~}
R2C1 & R2C2 & \multicolumn{3}{c}{\strut} \\
\hhline{--~|--}
R3C1 & R3C2 && R3C4 & R3C5 \\
\hhline{--~|--}
R4C1 & R4C2 &&&\\
\hhline{--~|>{\arrayrulecolor{blue!50}}->{\arrayrulecolor{black}}|>{\arrayrulecolor{blue!50}}->{\arrayrulecolor{black}}|}
R5C1 & R5C2 && \multirow{-2}{*}{R4--5C4} & \multirow{-2}{*}{R4--5C5} \\
\hhline{--~|--}
R6C1 & R6C2 && R6C5 & R6C5
\\
\hhline{--~|--}
\end{tabular}
\end{document}
结果是
每个点的解决方案是:
|
在 的每个相关位置添加\hhline
,完成垂直边框。- 移动多行文本降低行,以便这一行覆盖前一行;
- 注意每一块边框的颜色(有点烦人……)。
- 这实际上是一个问题:从我发布的图片中看不出来,但查看编译后的 pdf 后,放大后你会发现有些边框的厚度是双倍的。如果你像我在解决方案中所做的那样添加命令,情况会更加明显
\setlength{\arrayrulewidth}{2pt}
。问题出现的原因是有些边框被绘制了两次。在解决方案中,这个问题已经修复。这是我对这个包的错误使用hhline
(这是我第一次使用这个特定的包)。 - 据我所知,在普通的表格环境中,没有实际的方法来控制两个给定行或列之间的实际空间。如果我没记错的话,使用包可以做到这一点
tabularray
。没有恢复到它,我得到了插入一个包含负空间的行。它甚至可以在列之间工作。这是一种解决方法,不仅仅是一个解决方案,但对我的目的来说已经足够了。
总而言之,我现在得到了我想要的桌子。:)