自动生成具有不同列数的表格

自动生成具有不同列数的表格

我正在尝试创建一个命令来生成这种类型的表:

enter image description here

其中列数发生变化(例如\preguntas{4}\preguntas{5})。我的第一个想法是

\newcommand{\preguntas}[1]
  \begin{tabular}{|c|*{#1}{c|}}\hline
    \multido{\i=1+1}{#1}{ & P\i }\\\hline
    Calificación \multido{}{#1}{& }\\\hline
\end{tabular}

但我意识到multido不允许使用&。我该如何创建此命令?

答案1

这个答案几乎完全取自这个答案。如果有人认为距离太近,我会很乐意将其移除。

\documentclass{article}
\usepackage{pgffor,etoolbox}
% based on https://tex.stackexchange.com/a/349378/121799
\newcommand{\preguntas}[1]{
\newcommand*\mytablecontentsUpper{}
\newcommand*\mytablecontentsLower{}
\foreach \X in {1,...,#1}{
  {\xappto\mytablecontentsUpper{ & P\X}
    \xappto\mytablecontentsLower{ & }
  }

}
\begin{tabular}{|c|*{#1}{c|}}\hline
  Calificaci\'on \mytablecontentsUpper \\
  \hline
  \mytablecontentsLower \\
  \hline
\end{tabular}
}

\begin{document}
\preguntas{5}
\end{document}

enter image description here

答案2

使用etoolbox\docsvlist

enter image description here

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
\newcommand{\preguntas}[1]{%
  \begingroup
    \count@\z@
    \def\@tempa{}%
    \def\@ddcomma{}%
    \loop
    \ifnum\count@<#1
      \advance\count@\@ne
      \edef\@tempa{\@tempa\@ddcomma\the\count@}%
      \def\@ddcomma{,}%
    \repeat
    \global\def\@PorGobble@##1{P##1}%
    \def\@tempb{}%
    \def\do##1{\appto\@tempb{&\@PorGobble@{##1}}}%
    \expandafter\docsvlist\expandafter{\@tempa}%
    \begin{tabular}{|c|*{#1}{c|}}\hline
      \@tempb\\\hline
      \global\let\@PorGobble@\@gobble
      Calificación \@tempb\\\hline
    \end{tabular}%
    \global\let\@PorGobble@\@undefined
  \endgroup}
\makeatother

\begin{document}

\preguntas{0}

\preguntas{1}

\preguntas{2}

\preguntas{5}

\end{document}

相关内容