我想制作一个表格,其中某些行和列有颜色,但我希望列颜色占主导地位。在我的示例中,行颜色占主导地位。我该如何实现这一点?
\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(我删除了你的\hline
s 因为它们看起来很丑)
\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}