preciso de ajuda para criar uma tabela com colunas dinâmicas

preciso de ajuda para criar uma tabela com colunas dinâmicas
\NewDocumentCommand\foo{>{\SplitList{;}}m}
{
    \begin{table}
    \begin{tabular}{ \ProcessList{#1} c}
        \ProcessList{#1}{\additem}
    \end{tabular}
    \end{table}}
}

  \newcommand\additem[1]{#1 &}   

Estou tentando fazer uma tabela dinâmica que receba o máximo de argumentos da lista e seja colocada na tabela, com cada item sendo uma coluna.. tendo um problema com o número de colunas e o número de & sendo inseridos. Qualquer ajuda seria muito apreciada.

meu problema é prever o número de colunas na tabela. e impedindo a

! Package array Error: Illegal pream-token (\ProcessList):c' usado.`

ou se eu remover a lista de processos eu recebo

! Extra alignment tab has been changed to \cr.

Responder1

Não está claro o que esse comando faria, já que um tabular de uma linha é apenas uma linha e, portanto, tabularnão é necessário: você obteria o comportamento necessário simplesmente dizendo

\NewDocumentCommand{\foo}{>{\SplitList{;}}m}{%
  \begin{table}
  \centering
  \ProcessList{#1}{\additem}
  \end{table}
}

\newcommand{\additem}[1]{\mbox{\hspace{\tabcolsep}#1\hspace{\tabcolsep}}}

Exemplo completo, com a mesma tabela escrita explicitamente, para ver se a saída é exatamente a mesma:

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\foo}{>{\SplitList{;}}m}{%
  \begin{table}[htp]
  \centering
  \ProcessList{#1}{\additem}
  \end{table}
}

\newcommand{\additem}[1]{\mbox{\hspace{\tabcolsep}#1\hspace{\tabcolsep}}}

\begin{document}

\foo{abc;def;ghijkl;m}

\begin{center}
\begin{tabular}{*{4}{c}}
abc & def & ghijkl & m
\end{tabular}
\end{center}
\end{document}

insira a descrição da imagem aqui

Para uma macro mais útil, aqui está uma maneira:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\foo}{m}
 {
  \bob_make_table:n { #1 }
 }

\int_new:N \l_bob_colcount_int
\seq_new:N \l_bob_rows_seq
\seq_new:N \l_bob_temp_seq
\tl_new:N \l_bob_table_tl

\cs_new_protected:Npn \bob_make_table:n #1
 {
  \seq_set_split:Nnn \l_bob_rows_seq { \\ } { #1 }
  \int_zero:N \l_bob_colcount_int
  % count the number of columns
  \seq_map_inline:Nn \l_bob_rows_seq
   {
    \seq_set_split:Nnn \l_bob_temp_seq { ; } { ##1 }
    \int_compare:nT { \seq_count:N \l_bob_temp_seq > \l_bob_colcount_int }
     {
      \int_set:Nn \l_bob_colcount_int { \seq_count:N \l_bob_temp_seq }
     }
   }
  % produce the table
  \tl_set:Nn \l_bob_table_tl { \begin{tabular}{*{\l_bob_colcount_int}{c}} }
  \seq_map_inline:Nn \l_bob_rows_seq
   {
    \seq_set_split:Nnn \l_bob_temp_seq { ; } { ##1 }
    \tl_put_right:Nx \l_bob_table_tl { \seq_use:Nn \l_bob_temp_seq { & } }
    \tl_put_right:Nn \l_bob_table_tl { \\ }
   }
  % print the table
  \tl_use:N \l_bob_table_tl
  \end{tabular}
 }
\ExplSyntaxOff
\begin{document}

\foo{
  abc;def\\
  ghijkl;m;nopqrs;tu\\
  vz
}

\end{document}

As linhas são separadas por \\e as colunas por ;.

insira a descrição da imagem aqui

informação relacionada