Generieren Sie eine dynamische Tabelle basierend auf TikZ

Generieren Sie eine dynamische Tabelle basierend auf TikZ

Ich möchte mit TikZ eine 3*x-Tabelle basierend auf der Anzahl der Fragen erstellen, wie in der folgenden Abbildung gezeigt.

Bildbeschreibung hier eingeben

Ich habe eine Methode definiert und der Code lautet wie folgt:

\newcounter{colnumber}
% Define Chinese numbers
    \newcommand{\chinesenumber}[1]{%
      \ifcase#1\or 一\or 二\or 三\or 四\or 五\or 六\or 七\or 八\or 九\or 十\fi
    }

    % Define the command to create the table
    \newcommand{\createtable}[1]{%
      \setcounter{colnumber}{#1} % Set the number of columns
      % \pgfmathsetmacro{\cellwidth}{\textwidth/\thecolnumber} % Calculate the width of each cell
      \begin{tikzpicture}[every node/.style={font=\fontsize{14}{18}\selectfont}]
        \tikzset{cell/.style={rectangle, draw=black, minimum height=1.5cm, minimum width=2.8cm, align=center, inner sep=0pt}}
        % Draw the column titles
        \node[cell] at (2.8,0) {Num}; % First column title
        \foreach \x in {2,...,\thecolnumber}
        \node[cell] at (\x*2.8,0) {\chinesenumber{\numexpr\x-1}}; % Chinese number column titles
        \node[cell] at (\thecolnumber*2.8+2.8,0) {Total score}; % Last column title
        % Draw the rows
        \node[cell] at (2.8,-1.5) {Score}; % First column second row
        \node[cell] at (2.8,-3) {Teacher}; % First column third row
        \foreach \y in {1,...,3}
        \foreach \x in {2,...,\thecolnumber}
        \node[cell] at (\x*2.8,-\y*1.5) {}; % Fill other cells
        \foreach \y in {2,...,3}
        \node[cell] at (\thecolnumber*2.8+2.8,-\y*1.5) {}; % Fill the last column's other cells
        % Draw the outer frame
        \draw (1.4,0.75) rectangle (\thecolnumber*2.8+4.2,-4.5); % Adjust size based on rows and columns
      \end{tikzpicture}
    }

Wenn ich den Befehl ( \createtable{4}) in main.tex verwende, kann ich die Tabelle wie unten gezeigt generieren.

Bildbeschreibung hier eingeben

Es scheint jedoch zwei zusätzliche Zeilen zu geben. Darüber hinaus ragt die Tabelle über die Seite hinaus, wenn zu viele Fragen vorhanden sind. Wie kann ich das beheben?

Antwort1

Ein Makro \tblrbodywird mit initialisiert \tl_new:N \tblrbody.

Der Inhalt wird mit gesammelt \tl_build_put_right:Nn. Dieser Vorgang wird mit gestartet \tl_build_begin:Nund mit beendet \tl_build_end:N. Danach expand=\tblrbodywird die Option angegeben, tblrin welcher Umgebung \tblrbodyplatziert wird.

Die Anzahl der Zeilen richtet sich nach der Zahl nach \int_step_inline:nn.

Bildbeschreibung hier eingeben

\documentclass[border=6pt]{standalone}
\usepackage{tabularray}
\begin{document}
\ExplSyntaxOn
\tl_new:N \tblrbody
\tl_build_begin:N \tblrbody
\int_step_inline:nn { 4 }
  {
    \tl_build_put_right:Nn \tblrbody { #1 & & \\ }
  }
\tl_build_end:N \tblrbody
\ExplSyntaxOff
\begin{tblr}[expand=\tblrbody]{
  hlines,
  vlines
}
Number & Score & Teacher\\
\tblrbody
Total score & & \\
\end{tblr}
\end{document}

verwandte Informationen