表格列颜色主导行颜色

表格列颜色主导行颜色

我想制作一个表格,其中某些行和列有颜色,但我希望列颜色占主导地位。在我的示例中,行颜色占主导地位。我该如何实现这一点?

\documentclass{article}
\usepackage{colortbl}
\usepackage{xcolor}
\begin{document}
\newcolumntype{g}{>{\columncolor{gray!30}}r}
\[
  \begin{array}{rrrgrrg}
  & & 1 & 2 & 3 & 4 & 5 \\ \hline
  \rowcolor{gray!70}
  2 & 4 & 3 & 0 & 2 & 1 & 1 \\
  \rowcolor{gray!70}
  3 & 2 & 1 & 1 & 1 & 1 & 0 \\
  2 & 5 & 0 & 6 & 0 & 2 & 3 \\
  3 & 2 & 2 & 3 & 5 & 0 & 1 \\
  \rowcolor{gray!70}
  2 & 3 & 1 & 0 & 2 & 1 & 0 \\
  \end{array}
\]
\newcolumntype{g}{>{\columncolor{gray!80}}r}
\[
  \begin{array}{rrrgrrg}
  & & 1 & 2 & 3 & 4 & 5 \\ \hline
  \rowcolor{gray!50}
  2 & 4 & 3 & 0 & 2 & 1 & 1 \\
  \rowcolor{gray!50}
  3 & 2 & 1 & 1 & 1 & 1 & 0 \\
  2 & 5 & 0 & 6 & 0 & 2 & 3 \\
  3 & 2 & 2 & 3 & 5 & 0 & 1 \\
  \rowcolor{gray!50}
  2 & 3 & 1 & 0 & 2 & 1 & 0 \\
  \end{array}
\]
\end{document}

答案1

colortbl包优先考虑行的颜色而不是列的颜色。

但你可以通过在序言中添加以下几行来反转这种行为:

\usepackage{etoolbox}

\makeatletter
\patchcmd{\@classz}
  {\CT@row@color}
  {\oldCT@column@color}
  {}
  {}
\patchcmd{\@classz}
  {\CT@column@color}
  {\CT@row@color}
  {}
  {}
\patchcmd{\@classz}
  {\oldCT@column@color}
  {\CT@column@color}
  {}
  {}
\makeatother

MWE(我删除了你的\hlines 因为它们看起来很丑)

\documentclass{article}
\usepackage{colortbl}
\usepackage{xcolor}

\usepackage{etoolbox}

\makeatletter
\patchcmd{\@classz}
  {\CT@row@color}
  {\oldCT@column@color}
  {}
  {}
\patchcmd{\@classz}
  {\CT@column@color}
  {\CT@row@color}
  {}
  {}
\patchcmd{\@classz}
  {\oldCT@column@color}
  {\CT@column@color}
  {}
  {}
\makeatother

\begin{document}
\newcolumntype{g}{>{\columncolor{gray!30}}r}
\[
  \begin{array}{rrrgrrg}
  & & 1 & 2 & 3 & 4 & 5 \\ 
  \rowcolor{gray!70}
  2 & 4 & 3 & 0 & 2 & 1 & 1 \\
  \rowcolor{gray!70}
  3 & 2 & 1 & 1 & 1 & 1 & 0 \\
  2 & 5 & 0 & 6 & 0 & 2 & 3 \\
  3 & 2 & 2 & 3 & 5 & 0 & 1 \\
  \rowcolor{gray!70}
  2 & 3 & 1 & 0 & 2 & 1 & 0 \\
  \end{array}
\]
\[
  \begin{array}{rrrgrrg}
  & & 1 & 2 & 3 & 4 & 5 \\ 
  \rowcolor{gray!50}
  2 & 4 & 3 & 0 & 2 & 1 & 1 \\
  \rowcolor{gray!50}
  3 & 2 & 1 & 1 & 1 & 1 & 0 \\
  2 & 5 & 0 & 6 & 0 & 2 & 3 \\
  3 & 2 & 2 & 3 & 5 & 0 & 1 \\
  \rowcolor{gray!50}
  2 & 3 & 1 & 0 & 2 & 1 & 0 \\
  \end{array}
\]
\end{document} 

输出:

在此处输入图片描述

答案2

