![根据单元格内容对表格的行进行着色](https://linux22.com/image/386528/%E6%A0%B9%E6%8D%AE%E5%8D%95%E5%85%83%E6%A0%BC%E5%86%85%E5%AE%B9%E5%AF%B9%E8%A1%A8%E6%A0%BC%E7%9A%84%E8%A1%8C%E8%BF%9B%E8%A1%8C%E7%9D%80%E8%89%B2.png)
我四处寻找,但找不到合适的答案。我有一张表格,如果第二个单元格中有复选标记,我想将行变为绿色,否则保留为白色。我还希望它能够自动变为绿色,即如果我写入\checkmark
(或类似的自定义命令),行就会自动变为绿色。
colortbl
我对-package 和-command进行了一些实验\rowcolor{green}
,但是它给了我错误消息并删除了表中的某些行,而且它不会自动执行。
以下是 MWE:
\documentclass{scrartcl}
\usepackage{amssymb}
\begin{document}
\begin{tabular}{|c|c|c|}
\hline
Number & Active? & Some more content... \\ \hline
001 & \checkmark & ... \\ \hline
002 & \checkmark & ... \\ \hline
003 & & ... \\ \hline
004 & & ... \\ \hline
005 & \checkmark & ... \\ \hline
006 & & ... \\ \hline
... & & ...
\end{tabular}
\end{document}
这里我想将第一、第二和第五行涂成绿色。
谢谢你!
答案1
虽然可以测试列中是否存在复选标记,但我认为简单地标记活动行更容易:
\documentclass{scrartcl}
\usepackage{amssymb}
\usepackage[table]{xcolor}
\usepackage{xparse,array}
\ExplSyntaxOn
\bool_new:N \g_car_active_bool
\NewExpandableDocumentCommand \caractiverow {}
{
\rowcolor{green}
\bool_gset_true:N \g_car_active_bool
}
\NewDocumentCommand \carcheckmark {}
{
\bool_if:NT \g_car_active_bool
{
\checkmark
}
\bool_gset_false:N \g_car_active_bool
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{|c|>{\carcheckmark}c|c|}
\hline
Number & Active? & Some more content... \\ \hline
\caractiverow 001 & & ... \\ \hline
\caractiverow 002 & & ... \\ \hline
003 & & ... \\ \hline
004 & & ... \\ \hline
\caractiverow 005 & & ... \\ \hline
006 & & ... \\ \hline
... & & ...
\end{tabular}
\end{document}
答案2
看起来第一行的列是渐进的,所以我们可以通过定义一个\newrow
命令来检查它是否后面跟着 来挂钩这一点\checkmark
。
\documentclass{scrartcl}
\usepackage{amssymb}
\usepackage[table]{xcolor}
\newcounter{rowcount}
\renewcommand{\therowcount}{%
\ifnum\value{rowcount}<100 0\fi
\ifnum\value{rowcount}<10 0\fi
\arabic{rowcount}%
}
\makeatletter
\newcommand{\newrow}[1]{%
\ifx#1\checkmark
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\rowcolor{green}\stepcounter{rowcount}\therowcount & \checkmark}%
{\stepcounter{rowcount}\therowcount &&}%
}
\makeatother
\begin{document}
\setcounter{rowcount}{0}
\begin{tabular}{|c|c|c|}
\hline
Number & Active? & Some more content... \\
\hline
\newrow\checkmark & ... \\
\hline
\newrow\checkmark & ... \\
\hline
\newrow & ... \\
\hline
\newrow & ... \\
\hline
\newrow\checkmark & ... \\
\hline
\newrow & ... \\
\hline
\newrow & ... \\
\hline
\end{tabular}
\end{document}
您可以将的定义更改\newrow
为
\makeatletter
\newcommand{\newrow}[1]{%
\ifx#1*%
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\rowcolor{green}\stepcounter{rowcount}\therowcount & \checkmark}%
{\stepcounter{rowcount}\therowcount &&}%
}
\makeatother
因此输入可能更简单:
\setcounter{rowcount}{0}
\begin{tabular}{|c|c|c|}
\hline
Number & Active? & Some more content... \\
\hline
\newrow* & ... \\
\hline
\newrow* & ... \\
\hline
\newrow & ... \\
\hline
\newrow & ... \\
\hline
\newrow* & ... \\
\hline
\newrow & ... \\
\hline
\newrow & ... \\
\hline
\end{tabular}