使用 colortbl 和 booktabs 对表格中的列进行着色

使用 colortbl 和 booktabs 对表格中的列进行着色

我创建了一个相当复杂的表格,其中包含一些我想着色的列。对于表格,我选择了booktabstabularx包。对于列着色,我使用colortbl

我遇到的问题是\midrule显示空白,结果让我很不满意。这是一个 MWE:

\documentclass[a5paper]{article}
\usepackage{xcolor}
\usepackage{booktabs,colortbl,tabularx}
\begin{document}
\pagestyle{empty}
\begin{table*}[!htb]
  \centering
  \begin{tabularx}{4cm}{>{\columncolor{gray}}cX>{\columncolor{gray}}c}
    \toprule
    1&2&3\\
    \midrule
    one&two&three\\
    one&two&three\\
    \cmidrule{2-3}
    one&two&three\\
    \midrule
    un&deux&trois\\
    \bottomrule
  \end{tabularx}
  \caption{caption}
\end{table*}
\end{document}

乳胶结果

环顾四周,我发现最新版本booktabs支持此colortbl功能。但是,它似乎仅支持彩色水平线。

我尝试不使用s booktabs,并midrulehlines 替换。我的大桌子看起来太拥挤了(我想,一旦你使用 booktab,你就再也不会回头了)。

我的问题是:是否有可能在 s 中实现正确的着色midrule?由于我担心答案是否定的:您有什么低成本的建议可以给我的表格的列着色?

(当我说低成本时,我的意思是我不想重写我的表格内容)

答案1

由于这种方式会在规则的上方和下方插入空格,因此无法做到这一点booktabs。正如 Herbert 在评论中指出的那样,规则和颜色是否真的是合乎逻辑的组合并不清楚。因此,您能做的最好的事情可能是增加行高并将规则上方和下方的空格设置为 0。

\documentclass{article}
\usepackage{xcolor}
\usepackage{booktabs,colortbl,tabularx}

\begin{document}
% Your original table
  \begin{tabularx}{4cm}{>{\columncolor{gray}}cX>{\columncolor{gray}}c}
    \toprule
    1&2&3\\
    \midrule
    one&two&three\\
    one&two&three\\
    \cmidrule{2-3}
    one&two&three\\
    \midrule
    un&deux&trois\\
    \bottomrule
  \end{tabularx}
% same table with booktab rules but no above space and making rows bigger
\setlength{\aboverulesep}{0pt}
\setlength{\belowrulesep}{0pt}
\setlength{\extrarowheight}{.75ex}
  \begin{tabularx}{4cm}{>{\columncolor{gray}}cX>{\columncolor{gray}}c}
    \toprule
    1&2&3\\
    \midrule
    one&two&three\\
    one&two&three\\
    \cmidrule{2-3}
    one&two&three\\
    \midrule
    un&deux&trois\\
    \bottomrule
  \end{tabularx}
% same table without booktab rules
\setlength{\extrarowheight}{.75ex}
  \begin{tabularx}{4cm}{>{\columncolor{gray}}cX>{\columncolor{gray}}c}
    \hline
    1&2&3\\
    \hline
    one&two&three\\
    one&two&three\\
    \cline{2-3}
    one&two&three\\
    \hline
    un&deux&trois\\
    \hline
  \end{tabularx}
\end{document}

中间的表格看起来仍然比第三个表格略好一些。

三张桌子

答案2

表格中的规则和颜色不是必需的,正如注释中所说,但如果你仍然坚持使用它,那么包卡路里能够处理以下两个问题:

\documentclass{article}
\usepackage{cals}
\usepackage{xcolor}

\begin{document}

\begin{table*}[!htb]
\begin{calstable}[c]
% Defining columns 
\colwidths{{1.5cm}
            {2.25cm}
            {1.75cm}
            }

% Set up the tabular
\makeatletter
\def\cals@framers@width{0.8pt}   % Outside frame rules, reduce if the rule is too heavy
\def\cals@framecs@width{0pt}
\def\cals@bodyrs@width{0.4pt}    % "midrule" - line between heading and body
\cals@setpadding{Ag}
\cals@setcellprevdepth{Al}
\def\cals@cs@width{0pt}             % Inside rules, reduce if the rule is too heavy
\def\cals@rs@width{0.6pt}
\def\cals@bgcolor{}

\def\gray{\ifx\cals@bgcolor\empty     % "Switch" to turn on and off colour
    \def\cals@bgcolor{gray!50}
\else \def\cals@bgcolor{} \fi}

\def\bb{\ifx\cals@borderB\relax     % Bottom border switch (off-on)
\def\cals@borderB{0pt}
\else \let\cals@borderB\relax\fi}

% R1B1
\thead{%
\brow
    \gray\alignC\cell{1}\gray
    \alignL\cell{2}
    \gray\alignC\cell{3}\gray
\erow
}
%R2B2
\brow
    \gray\alignC\cell{\vfil one}\gray
    \alignL\cell{\vfil two}
    \gray\alignC\cell{\vfil three}\gray
\erow
%R3B3
\brow
    \gray\bb\alignC\cell{\vfil one}\bb\gray
    \alignL\cell{\vfil two}
    \gray\alignC\cell{\vfil three}\gray
\erow
%R4B4
\brow
    \gray\alignC\cell{\vfil one}\gray
    \alignL\cell{\vfil two}
    \gray\alignC\cell{\vfil three}\gray
\erow
%R4B4
\brow
    \gray\alignC\cell{\vfil un}\gray
    \alignL\cell{\vfil deux}
    \gray\alignC\cell{\vfil trois}\gray
\erow
\makeatletter
\end{calstable}\par
  \caption{caption}
\end{table*}
\end{document}

在此处输入图片描述

答案3

环境{NiceTabular}提供nicematrix了工具来以与水平规则兼容的方式为单元格、行和列着色booktabs

\documentclass[a5paper]{article}
\usepackage{xcolor}
\usepackage{booktabs,nicematrix}
\usepackage{lipsum}

\begin{document}

\pagestyle{empty}


\lipsum[1]

\begin{table*}[!htb]
  \centering
  \begin{NiceTabular}[width=4cm,colortbl-like]{>{\columncolor{gray}}cX>{\columncolor{gray}}c}
    \toprule
    1&2&3\\
    \midrule
    one&two&three\\
    one&two&three\\
    \cmidrule{2-3}
    one&two&three\\
    \midrule
    un&deux&trois\\
    \bottomrule
  \end{NiceTabular}
  \caption{caption}
\end{table*}

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容