表格多列 - 居中已关闭

表格多列 - 居中已关闭

我是 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 节点)。

上述代码的输出

相关内容