![排版特殊表格格式](https://linux22.com/image/233086/%E6%8E%92%E7%89%88%E7%89%B9%E6%AE%8A%E8%A1%A8%E6%A0%BC%E6%A0%BC%E5%BC%8F.png)
我想排版弗林的分类法:
| Single | Multiple
| instruction | instructions
---------+-------------+--------------
Single | |
data | SISD | MISD
---------+-------------+--------------
Multiple | |
data | SIMD | MIMD
使用 LaTeX(表格?)。唉,我尝试保持一致的间距,但失败了。
% Requires package sideways.
\begin{tabular}{cc|c|c}
& & Single & Multiple \\
& & instruction & instructions \\
\hline
\begin{sideways}Single\end{sideways} & \begin{sideways}data\end{sideways} & SISD & MISD \\
\hline
\begin{sideways}Multiple\end{sideways} & \begin{sideways}data\end{sideways} & SIMD & MIMD
\end{tabular}
理想情况下,我希望所有四个象限的大小相同,并且(当然)文本居中。此外,表格标题应该具有某种连贯的布局(间距相等,顶部标题的高度等于侧面标题的宽度)。但我得到的只是:
总结起来有:
- 无居中左标题
- 左侧标题间距太大
- 没有垂直居中的内容
- 四个主要内容单元格为非方形表格单元格。
在 LaTeX 中实现此目的的最佳方法是什么?我觉得 TikZ 是一种不可原谅的过度杀伤,但我甚至不知道如何在那里实现此目的,如果能得到任何提示,我将不胜感激。
答案1
这只是第一种方法,可能需要进行一些最后的调整。
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{rotating}
\usepackage{array}
\newcolumntype{M}{>{\centering\arraybackslash}m{2cm}}
\begin{document}
\begin{tabular}{M|M|M}
& Single & Multiple \\
& instruction & instructions \\ \hline
\begin{sideways}\parbox{2cm}{\centering Single data}\end{sideways} & SISD & MISD \\ \hline
\begin{sideways}\parbox{2cm}{\centering Multiple data}\end{sideways} & SIMD & MIMD
\end{tabular}
\end{document}
答案2
使用 TikZ 的快速解决方案(可能有更好的方法来做到这一点)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (t) [matrix of nodes,align=center,nodes={text width=2cm}] {
|[text width=0cm]| & Single instruction & Multiple instructions \\
|[rotate=90,minimum width=0cm]| {Single\\data} &|[minimum size=2cm]| SISD & |[minimum size=2cm]|MISD \\
|[rotate=90,minimum width=0cm]| {Multiple\\data} &|[minimum size=2cm]| SIMD &|[minimum size=2cm]| MIMD \\
};
\draw (t-2-1.north east) -- (t-2-3.north east);
\draw (t-3-1.north east) -- (t-3-3.north east);
\draw (t-1-2.north west) -- (t-3-2.south west);
\draw (t-1-3.north west) -- (t-3-3.south west);
\end{tikzpicture}
\end{document}