在表格环境中为行和列着色

在表格环境中为行和列着色

我正在尝试整理一系列表格,这些表格显示了使用单纯形法(运筹学概念)的行减少。我试图突出显示单纯形法中使用的行和列,这些特定的行和列一直在变化。我尝试了以下操作:

\documentclass[12pt]{article}
\usepackage[margin=1cm,landscape,paperwidth=3in,paperheight=3in]{geometry}
\usepackage{amsmath,booktabs,colortbl}
\usepackage[table]{xcolor}
\pagestyle{empty}

\begin{document}
\newcolumntype{M}{>{$}c<{$}}
\newcolumntype{P}{>{\columncolor{gray!75}}M}
\rowcolors{2}{gray!25}{}
\begin{tabular}{|MPM|}
\hline
x_1 & y_1 & z_1 \\
x_2 & y_2 & z_2 \\
x_3 & y_3 & z_3 \\
x_4 & y_4 & z_4 \\
x_5 & y_5 & z_5 \\
x_6 & y_6 & z_6 \\
\hline
\end{tabular}
\end{document}

但似乎每次调用都会\rowcolor覆盖指定的列颜色。有什么办法可以解决这个问题吗?

答案1

colortbl 相当随意地使行颜色优先于列颜色,如果您希望扭转这一决定,您只需改变顺序\CT@column@color\CT@row@color您可以通过应用下面的补丁宏来做到这一点:

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage[margin=1cm,landscape,paperwidth=3in,paperheight=3in]{geometry}
\usepackage{amsmath,booktabs,colortbl}
\usepackage[table]{xcolor}

\makeatletter
\def\tmpp#1\@addtopreamble#2#3!{%
    \tmp#2!{#1}{#3}}



\def\tmp#1\CT@column@color\CT@row@color#2!#3#4{%
\def\@classz{#3\@addtopreamble{#1\CT@row@color\CT@column@color#2}#4}}

\expandafter\tmpp\@classz!
\makeatother
\pagestyle{empty}

\begin{document}
\newcolumntype{M}{>{$}c<{$}}
\newcolumntype{P}{>{\columncolor{gray!75}}M}
\rowcolors{2}{gray!25}{}
\begin{tabular}{|MPM|}
\hline
x_1 & y_1 & z_1 \\
x_2 & y_2 & z_2 \\
x_3 & y_3 & z_3 \\
x_4 & y_4 & z_4 \\
x_5 & y_5 & z_5 \\
x_6 & y_6 & z_6 \\
\hline
\end{tabular}
\end{document}

答案2

在 的环境中nicematrix,您可以指定应用颜色指令的顺序。

\documentclass[12pt]{article}
\usepackage{nicematrix}

\begin{document}

\[\begin{NiceArray}{|ccc|}
\CodeBefore
  \columncolor{gray!75}{2}
  \rowcolors{2}{gray!25}{}
\Body
  \Hline
  x_1 & y_1 & z_1 \\
  x_2 & y_2 & z_2 \\
  x_3 & y_3 & z_3 \\
  x_4 & y_4 & z_4 \\
  x_5 & y_5 & z_5 \\
  x_6 & y_6 & z_6 \\
  \Hline
\end{NiceArray}\]


\[\begin{NiceArray}{|ccc|}
\CodeBefore
  \rowcolors{2}{gray!25}{}
  \columncolor{gray!75}{2}
\Body
  \Hline
  x_1 & y_1 & z_1 \\
  x_2 & y_2 & z_2 \\
  x_3 & y_3 & z_3 \\
  x_4 & y_4 & z_4 \\
  x_5 & y_5 & z_5 \\
  x_6 & y_6 & z_6 \\
  \Hline
\end{NiceArray}\]

\end{document}

此外,您将在所有 PDF 查看器中获得完美的输出。

上述代码的输出

相关内容