行颜色和切换

行颜色和切换

我想创建一个新命令,在每行前面重复该命令,如果切换为真,该命令将为该行着色,如果切换为假,该命令将不着色。我会在某些特定位置更改切换的状态,以便为以下行着色或不着色。

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{etoolbox}
\usepackage{colortbl}

\begin{document}

\newtoggle{fond}
\providecommand{\chfd}%
    {\iftoggle{fond}%
        {\rowcolor[rgb]{.95,.95,1}}%
        {}%
    }%

\toggletrue{fond}

\begin{tabular}{cc}
1 & 2 \\

\hline

\chfd a & b \\
\togglefalse{fond}%
\chfd c & d \\
\chfd e & f \\
%\toggletrue{fond}
\chfd g & h \\
\end{tabular}
\end{document}

以下是我得到的

除了 \hline(似乎被下面的 \chfd 取消)之外,它一直到“d”单元格都按我的预期运行。但为什么 ef 行又变回彩色了?我期望切换按钮保持“false”状态,并且行不着色?

并且我希望将切换设置为“true”才能使 gh 行着色...实际上它无论如何都是彩色的,如果我取消注释 %\toggletrue{fond} 我会收到错误:

Misplaced \noalign.
\rowcolor ->\noalign 
                     {\ifnum 0=`}\fi \global \let \CT@do@color \CT@@do@color...
l.30 \chfd
           g & h \\ 

我究竟做错了什么?

答案1

\rowcolors(像 一样\multicolumn)相当挑剔。它希望成为一行中的第一个。因此您无法执行它之前的所有代码。使用 则\togglefalse无关紧要,因为 是\rowcolors看不见的,但\toogletrue应该在 之前的单元格中或隐藏在 中\noalign。在这两种情况下,它都必须是全局的:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{etoolbox}
\usepackage{colortbl}

\begin{document}

\newtoggle{fond}
\providecommand{\chfd}%
    {\iftoggle{fond}%
        {\rowcolor[rgb]{.95,.95,1}}%
        {}%
    }%

\togglefalse{fond}

\begin{tabular}{cc}
\chfd a & b \global\toggletrue{fond} \\
\chfd c & d \\
\end{tabular}

\togglefalse{fond}
\begin{tabular}{cc}
\chfd a & b \\\noalign{\global\toggletrue{fond}}
\chfd c & d \\
\end{tabular}

\end{document}

在此处输入图片描述

答案2

供参考,在{NiceTabular}nicematrix,您可以使用\rowlistcolors{...}来启动连续着色并\rowlistcolors{}停止它。

\documentclass{article}
 \usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{cc}[color-inside]
1 & 2 \\
\rowlistcolors[rgb]{{0.95,0.95,1}}
a & b \\
\rowlistcolors{}
c & d \\
\rowlistcolors[rgb]{{0.95,0.95,1}}
e & f \\
g & h \\
i & j \\
\end{NiceTabular}

\end{document}

上述代码的输出

相关内容