在 \begin{tabu} 中使用字符串变量作为格式字符串

在 \begin{tabu} 中使用字符串变量作为格式字符串

我遇到了以下问题。我正在使用包tabu来创建表,但不是使用这样的格式字符串:\begin{tabu}{ccc}我想使用这样的格式字符串(作为字符串变量)\begin{tabu}{\reptemp}:。

这是我的代码:

\documentclass{article}
\usepackage{forloop,tabu}

\begin{document}

\def\reptemp{}      

\newcounter{ct}

    \forloop{ct}{1}{\value{ct} < 5}%
    {%
        \g@addto@macro\reptemp{c}
    }

\begin{tabu}{\reptemp}
\end{tabu}

\end{document}

并出现以下编译错误:

! Package array Error: Illegal pream-token (\reptemp): 'c' used.

我希望您能为我提供一些解决此问题的建议。

答案1

环境tabu不会对序言参数进行扩展。

\documentclass{article}
\usepackage{forloop,tabu}

\def\reptemp{}
\makeatletter
\newcounter{ct}

    \forloop{ct}{1}{\value{ct} < 5}%
    {%
        \g@addto@macro\reptemp{c}
    }
\makeatother

\newenvironment{xtabu}[1]
  {\begingroup\edef\x{\endgroup
   \unexpanded{\begin{tabu}}{\unexpanded\expandafter{#1}}}\x}
  {\end{tabu}}


\begin{document}
\begin{xtabu}{\reptemp}
1&2&3&4
\end{xtabu}
\end{document}

答案2

在将宏传递给环境之前,您需要将其扩展:

\def\starttabu#1{\begin{tabu}{#1}}

\expandafter\starttabu\expandafter{\reptemp}

相关内容