在多列和多行的表格中垂直和水平居中对齐

在多列和多行的表格中垂直和水平居中对齐

我想创建垂直和水平对齐且包含多行和多列的表格。

我使用了下面的脚本。

\begin{table}[!h]
\centering
\caption{My caption}
\begin{tabular}{|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|}
\hline
\multirow{2}{*}{(\%)} & \multicolumn{2}{c|}{A} & \multicolumn{2}{c|}{B} & \multicolumn{2}{c|}{C}\\[25pt] \cline{2-7}
                      & a         & b          & c         & d          & e         & f             \\[25pt] \hline
1                     & a1        & b1         & c1        & d1         & e1        & f1            \\[25pt] \hline
2                     & a2        & b2         & c2        & d2         & e2        & f2            \\[25pt] \hline
3                     & a3        & b3         & c3        & d3         & e3        & f3            \\[25pt] \hline
4                     & a4        & b4         & c4        & d4         & e4        & f4            \\[25pt] \hline
5                     & a5        & b5         & c5        & d5         & e5        & f5            \\[25pt] \hline
\end{tabular}\end{table}

它创建下表。

在此处输入图片描述

多行多列的行没有对齐。

并且最后一行也没有对齐。

有谁知道这个问题吗?

谢谢。

答案1

我提出了一个远非完美的解决方案,基于该cellspace软件包,它允许您使用以字母为前缀的 sêcifier S(或者C如果您使用siunitx)定义列中单元格顶部和底部的最小垂直间距。不幸的是,由于某种原因,这个简单的解决方案不适用于第一列,所以我不得不使用基于 的解决方法makecell

\documentclass{article}
\usepackage{multirow}
\usepackage{array, caption, makecell}
\usepackage{cellspace} 
 \setlength{\cellspacetoplimit}{19pt}
\setlength{\cellspacebottomlimit}{16pt}

\begin{document}

\begin{table}[!h]
\centering
\caption{My caption}
\begin{tabular}{|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}S{m{1.5cm}}|*{6}{>{\centering\arraybackslash}S{m{1.5cm}}|}}
\hline
  \multirow{4.2}{*}{(\%)} & \multicolumn{2}{Sc|}{A} & \multicolumn{2}{Sc|}{B} & \multicolumn{2}{Sc|}{C}\\
\cline{2-7}
  & a & b & c & d & e & f \\
\hline
 \makecell{\\1} & a1 & b1 & c1 & d1 & e1 & f1 \\
\hline
    \makecell{\\2} & a2 & b2 & c2 & d2 & e2 & f2 \\
\hline
  \makecell{\\3} & a3 & b3 & c3 & d3 & e3 & f3 \\
\hline
  \makecell{\\4} & a4 & b4 & c4 & d4 & e4 & f4 \\
\hline
  \makecell{\\5} & a5 & b5 & c5 & d5 & e5 & f5 \\
\hline
 \end{tabular}
\end{table}

\end{document}

在此处输入图片描述

答案2

可以使用\begin{tabular}[ c | c ]或使单元格水平对齐。通过在序言中\multicolumn{2}{c}应用和可在表格中生成垂直对齐的文本。\usepackage{array}\begin{tabular}[ m{5em} | m{5em} ]

如果您想使单元格垂直和水平对齐,则应>{\centering\arraybackslash}在单元格格式前面包含。

以下是一个例子:

 \begin{table}[h!]
  \renewcommand{\arraystretch}{1}
\centering
\caption{My caption}
\begin{tabular}{|m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|>{\centering\arraybackslash}m{1.5cm}|m{1.5cm}|m{1.5cm}|m{1.5cm}|m{1.5cm}|}
\hline
\multirow{2}{1.5cm}{(\%)} & \multicolumn{2}{c|}{A} & \multicolumn{2}{c|}{B} & \multicolumn{2}{c|}{C}\\ \cline{2-7}
                      & a         & abra cadabra          & c         & d          & e         & f             \\ \hline
1                     & a1        & abra cadabra         & c1        & d1         & e1        & f1            \\ \hline
2                     & a2        & abra cadabra         & c2        & d2         & e2        & f2            \\ \hline
3                     & a3        & abra cadabra         & c3        & d3         & e3        & f3            \\ \hline
4                     & a4        & abra cadabra         & c4        & d4         & e4        & f4            \\ \hline
5                     & a5        & abra cadabra         & c5        & d5         & e5        & f5            \\ \hline
\end{tabular}
\renewcommand{\arraystretch}{1}
\end{table}

下图是示例的结果。 在此处输入图片描述

注意\renewcommand{\arraystretch}{1}表格代码中的第二行和倒数第二行,如果增加数字,行与行之间的间距也会增大,比如下图就是 的结果,\renewcommand{\arraystretch}{3}倒数第二行则恢复为默认值 1。

在此处输入图片描述

相关内容