
\NewDocumentCommand\foo{>{\SplitList{;}}m}
{
\begin{table}
\begin{tabular}{ \ProcessList{#1} c}
\ProcessList{#1}{\additem}
\end{tabular}
\end{table}}
}
\newcommand\additem[1]{#1 &}
목록에서 최대한 많은 인수를 가져와 각 항목이 열인 테이블에 출력하는 동적 테이블을 만들려고 합니다. 열 수와 삽입되는 & 수에 문제가 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.
내 문제는 테이블의 열 수를 예측하는 것입니다. 그리고 예방하는 것
! Package array Error: Illegal pream-token (\ProcessList):
c'를 사용했습니다.`
또는 프로세스 목록을 제거하면
! Extra alignment tab has been changed to \cr.
답변1
이 명령이 무엇을 하는지는 불분명합니다. 한 행의 테이블 형식은 한 줄일 뿐이고 tabular
전혀 필요하지 않기 때문입니다. 다음과 같이 간단히 말하면 필요한 동작을 얻을 수 있습니다.
\NewDocumentCommand{\foo}{>{\SplitList{;}}m}{%
\begin{table}
\centering
\ProcessList{#1}{\additem}
\end{table}
}
\newcommand{\additem}[1]{\mbox{\hspace{\tabcolsep}#1\hspace{\tabcolsep}}}
출력이 정확히 동일한지 확인하기 위해 동일한 테이블을 명시적으로 조판한 완전한 예:
\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}
보다 유용한 매크로를 사용하려면 다음 방법을 사용하세요.
\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}
\\
행은 으로 , 열은 로 구분됩니다 ;
.