我想使用条件来填充tabular
,但失败了。我的 MWE:
\documentclass{article}
\usepackage{environ}
\newcounter{mycounter}
\NewEnviron{montab}{%
\setcounter{mycounter}{0}
\newcommand{\mcItem}[1]{%
\stepcounter{mycounter}%
\ifcase \arabic{mycounter} % If counter = 0
\relax
\or % If counter = 1
##1 & %
\or % If counter = 2
##1 \\%
\or % If counter = 3
##1 &
\or % If counter = 4
##1
\fi
}
\begin{tabular}{cc}
\BODY
\end{tabular}
}
\begin{document}
\begin{montab}
\mcItem{premier}
\mcItem{deuxieme}
\mcItem{troisieme}
\mcItem{quatrieme}
\end{montab}
\end{document}
我希望通过此代码获得输出:
premier deuxieme
troisieme quatrieme
我认为问题出在这样一个事实:例如,条件句的一部分(the \ifcase
)位于a之前,&
而其余部分位于a之后。由于a的任何单元都tabular
构成一个组,因此条件句的不同元素位于不同的组中。
- 我是否正确理解了这个问题?
- 如何做得更好?:)
答案1
您不能在一个单元格中开始一个条件并在另一个单元格中结束它:
\usepackage{environ}
\newcounter{mycounter}
\NewEnviron{montab}{%
\setcounter{mycounter}{0}
\newcommand{\mcItem}[1]{%
\stepcounter{mycounter}%
\ifcase \arabic{mycounter} % If counter = 0
\or
\expandafter\firstoffour\or % If counter = 1
\expandafter\secondoffour\or % If counter = 2
\expandafter\thirdoffour\or % If counter = 3
\expandafter\fourthoffour % If counter = 4
\fi
{##1 &}{##1 \\}{##1 &}{##1}
}
\begin{tabular}{cc}
\BODY
\end{tabular}
}
\long\def\firstoffour#1#2#3#4{#1}
\long\def\secondoffour#1#2#3#4{#2}
\long\def\thirdoffour#1#2#3#4{#3}
\long\def\fourthoffour#1#2#3#4{#4}
实际上,您不需要四种情况,而只需要两种,因为\\
表格中的最后一个情况就很好了。
\makeatletter
\newif\iffirstcol
\NewEnviron{montab}{%
\global\firstcoltrue
\newcommand\mcItem[1]{%
\iffirstcol
\global\firstcolfalse
\expandafter\@firstoftwo
\else
\global\firstcoltrue
\expandafter\@secondoftwo
\fi{##1 &}{##1 \\}}%
\begin{tabular}{cc}
\BODY
\end{tabular}}
\makeatother