我希望表格的单元格颜色根据内容为红色或绿色:如果内容为“a”,则将其设为绿色;如果内容为“b”,则将其设为红色。但如果内容是其他内容(例如列标题),则单元格不应着色。
如果我只有以下代码的两个选项(基于这个答案),我就可以做红色/绿色的事情:https://tex.stackexchange.com/a/174359),但不知道如何阻止它为列标题着色。
\documentclass{article}
\usepackage{colortbl}
\begin{document}
\makeatletter
\newcommand*{\yncellcolor}{}
\def\yncellcolor\ignorespaces{\@ifnextchar{a}{\cellcolor{green}}{\cellcolor{red}}}
\newcolumntype{C}{>{\yncellcolor}c}
\makeatother
\begin{tabular}{C C C}
1 & 2 & 3 \\
\hline
a & b & a \\
b & b & b \\
a & a & b \\
a & a & a \\
\end{tabular}
\end{document}
其他问题也问过这个问题(例如条件 Latex 表:单元格值颜色基于其值),但它们似乎无法解决我的问题。
答案1
\@ifnextchar
一种方法是在条件颜色定义中添加另一种方法:
\documentclass{article}
\usepackage{colortbl}
\begin{document}
\makeatletter
\newcommand*{\yncellcolor}{}
\def\yncellcolor\ignorespaces{\@ifnextchar{a}{\cellcolor{green}}{\@ifnextchar{b}{\cellcolor{red}}{}}}
\newcolumntype{C}{>{\yncellcolor}c}
\makeatother
\begin{tabular}{C C C}
1 & 2 & 3 \\
\hline
a & b & a \\
b & b & b \\
a & a & b \\
a & a & a \\
\end{tabular}
\end{document}
答案2
与。{NiceTabular}
nicematrix
\documentclass{article}
\usepackage{nicematrix}
\usepackage{booktabs}
\usepackage{collcell}
\newcolumntype{C}{>{\collectcell\FormatCell}c<{\endcollectcell}}
\ExplSyntaxOn
\NewDocumentCommand \FormatCell { m }
{
\OnlyMainNiceMatrix
{
\str_if_eq:nnTF { #1 } { a }
{ \cellcolor{green} }
{ \cellcolor{red} }
}
#1
}
\ExplSyntaxOff
\begin{document}
\begin{NiceTabular}{CCC}[first-row,colortbl-like]
1 & 2 & 3 \\
\hline
a & b & a \\
b & b & b \\
a & a & b \\
a & a & a
\end{NiceTabular}
\end{document}