表格单元格内容的垂直居中

表格单元格内容的垂直居中

我在我的文档中使用了下表。

\begin{table*}[t]
\centering
\setlength{\tabcolsep}{8pt}
\setlength\arrayrulewidth{1pt}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|} 
\hline
\multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}A\\B\end{tabular}} & \multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}C\\D\end{tabular}} & \multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}E \\F\end{tabular}} & \multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}G\\H\end{tabular}} & \multicolumn{3}{c|}{I} & \multicolumn{3}{c|}{M} & \multicolumn{3}{c|}{Q} \\ 
\cline{5-13}
 &  &  &  & J & K & L & N & O & P & R & S & T \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
\end{tabular}
\end{table*}

结果是: 在此处输入图片描述

如您所见,所有内容为“1111”的单元格和包含“J、K、L、NO、P、R、S、T”的单元格均未垂直居中。如何使这些单元格内容垂直居中?

注意:我不想使用,\arraystretch因为它会增加所有缩进,从而增加整个表格的大小。事实上,这就是\arraystretch我想要的结果: 在此处输入图片描述

答案1

我建议您加载该包并在序言中array插入指令。\setlength\extrarowheight{2pt}

以下屏幕截图显示了完整表格的右上角:

在此处输入图片描述

\documentclass{article} % select a suitable document class
\usepackage[margin=2.5cm]{geometry} % set margins suitably
\usepackage{multirow,array}
\begin{document}
\begin{table*} 
\centering
%\setlength{\tabcolsep}{8pt} % what's wrong with the default value (6pt)?
\setlength\arrayrulewidth{0.5pt} % 1pt is much too wide
\setlength\extrarowheight{2pt} % <-- new
\begin{tabular}{ | *{13}{c|} } 
\hline
\multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}A \\B\end{tabular}} & 
\multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}C \\D\end{tabular}} & 
\multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}E \\F\end{tabular}} & 
\multirow{2}{*}{\begin{tabular}[c]{@{}c@{}}G \\H\end{tabular}} & 
\multicolumn{3}{c|}{I} & \multicolumn{3}{c|}{M} & \multicolumn{3}{c|}{Q} \\ 
\cline{5-13}
 &  &  &  & J & K & L & N & O & P & R & S & T \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
\end{tabular}
\end{table*}
\end{document}

但从更深层次的意义上讲,你发现的问题之所以引人注目,真正的原因是没有使用最美观的方法来构造表格。我的意思是什么?我强烈建议您消除所有垂直线并删除几乎所有\hline指令;对于剩下的几个,请使用booktabs包的线条绘制宏。同样,使用三个\cmidrule指令而不是单个\cline指令。由于直线少得多,将单元格内容完美地放在单元格中的问题是根本不存在的。例如,像这样:

在此处输入图片描述

\documentclass{article}
\usepackage[margin=2.5cm]{geometry} % set margins suitably
\usepackage{booktabs} % for \toprule, \midrule, \cmidrule, and \bottomrule macros

\begin{document}
\begin{table*} 
\centering
\begin{tabular}{ @{} *{13}{c} @{} } 
\toprule
A & C & E & G &
\multicolumn{3}{c}{I} & \multicolumn{3}{c}{M} & \multicolumn{3}{c@{}}{Q} \\ 
\cmidrule(lr){5-7} \cmidrule(lr){8-10} \cmidrule(l){11-13}
B & D & F & H & J & K & L & N & O & P & R & S & T \\ 
\midrule
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\[0.75ex]
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\[0.75ex]
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\[0.75ex]
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\[0.75ex] 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\[0.75ex]
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\ 
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\bottomrule
\end{tabular}
\end{table*}
\end{document}

答案2

单元格内容垂直居中的最佳工具是使用cellspace包:它具有定义命令最小默认情况下,在带有说明符的列中,单元格顶部和底部的垂直填充以字母 $ 为前缀S(或者您可以使用任何字母作为column=...前缀)。以下是代码,并进行了一些简化:

\documentclass{article}
\usepackage{geometry}
\usepackage{array, multirow, makecell}
\usepackage[column=O]{cellspace}
\setlength{\cellspacetoplimit}{4pt}

\begin{document}

\begin{table*}[t]
\centering

\begin{tabular}{|*{13}{Oc|}}
\hline
\multirowcell{2}{A\\B} & \multirowcell{2}{C\\D} & \multirowcell{2}{E \\F} & \multirowcell{2}{G\\H} & \multicolumn{3}{Oc|}{I} & \multicolumn{3}{c|}{M} & \multicolumn{3}{c|}{Q} \\
\cline{5-13}
 & & & & J & K & L & N & O & P & R & S & T \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\hline
\end{tabular}
\end{table*}

\end{document} 

在此处输入图片描述

答案3

好吧,你必须添加一些空格。如果你加载array(你可以这样做,但我不知道,因为你没有在这里包含序言),你可以将表定义更改为:

\begin{tabular}{|>{\vrule height1.1em width 0pt\relax}c*{12}{|c}|} 

并且每一行都有一些额外的上部空间(高度是视觉调整的,请注意使用*{}{}以避免重复输入)。

在此处输入图片描述

尽管我会去掉垂直线和大多数水平线:

在此处输入图片描述

\documentclass[11pt,letterpaper]{report}
\usepackage{array, multirow, booktabs}
\usepackage[table]{xcolor}
\begin{document}
\rowcolors{2}{gray!10}{white}
\begin{tabular}{*{13}{c}}
\toprule
A & C & F & G & \multicolumn{3}{c}{I}  & \multicolumn{3}{c}{M}   & \multicolumn{3}{c}{Q} \\
\cmidrule{5-13}
\rowcolor{white}B & D & F & H & J & K & L & N & O & P & R & S & T \\
\midrule
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 & 1111 \\
\bottomrule
\end{tabular}
\end{document}

如果你想要垂直居中行,当然你可以混合使用 @Bernard 的精彩回答...

在此处输入图片描述

是的,您有了更多的空间,但是表格现在更易于阅读了,并且如果需要,您可以使用较小的字体缩小表格大小。

相关内容