表格中的条件问题

表格中的条件问题

我想使用条件来填充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. 我是否正确理解了这个问题?
  2. 如何做得更好?:)

答案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

相关内容