我在我的文档中使用了下表。
\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 的精彩回答...
是的,您有了更多的空间,但是表格现在更易于阅读了,并且如果需要,您可以使用较小的字体缩小表格大小。