我曾尝试(并研究)许多方法使其正常工作,但最终都失败了。
我尝试使用不同的命令调用新行,每个命令根据某些因素给出不同颜色的行(以及间距)。
在其中一个命令中(与另一个可以工作的命令或放置在\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
。此外,还添加了一些行尾 % 符号,以防止不必要的额外空格。