我有以下代码,它通过以下方式创建一个表表格环境。我想要高度第一行和第二行(类别和子类别 1、子类别 2)与宽度第一列和第二列(旋转的列)。我该怎么做?我试过阵列拉伸,但结果似乎是近似的。
编辑以澄清问题:我想要的是高度类别 1 下方的线与子类别 1 和子类别 2 下方的线之间(蓝色箭头)与宽度类别 2 右侧的垂直线与子类别 1 和子类别 2 右侧的线之间的距离(红色箭头)。我的意思是:我对宽度很满意。现在我想让高度也一样,也就是说,让蓝色箭头的高度和红色箭头的宽度一样。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{tabular}{ccc|c|}
& & \multicolumn{2}{ c }{Category 1} \\ \cline{3-4}
& & \multicolumn{1}{ c }{Subcat. 1} & \multicolumn{1}{c}{Subcat. 2} \\ \cline{3-4}
& \multicolumn{1}{|c|}{\rotatebox[origin=c]{90}{Subcat. 2}} & AAAAAAAAAA & BBBBBBBBBB \\ \cline{3-4}
\raisebox{1cm}[0pt][0pt]{\rotatebox[origin=c]{90}{Category 2}} &
\multicolumn{1}{|c|}{\rotatebox[origin=c]{90}{Subcat. 1}} & CCCCCCCCCC & DDDDDDDDDD \\ \cline{3-4}
\end{tabular}
\end{document}
答案1
我加了几个@{}
,几个\Vrule
baselineskip高度,然后把几个东西放进了\makebox
和高度一样宽的es里\Vrule
。
\documentclass{article}
\usepackage{graphicx}
\def\Vrule{\rule[-\dp\strutbox]{0pt}{\normalbaselineskip}}
%\def\Vrule{\rule[-\dp\strutbox]{.1pt}{\normalbaselineskip}}% USE THIS TO VERIFY
\begin{document}
\begin{tabular}{ccc|c|}
& & \multicolumn{2}{ c }{Category 1}\\
\cline{3-4}
& & \multicolumn{1}{ c }{\Vrule Subcat. 1} & \multicolumn{1}{c}{Subcat. 2}\\
\cline{3-4}
& \multicolumn{1}{|@{}c@{}|}{\makebox[\normalbaselineskip]{%
\rotatebox[origin=c]{90}{\Vrule Subcat. 2}}}
& AAAAAAAAAA & BBBBBBBBBB \\ \cline{3-4}
\raisebox{1cm}[0pt][0pt]{\rotatebox[origin=c]{90}{Category 2}} &
\multicolumn{1}{|@{}c@{}|}{\makebox[\normalbaselineskip]{%
\rotatebox[origin=c]{90}{\Vrule Subcat. 1}}}
& CCCCCCCCCC & DDDDDDDDDD \\ \cline{3-4}
\end{tabular}
\end{document}
为了验证它是否按照我说的做了,取消注释第二个\Vrule
定义,这样它就可见了。你会看到它恰好跨越了两个所需的维度。
OP 要求将答案高度设为可调,这没问题。更改尺寸\Vrule
,并将\makebox
宽度设为相同尺寸。已编辑,对类别 1/2 条目执行相同操作。
\documentclass{article}
\usepackage{graphicx}
\def\Vrule{\rule[-2.5\dp\strutbox]{0pt}{2\normalbaselineskip}}
%\def\Vrule{\rule[-2.5\dp\strutbox]{.1pt}{2\normalbaselineskip}}% USE THIS TO VERIFY
\begin{document}
\begin{tabular}{@{}c@{}cc|c|}
& & \multicolumn{2}{ c }{\Vrule Category 1}\\
\cline{3-4}
& & \multicolumn{1}{ c }{\Vrule Subcat. 1} & \multicolumn{1}{c}{Subcat. 2}\\
\cline{3-4}
& \multicolumn{1}{|@{}c@{}|}{\makebox[2\normalbaselineskip]{%
\rotatebox[origin=c]{90}{\Vrule Subcat. 2}}}
& AAAAAAAAAA & BBBBBBBBBB \\ \cline{3-4}
\raisebox{1cm}[0pt][0pt]{\rotatebox[origin=c]{90}{%
\makebox[2\baselineskip]{\Vrule Category 2}}} &
\multicolumn{1}{|@{}c@{}|}{\makebox[2\normalbaselineskip]{%
\rotatebox[origin=c]{90}{\Vrule Subcat. 1}}}
& CCCCCCCCCC & DDDDDDDDDD \\ \cline{3-4}
\end{tabular}
\end{document}
最后一点...如果\Vrule
可以总是保证具有比更大的占用空间\strut
,那么可以\makebox
完全消除 es,从而简化代码:
\documentclass{article}
\usepackage{graphicx}
\def\Vrule{\rule[-2.5\dp\strutbox]{0pt}{2\normalbaselineskip}}
%\def\Vrule{\rule[-2.5\dp\strutbox]{.1pt}{2\normalbaselineskip}}% USE THIS TO VERIFY
\begin{document}
\begin{tabular}{@{}c@{}cc|c|}
& & \multicolumn{2}{ c }{\Vrule Category 1}\\
\cline{3-4}
& & \multicolumn{1}{ c }{\Vrule Subcat. 1} & \multicolumn{1}{c}{Subcat. 2}\\
\cline{3-4}
& \multicolumn{1}{|@{}c@{}|}{%
\rotatebox[origin=c]{90}{\Vrule Subcat. 2}}
& AAAAAAAAAA & BBBBBBBBBB \\ \cline{3-4}
\raisebox{1cm}[0pt][0pt]{\rotatebox[origin=c]{90}{%
\Vrule Category 2}} &
\multicolumn{1}{|@{}c@{}|}{%
\rotatebox[origin=c]{90}{\Vrule Subcat. 1}}
& CCCCCCCCCC & DDDDDDDDDD \\ \cline{3-4}
\end{tabular}
\end{document}
答案2
使用以下命令在行的顶部和底部添加一些填充makecell
:
\documentclass{article}
\usepackage{graphicx,makecell}
\setcellgapes{3pt}
\begin{document}
\makegapedcells
\begin{tabular}{*{3}{c}|c|}
& & \multicolumn{2}{ c }{Category 1} \\ \cline{3-4}
& & \multicolumn{1}{ c }{Subcat. 1} & \multicolumn{1}{c}{Subcat. 2} \\ \cline{3-4}
& \multicolumn{1}{|c|}{\rotatebox[origin=c]{90}{Subcat. 2}} & AAAAAAAAAA & BBBBBBBBBB \\ \cline{3-4}
\raisebox{1cm}[0pt][0pt]{\rotatebox[origin=c]{90}{Category 2}} &
\multicolumn{1}{|c|}{\rotatebox[origin=c]{90}{Subcat. 1}} & CCCCCCCCCC & DDDDDDDDDD \\ \cline{3-4}
\end{tabular}
\end{document}
答案3
一个简单的技巧;明确指定第二列的宽度,例如p{.7cm}
,并使用宏将相同的长度作为垂直规则添加到第二行\parbox{0cm}{\rule{0cm}{\dimexpr.7cm+2\tabcolsep}}
。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\newcommand*{\pad}[1]{\parbox{0cm}{\rule{0cm}{\dimexpr#1+2\tabcolsep}}}
\begin{tabular}{c p{.7cm} c|c|}
& & \multicolumn{2}{ c }{Category 1} \\ \cline{3-4}
& & \multicolumn{1}{ c }{Subcat. 1\pad{.7cm}} & \multicolumn{1}{c}{Subcat. 2} \\ \cline{3-4}
& \multicolumn{1}{|c|}{\rotatebox[origin=c]{90}{~Subcat. 2~}} & AAAAAAAAAA & BBBBBBBBBB \\ \cline{3-4}
\raisebox{1cm}[0pt][0pt]{\rotatebox[origin=c]{90}{Category 2}} &
\multicolumn{1}{|c|}{\rotatebox[origin=c]{90}{~Subcat. 1~}} & CCCCCCCCCC & DDDDDDDDDD \\ \cline{3-4}
\end{tabular}
\end{document}