使用{NiceTabular}nicematrix您可以输入指令来为 中的行和列(以及单个单元格)着色\CodeBefore

您可以选择这些指令的顺序。

此外,您不会看到细白线(无论您使用哪种 PDF 查看器)。

\documentclass{article}
\usepackage{nicematrix}
\usepackage{xcolor}

\begin{document}

\begin{NiceTabular}{ccccccc}
\CodeBefore
  \rowcolor{gray!70}{2,3,6}
  \columncolor{gray!30}{4,7}
\Body
  &   & 1 & 2 & 3 & 4 & 5 \\ \hline
2 & 4 & 3 & 0 & 2 & 1 & 1 \\
3 & 2 & 1 & 1 & 1 & 1 & 0 \\
2 & 5 & 0 & 6 & 0 & 2 & 3 \\
3 & 2 & 2 & 3 & 5 & 0 & 1 \\
2 & 3 & 1 & 0 & 2 & 1 & 0 \\
\end{NiceTabular}


\begin{NiceTabular}{ccccccc}
\CodeBefore
  \columncolor{gray!30}{4,7}
  \rowcolor{gray!70}{2,3,6}
\Body
  &   & 1 & 2 & 3 & 4 & 5 \\ \hline
2 & 4 & 3 & 0 & 2 & 1 & 1 \\
3 & 2 & 1 & 1 & 1 & 1 & 0 \\
2 & 5 & 0 & 6 & 0 & 2 & 3 \\
3 & 2 & 2 & 3 & 5 & 0 & 1 \\
2 & 3 & 1 & 0 & 2 & 1 & 0 \\
\end{NiceTabular}

\end{document}

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

上述代码的输出

答案3

使用新的 LaTeX 3 包也可以轻松获得tabularray

在此处输入图片描述

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{tabularray}

\begin{document}
\begin{tblr}{rowspec={Q Q[gray!50]Q[gray!50] QQ Q[gray!50]},
             colspec={Q[c]Q[c]Q[c]Q[c,gray!25]Q[c]Q[c] Q[c,gray!25]},
             }
  &   & 1 & 2 & 3 & 4 & 5 \\ 
  \hline
2 & 4 & 3 & 0 & 2 & 1 & 1 \\
3 & 2 & 1 & 1 & 1 & 1 & 0 \\
2 & 5 & 0 & 6 & 0 & 2 & 3 \\
3 & 2 & 2 & 3 & 5 & 0 & 1 \\
2 & 3 & 1 & 0 & 2 & 1 & 0 \\
\end{tblr}
\end{document}

笔记,重要的是行(第一)和列(最后一)的定义顺序!

答案4

要使列的颜色优于行的颜色,请使用>{\cellcolor{gray!30}}c而不是>{\columncolor{gray!30}}c

\documentclass{article}
\usepackage[table]{xcolor}

\begin{document}

\begin{tabular}{ccc>{\columncolor{gray!30}}ccc>{\columncolor{gray!30}}c}
  &   & 1 & 2 & 3 & 4 & 5 \\ \hline
\rowcolor{gray!70}
2 & 4 & 3 & 0 & 2 & 1 & 1 \\
\rowcolor{gray!70}
3 & 2 & 1 & 1 & 1 & 1 & 0 \\
2 & 5 & 0 & 6 & 0 & 2 & 3 \\
3 & 2 & 2 & 3 & 5 & 0 & 1 \\
\rowcolor{gray!70}
2 & 3 & 1 & 0 & 2 & 1 & 0 \\
\end{tabular}

\bigskip

\begin{tabular}{ccc>{\cellcolor{gray!30}}ccc>{\cellcolor{gray!30}}c}
  &   & 1 & 2 & 3 & 4 & 5 \\ \hline
\rowcolor{gray!70}
2 & 4 & 3 & 0 & 2 & 1 & 1 \\
\rowcolor{gray!70}
3 & 2 & 1 & 1 & 1 & 1 & 0 \\
2 & 5 & 0 & 6 & 0 & 2 & 3 \\
3 & 2 & 2 & 3 & 5 & 0 & 1 \\
\rowcolor{gray!70}
2 & 3 & 1 & 0 & 2 & 1 & 0 \\
\end{tabular}

\end{document}

上述代码的输出

相关内容