行高与旋转列宽相同

行高与旋转列宽相同

我有以下代码,它通过以下方式创建一个表表格环境。我想要高度第一行和第二行(类别和子类别 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

我加了几个@{},几个\Vrulebaselineskip高度,然后把几个东西放进了\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}

在此处输入图片描述

相关内容