如何在表格中使用带有垂直文本的行标题?

如何在表格中使用带有垂直文本的行标题?

我正在尝试为表格的某些行插入标题。不幸的是,结果看起来很奇怪,并且文本与表格的其余部分对齐不佳。具体来说,我的问题如下:

  1. 如何正确插入带有垂直文本的行标题?
  2. 如果文本太长,如何防止文本超出单元格?

这是我当前的代码:

\documentclass[journal]{IEEEtran}

\usepackage{array, caption, floatrow, tabularx, makecell, booktabs}
\usepackage{multirow}  % span text across multiple rows
\usepackage{rotating}  % to write text vertically in a cell

\begin{document}

\begin{table*}[t]
\centering
\begin{tabular}{c cl c|c|c|c|c}

        & & & \multicolumn{5}{c}{Dataset} \\ \cmidrule(lr){4-8}
        & & \multicolumn{1}{|l}{Results} & D1 & D2 & D3 & D4 & D5 \\
        \cmidrule(lr){2-8}

        \multirow{7}{*}{\multicolumn{1}{c|}{
            \begin{turn}{90}\makecell{Test Type}\end{turn}}} 

        & \multirow{4}{*}{
            \begin{turn}{90}\makecell{Type 1}\end{turn}} 
        & \multicolumn{1}{|l}{test 1} & -- & -- & -- & -- & --  \\

        && \multicolumn{1}{|l}{test 2} & -- & -- & -- & -- & --  \\
        && \multicolumn{1}{|l}{test 3} & -- & -- & -- & -- & --  \\
        && \multicolumn{1}{|l}{test 4} & -- & -- & -- & -- & --  \\

        \cmidrule(lr){2-8}

        & \multirow{2}{*}{
            \begin{turn}{90}\makecell{Type 2}\end{turn}}
         & \multicolumn{1}{|l}{test ver 1} & -- & -- & -- & -- & --  \\
        && \multicolumn{1}{|l}{test ver 2} & -- & -- & -- & -- & -- \\
        \cmidrule(lr){2-8}
    \end{tabular}
\caption{Some caption.}
\end{table*}

\end{document}

...错误:

放错位置\省略。

\多跨度->\省略

@multispan l.18 ...{turn}{90}\makecell{测试类型}\end{turn}}}

我希望只在制表符或对齐的 \cr 之后看到 \omit。继续,我将忽略这种情况

...结果如下:

在此处输入图片描述

如您所见,存在两个问题:

  1. 文本“测试类型”下的行(最左侧列)应跨行,类似于“数据集”下的行(右上)。这意味着它应该涵盖标题“类型 1”和“类型 2”。
  2. 文本“类型 2”太长并且超出了单元格。

感谢您的帮助!

G。

答案1

以下内容可能更接近您想要实现的目标:

在此处输入图片描述

\documentclass[journal]{IEEEtran}
\usepackage{multirow}
\usepackage{makecell}
\usepackage{booktabs}
\usepackage{rotating}

\setcellgapes{\tabcolsep}
\begin{document}

\begin{table*}[t]
\centering
\makegapedcells
\caption{Some caption.}
\begin{tabular}{c| cl c|c|c|c|c}

        \multicolumn{1}{l}{}& & & \multicolumn{5}{c}{Dataset} \\ \cline{4-8}
        \multicolumn{1}{l}{}& & \multicolumn{1}{|l}{Results} & D1 & D2 & D3 & D4 & D5 \\
        \cline{2-8}

        \multirow{9}{*}{\rotatebox[origin=c]{90}{Test Type}} 

        & \multirow{6}{*}{\rotatebox[origin=c]{90}{Type 1}} 
        & \multicolumn{1}{|l}{test 1} & -- & -- & -- & -- & --  \\

        && \multicolumn{1}{|l}{test 2} & -- & -- & -- & -- & --  \\
        && \multicolumn{1}{|l}{test 3} & -- & -- & -- & -- & --  \\
        && \multicolumn{1}{|l}{test 4} & -- & -- & -- & -- & --  \\

        \cline{2-8}

        & \multirow{2}{*}{
            \begin{turn}{90}\makecell{Type 2}\end{turn}}
         & \multicolumn{1}{|l}{test ver 1} & -- & -- & -- & -- & --  \\
        && \multicolumn{1}{|l}{test ver 2} & -- & -- & -- & -- & -- \\
        \cline{2-8}
    \end{tabular}
