答案1
我建议使用nicematrix
。
矩阵的大部分元素都在这里。我把字体样式和剩余单元格留给你处理。
为了使单元格在文本后面带有十字,我使用 TikZ 制作了一个宏,以绘制两条线,中间有一个白色矩形节点。由于这种情况会发生\CodeBefore
,因此单元格内容会放在顶部。
该graphicx
包用于\rotatebox
。
\documentclass{article}
\usepackage{tikz, nicematrix}
\usepackage{graphicx}
\newcommand{\xbox}[5][]{
\draw[#1] ({#2}-|{#3}) --node[fill=white, minimum size=5mm]{} ({#4}-|{#5});
\draw[#1] ({#4}-|{#3}) --node[fill=white, minimum size=5mm]{} ({#2}-|{#5});
}
\begin{document}
\begin{NiceTabular}{*{2}{wc{.4cm}}*{6}{wc{1cm}}}[corners, hvlines]
\CodeBefore
\cellcolor{gray!20}{4-3,4-5,6-5}
\cellcolor{gray!40}{3-4,3-6,5-6}
\cellcolor{gray!60}{4-4,4-6,6-6}
\tikz {
\xbox[densely dashed, gray]{3}{3}{4}{4}
\xbox[densely dashed]{3}{5}{4}{6}
\xbox{5}{3}{7}{5}
}
\Body
& & \Block{1-4}{Simultaneous sibling roles} & & & & & \\
& & \Block{1-2}{no} & & \Block{1-2}{yes} & & & \\
\RowStyle[cell-space-limits=4mm]{}\Block{4-1}{\rotatebox{90}{Multiple Perspectives}} & \Block{2-1}{\rotate no} & A/a & B2/a & A/b & B2/b & X & \Block{4-1}{\rotatebox{-90}{\parbox{4cm}{\centering Dynamic Binding\\ with highest priority for...}}} \\
\RowStyle[cell-space-limits=4mm]{} & & B1/a & B3/a & B1/b & B3/b & X & \\
\RowStyle[cell-space-limits=4mm]{} & \Block{2-1}{\rotate yes} & \Block{2-2}{\!d)} & & A/c & B2/c & X & \\
\RowStyle[cell-space-limits=4mm]{} & & & & B1/c & B3/c & X & \\
& & fixed & variable & fixed & variable & & \\
& & \Block{1-4}{Interface\\visible through an object reference} & & & & & \\
\end{NiceTabular}
\end{document}