我是 LaTeX 新手,尤其不擅长处理表格。因为我的 Excel 表格非常大,而且不想手动写入所有数据(数百个条目),所以我使用脚本“excel2latex”自动转换表格。我已经添加了新的列类型(从互联网上复制),因为居中不起作用。结果还可以,但我仍然遇到标题不在多列中居中的问题。我将行涂成灰色,块仍然是白色,如您在图片中看到的那样。
这是我的代码:
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\begin{table}[htbp]
\centering
\caption{Test Caption}
\begin{tabular}{c|ccc|c}
\rowcolor[rgb]{ .949, .949, .949} & \multicolumn{3}{P{16.5em}|}{\textbf{not centered}} & \\
\rowcolor[rgb]{ .949, .949, .949} \textbf{Col0} & \multicolumn{1}{P{5.5em}}{\textbf{Col1}} & \multicolumn{1}{P{5.5em}}{\textbf{Col2}} & \multicolumn{1}{P{5.5em}|}{\textbf{Col3}} & \multicolumn{1}{P{5.5em}}{\textbf{Col4}} \\
\midrule
X & -31.09\% & -22.84\% & -19.82\% & 0.09x \\
\rowcolor[rgb]{ .949, .949, .949} Y & -32.31\% & -24.90\% & -22.98\% & 0.11x \\
Z & -37.67\% & -33.53\% & -31.79\% & 0.13x \\
\end{tabular}%
\label{tab:label}
\end{table}
预先感谢您的帮助。
答案1
有两种方法可以实现标题在前三个数据列中的居中(假设所有三列的宽度都是 5.5em):
\multicolumn{3}{c|}{...}
如果不需要在标题单元格中换行,则这样做没有问题
\multicolumn{3}{P{\dimexpr16.5em+4\tabcolsep\relax}|}{...}
这(显然)比较麻烦,但它将允许在标题单元格中自动换行。
你的计算是错误的,因为它没有考虑到可用的标题单元格的宽度不仅仅是 3 x 5.5em = 16.5em;您还必须考虑到标题单元格跨越两个列间空间,每个列的宽度为2\tabcolsep
。因此,标题单元格的总可用宽度为16.5em+4\tabcolsep
。(顺便说一句,一个明显的暗示16.5em
是不是4\tabcolsep
正确的是您发布的屏幕截图中第一行背景颜色的视觉间隙(宽度!)。)
\documentclass{article}
\usepackage{array}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\usepackage[table]{xcolor}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Test Caption}\label{tab:label}
\begin{tabular}{ c | *{3}{P{5.5em}} | P{5.5em} }
\rowcolor[rgb]{ .949, .949, .949}
& \multicolumn{3}{P{16.5em}|}{\textbf{this is not centered}} & \\
& \multicolumn{3}{c|}{\textbf{this is centered}} & \\
& \multicolumn{3}{P{\dimexpr16.5em+4\tabcolsep\relax}|}{\textbf{this is centered}} & \\
\rowcolor[rgb]{ .949, .949, .949}
\textbf{Col0} & \textbf{Col1} & \textbf{Col2} & \textbf{Col3} & \textbf{Col4} \\
\hline
X & -31.09\% & -22.84\% & -19.82\% & 0.09x \\
\rowcolor[rgb]{ .949, .949, .949}
Y & -32.31\% & -24.90\% & -22.98\% & 0.11x \\
Z & -37.67\% & -33.53\% & -31.79\% & 0.13x \\
\end{tabular}
\end{table}
\end{document}
答案2
与。{NiceTabular}
nicematrix
\documentclass{article}
\usepackage{caption}
\usepackage{nicematrix}
\usepackage{booktabs}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Test Caption}\label{tab:label}
\begin{NiceTabular}{ c | *{3}{w{c}{5.5em}} | w{c}{5.5em} }[colortbl-like]
\rowcolor[rgb]{ .949, .949, .949}
& \multicolumn{3}{c}{\textbf{this is centered}} & \\
\rowcolor[rgb]{ .949, .949, .949} \RowStyle{\bfseries} Col0 & Col1 & Col2 & Col3 & Col4 \\
\midrule
X & $-31.09$\% & $-22.84$\% & $-19.82$\% & $0.09$x \\
\rowcolor[rgb]{ .949, .949, .949}
Y & $-32.31$\% & $-24.90$\% & $-22.98$\% & $0.11$x \\
Z & $-37.67$\% & $-33.53$\% & $-31.79$\% & $0.13$x \\
\end{NiceTabular}
\end{table}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。