\end{table*}

\end{document} 

我个人更喜欢不同的布局:

在此处输入图片描述

\documentclass[journal]{IEEEtran}
\usepackage{multirow}
\usepackage{booktabs}
\begin{document}    

\begin{table*}[t]
\centering
\caption{Some caption.}
\begin{tabular}{cl ccccc}
          & & \multicolumn{5}{c}{Dataset} \\ \cmidrule{3-7}
        Test Type & Results & D1 & D2 & D3 & D4 & D5 \\
        \midrule
         \multirow{4}{*}{Type 1} 
        & test 1 & -- & -- & -- & -- & --  \\
        & test 2 & -- & -- & -- & -- & --  \\
        & test 3 & -- & -- & -- & -- & --  \\
        & test 4 & -- & -- & -- & -- & --  \\
        \midrule
         \multirow{2}{*}{Type 2}& test ver 1 & -- & -- & -- & -- & --  \\
        & test ver 2 & -- & -- & -- & -- & -- \\
        \bottomrule
    \end{tabular}
\end{table*}

\end{document}

答案2

我会这样做。在我看来,你把事情搞得太复杂了。正如评论中提到的,现在没有人再使用垂直线了

\documentclass[journal]{IEEEtran}

\usepackage{array, caption, floatrow, tabularx, makecell, booktabs}
\usepackage{multirow}  % span text across multiple rows
\usepackage{rotating}  % to write text vertically in a cell

\begin{document}

\begin{table*}[t]
\centering
\begin{tabular}{cl ccccc}
  \toprule
       &            & \multicolumn{5}{c}{Dataset} \\
  \cmidrule{3-7}
       & Results    & D1 & D2 & D3 & D4 & D5      \\
 \midrule
Type 1 & test 1     & -- & -- & -- & -- & --      \\
       & test 2     & -- & -- & -- & -- & --      \\
       & test 3     & -- & -- & -- & -- & --      \\
       & test 4     & -- & -- & -- & -- & --      \\
 \midrule
Type 2 & test ver 1 & -- & -- & -- & -- & --      \\
       & test ver 2 & -- & -- & -- & -- & --      \\
        \bottomrule
    \end{tabular}
\caption{Some caption.}
\end{table*}

\end{document}

在此处输入图片描述

答案3

与。{NiceTabular}nicematrix

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\renewcommand{\arraystretch}{1.4}
\begin{NiceTabular}{@{}cc|lc|c|c|c|c}
\Block{1-3}{}
&                             &            & \Block[borders=bottom]{1-*}{Dataset} \\
&                             & Results    & D1 & D2 & D3 & D4 & D5 \\
\Block{*-1}{\rotate Test Type}
& \Block{4-1}{\rotate Type 1} & test 1     & -  & -  & -  & -  & -  \\
&                             & test 2     & -  & -  & -  & -  & -  \\
&                             & test 3     & -  & -  & -  & -  & -  \\
&                             & test 4     & -  & -  & -  & -  & -  \\
\Hline
& \Block{2-1}{\rotate Type 2} & test ver 1 & -  & -  & -  & -  & -  \\
&                             & test ver 2 & -  & -  & -  & -  & -  \\
\CodeAfter \tikz \draw (3-|last) -| (last-|2) -- (last-|last) ;
\end{NiceTabular}

\end{document}

上述代码的输出

相关内容