为表格的行和列着色

为表格的行和列着色

我有一张表,其行使用 xcolor 设置为在白色和灰色之间交替\rowcolors{2}{white}{gray!10}。 我还想突出显示该表的一列,以便它看起来像这样:

交替行,突出显示列

我尝试使用\begin{tabular}{c>{\columncolor{_lblue!25}}cc}来执行此操作,但这样做只会覆盖颜色,并将其与白色混合。有没有办法混合行和列的颜色,使其看起来像图像?也许一个变量可以保存背景颜色,这样我就可以执行类似 的操作\columncolor{_lblue!25!\cellbgcolor}

编辑:我现在拥有的是

\rowcolors{2}{white}{gray!10}
\begin{tabular}[c>{\columncolor{blue}}cc]
    a & b & c \\
    \hline
    1 & 2 & 3 \\
    4 & 5 & 6 \\
    7 & 8 & 9
\end{tabular}

我尝试使用透明度包,看看是否可以使列颜色透明,以防被覆盖而不是覆盖,但这会使整个单元格(包括文本)透明。我不知道如何在跟踪列颜色的同时交替使用每行的颜色。

答案1

不幸的是,据我所知,表格中行和列的颜色没有行颜色透明度的选项。所以应该用\cellcolor适当的颜色来模仿。例如像这样:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\newcommand\ccg[1]{\cellcolor{gray!30!red!30}{#1}} % for cells in second column 
                                                   % and gray colored rows
\newcommand\ccw[1]{\cellcolor{red!15}{#1}}         % for cells in  second column 
                                                   % white colored rows

\begin{document}
\rowcolors{1}{white}{gray!30}
    \begin{tabular}{c c c}
        a   & \ccw{b}   & c     \\
        \hline
        1   & \ccg{2}   & 3     \\
        4   & \ccw{5}   & 6     \\
        7   & \ccg{8}   & 9     \\
    \end{tabular}
\end{document}

在此处输入图片描述

答案2

后来我想到一种方法,就是完全放弃\rowcolors。这样你就可以突出显示行和列,交替对列进行阴影处理,并混合颜色以突出显示。这可能不太漂亮,但确实有效。

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[table]{xcolor}
\usepackage{etoolbox}
\usepackage{array}

\begin{document}
    \def\graybg{black!20!white}%
    \def\currowcolor{\graybg}%
    \newcolumntype{H}[1]{>{\cellcolor{\currowcolor!60!#1}}c} % Highlighted col
    \newcolumntype{C}{H{white}} % Normal col

    \newcommand{\rowalt}
            {%
            \ifdefstring{\oldcol}{NONE}%
                {%
                    \ifdefstring%
                        {\currowcolor}{\graybg}%
                        {\global\def\currowcolor{white}}%
                        {\global\def\currowcolor{\graybg}}%
                }%
                {%
                    \ifdefstring%
                        {\oldcol}{\graybg}%
                        {\global\def\currowcolor{white}}%
                        {\global\def\currowcolor{\graybg}}%
                    \global\def\oldcol{NONE}%
                }%
            }%

    % Overwrite the row color (while preserving shading and column colors)
    \newcommand{\owc}[1]%
        {%
            \global\let\oldcol\currowcolor%
            \global\def\currowcolor{\oldcol!50!#1}%
        }%

    \newenvironment{mytable}[1]
        {%
        \global\def\oldcol{NONE}%
        \def\currowcolor{\graybg}%
        \begin{tabular}{!\rowalt #1}%
        }%
        {%
        \end{tabular}%
        }%

    \begin{mytable}{CH{blue!50}CCC}
        a & b & c & d & e \\
        \hline
        1 & 2 & 3 & 2 & 1 \\
        4 & 5 & 6 & 5 & 4 \\
        \owc{red}7 & 8 & 9 & 8 & 7 \\
        \owc{red}4 & 5 & 6 & 5 & 4 \\
        1 & 2 & 3 & 2 & 1
    \end{mytable}
\end{document}

在此处输入图片描述

答案3

这是一个(≥ 6.18 2023-04-19){NiceTabular}的解决方案。nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{ccc}
\CodeBefore
  \rowcolor{gray!10}{2,4}
  \columncolor[opacity=0.2]{blue}{2}
\Body
    a   & b   & c     \\ \hline
    1   & 2   & 3     \\
    4   & 5   & 6     \\
    7   & 8   & 9     \\
\end{NiceTabular}

\end{document}

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

上述代码的输出

相关内容