行数可变的多行表

行数可变的多行表

我想格式化一个表格,其中第一列只有一行文本,垂直居中,行数可变。目前,我使用并IfEqCase仅在满足某些条件时在第一列添加条目。只要我有固定的行数,并且该数字是奇数(否则,条目将不会垂直居中),这种方法就有效:

\documentclass[11pt]{article}
\usepackage{multirow}
\usepackage{xstring}

\newcommand{\gridsize}[1]{\ensuremath{#1 \times #1}}

\newcommand{\addrowmpi}[4]{%
\IfEqCase{#1}{%
      {1} {&}  %
      {2} {\gridsize{#2} &}  %
      {4} {&}  %
}
#3 & #4 \%}

\begin{document}

\begin{table}[ht]
\caption{Multi-row table}
\begin{center}
\begin{tabular}{ccc}
    \hline
    \addrowmpi{1}{512}{462.7}{100} \\
    \addrowmpi{2}{512}{231.4}{50}\\
    \addrowmpi{4}{512}{115.7}{25}\\
    \hline
\end{tabular}
\end{center}
\label{tab:multicol}
\end{table}

\end{document}

结果如下:

在此处输入图片描述

但我希望行数可变,理想情况下的格式类似于addrowmpi。第一列条目应在行间垂直居中。

有没有办法可以使用multirow行数可变的环境?

答案1

通过嵌套表格,我基本上可以实现我想要的功能。下面是我想出的代码(比上面的代码略有简化):

\documentclass[11pt]{article}
\usepackage{array}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}

\newenvironment{timingtable}
{\begin{tabular}{R{30pt}|R{30pt}|R{30pt}}}
{\end{tabular}}

\newcommand{\addrow}[3]{#1 & #2 &  #3 \%}

\setlength{\tabcolsep}{10pt}

\begin{document}

% Actual width of each column is 30 + 2*tabcolsep
\begin{table}[ht]
\caption{Multi-row table}
\begin{center}
\begin{tabular}{|C{20pt}|@{}p{150pt}@{}|}
    \hline
    512 &
    \begin{timingtable}
    \addrow{462.7}{222.0}{100} \\
    \addrow{231.4}{111.0}{50} \\
    \addrow{154.2}{74.0}{33} \\
    \addrow{115.7}{37.0}{25} \\
    \end{timingtable} \\
   \hline
\end{tabular}
\end{center}
\label{tab:multicol}
\end{table}

\end{document}

多行列

第一列的宽度为 20 + 2*tabcolsep = 40pt,符合预期。嵌套表格中的每一列的宽度为 30+2*tabcolsep = 50。@{}外部 tabular 命令抑制了tabcolsep嵌套表格周围添加的额外空间,导致嵌套表格的第一列和最后一列太宽。

相关内容