行颜色作为带有计数器和 if-else 语句的命令

行颜色作为带有计数器和 if-else 语句的命令

我正在制作一个表格,我想用不同的颜色给奇数行和偶数行上色。我创建了一个带有计数器的新命令。计数器随着每一行新内容而递增,并且 if-else 语句在两种颜色之间切换。当我使用该命令时,处理我的文件时出现错误。错误是! Misplaced \noalign。我查看了命令,但不知道哪里出了问题。请帮我找出错误。

\newcounter{irow}
\setcounter{irow}{0}
\definecolor{evenrowcolor}{HTML}{f7f5f5}
\definecolor{oddrowcolor}{HTML}{87e09f}
\newcommand{\ColorizeRow}{\addtocounter{irow}{1}\ifodd\value{irow}\rowcolor{oddrowcolor}\else\rowcolor{evenrowcolor}\fi}
\begin{table}[!htbp]
\begin{tabular}{|c|c|c|}
  \hline
  \ColorizeRow
  A & B & C \\
  \ColorizeRow
  D & E & F\\
  \ColorizeRow
  G & H & I \\
  \ColorizeRow
  J & K & L \\
  \ColorizeRow
  M & N & O \\
  \hline
\end{tabular}
\end{table}

答案1

命令\rowcolorcolortbl开头\noalign,我们必须在 之前放置可扩展的材料(在 TeX 含义中)\noalign。该指令\addtocounter{irow}{1}不可扩展(与所有 指令一样)。

不过,您可以\addtocounter{irow}{1}在指令后面放置\rowcolor

\documentclass{article}
\usepackage{xcolor,array,colortbl}

\begin{document}

\newcounter{irow}
\setcounter{irow}{0}
\definecolor{evenrowcolor}{HTML}{f7f5f5}
\definecolor{oddrowcolor}{HTML}{87e09f}
\newcommand{\ColorizeRow}{\ifodd\value{irow}\rowcolor{evenrowcolor}\else\rowcolor{oddrowcolor}\fi \addtocounter{irow}{1}}
\begin{table}[!htbp]
\begin{tabular}{|c|c|c|}
  \hline
  \ColorizeRow
  A & B & C \\
  \ColorizeRow
  D & E & F\\
  \ColorizeRow
  G & H & I \\
  \ColorizeRow
  J & K & L \\
  \ColorizeRow
  M & N & O \\
  \hline
\end{tabular}
\end{table}

\end{document}

上述代码的输出

答案2

我不明白你为什么喜欢发明已经存在的东西。包中有用于着色表的xcolor选项。此选项定义(除其他外):table

\rowcolors{<row num>}{<odd color>}{<even color>}

其中row num是激活此命令的行数。例如:

\documentclass[margin=3mm, varwidth]{standalone}
\usepackage[table]{xcolor}

\begin{document}
    \begin{table}[!htb]
\rowcolors{1}{red}{blue}
\begin{tabular}{|c|c|c|}
  \hline
A & B & C \\
  D & E & F \\
  G & H & I \\
  J & K & L \\
  M & N & O \\
  \hline
\end{tabular}
    \end{table}

    \begin{table}[!htb]
\rowcolors{2}{red}{blue}
\begin{tabular}{|c|c|c|}
  \hline
A & B & C \\
  D & E & F \\
  G & H & I \\
  J & K & L \\
  M & N & O \\
  \hline
\end{tabular}
    \end{table}
    
    \begin{table}[!htb]
\rowcolors{1}{}{blue}
\begin{tabular}{|c|c|c|}
  \hline
A & B & C \\
  D & E & F \\
  G & H & I \\
  J & K & L \\
  M & N & O \\
  \hline
\end{tabular}
    \end{table}

\end{document}

在此处输入图片描述

这就是你想要实现的目标吗?

相关内容