在新环境中,rowcolor 失败,并出现“\rowcolor -> \noalign”

在新环境中,rowcolor 失败,并出现“\rowcolor -> \noalign”

我曾尝试(并研究)许多方法使其正常工作,但最终都失败了。

我尝试使用不同的命令调用新行,每个命令根据某些因素给出不同颜色的行(以及间距)。

在其中一个命令中(与另一个可以工作的命令或放置在\ifthenelse块中的命令非常相似)我收到一个错误:

! Misplaced \noalign.
\rowcolor ->\noalign 
                     {\ifnum 0=`}\fi \global \let \CT@do@color \CT@@do@color...
l.56     \newSpecialItem[0]{d}{e}{f}

更新代码:带有命令代码的环境如下:

\documentclass{article}

\usepackage{longtable,tabularx,ltxtable}
\usepackage{ifthen}
\usepackage[table]{xcolor}

\newcounter{sCounter}

\newenvironment{myEnviron}
{
    % Works
    \newcommand{\newBasicItem}[3] {
        \rowcolor{green}
        ##1 & ##2 & ##3 \\ \hline
    }

    % works as long as row color is in this order and outside the if block
    \newcommand{\newMainItem}[4] {
        \rowcolor{gray}       
        \setcounter{sCounter}{##1}
        \hspace{\arabic{sCounter}mm}##2 & ##3 & ##4 % \\ \hline
        \addtocounter{sCounter}{8}
        \\ \hline
     }

    \newcommand{\newSpecialItem}[4][0] {
        \rowcolor{blue}  % <-- Failing 
        \ifthenelse{\equal{##1}{0}} {} {
            \addtocounter{sCounter}{-8}
        }
        \hspace{\arabic{sCounter}mm}##2 & ##3 & ##4 \\ \hline
    }

    \renewcommand{\arraystretch}{1.5}
    \begin{longtable}[l]{|p{2in}|p{2in}|p{2in}|}
    \hline
    \rowcolor{green}
    \textbf{\color{white}Name} & \textbf{\color{white}Name2} & \textbf{\color{white}Name3} \\ \hline
    \endhead
}
{ % end environment (myEnviron)
    \end{longtable}
}


\begin{document}


\section{attempt}

\begin{myEnviron} 
    \newMainItem{0}{a}{b}{c}
    \newSpecialItem[1]{d}{e}{f}
    \newBasicItem{g}{h}{i}

\end{myEnviron}


\end{document}

除非我删除该呼叫,否则该\newSpecialItem呼叫始终会失败,\rowcolor

非常感谢任何建议,我对 LaTeX 还很陌生。

答案1

正如您所发现的,问题在于 中的可选参数\newSpecialItem。这会触发一些代码来检查参数是否存在,从而导致 in\noalign失败\rowcolor

在下面,对的调用\rowcolor被来自的实现的代码替换\rowcolor,但没有\noalign命令(以及其他内容)。但是删除它可能会产生不良的副作用。

梅威瑟:

\documentclass{article}

\usepackage{longtable,tabularx,ltxtable}
\usepackage{ifthen}
\usepackage[table]{xcolor}

\newcounter{sCounter}
\makeatletter
\newenvironment{myEnviron}
{
    % Works
    \newcommand{\newBasicItem}[3] {
        \rowcolor{green}
        ##1 & ##2 & ##3 \\ \hline
    }

    % works as long as row color is in this order and outside the if block
    \newcommand{\newMainItem}[4] {
        \rowcolor{gray}       
        \setcounter{sCounter}{##1}
        \hspace{\arabic{sCounter}mm}##2 & ##3 & ##4 % \\ \hline
        \addtocounter{sCounter}{8}
        \\ \hline
     }
    \newcommand{\newSpecialItem}[4][0] {%
        \let\CT@do@color\CT@@do@color\gdef\CT@row@color{\CT@color{blue}}%
        \ifthenelse{\equal{##1}{0}}{}{%
            \addtocounter{sCounter}{-8}%
        }%
        \hspace{\arabic{sCounter}mm}##2 & ##3 & ##4 \\ \hline
    }

    \renewcommand{\arraystretch}{1.5}
    \begin{longtable}[l]{|p{2in}|p{2in}|p{2in}|}
    \hline
    \rowcolor{green}
    \textbf{\color{white}Name} & \textbf{\color{white}Name2} & \textbf{\color{white}Name3} \\ \hline
    \endhead
}
{ % end environment (myEnviron)
    \end{longtable}
}
\makeatother

\begin{document}

\section{attempt}

\begin{myEnviron}
    \newMainItem{0}{a}{b}{c}
    \newSpecialItem[1]{d}{e}{f}
    \newBasicItem{g}{h}{i}

\end{myEnviron}

\end{document}

结果:

在此处输入图片描述

请注意,添加的代码充满了@符号,需要在环境定义之前和之后使用\makeatletter\makeatother。此外,还添加了一些行尾 % 符号,以防止不必要的额外空格。

相关内容