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