Ich möchte mit TikZ eine 3*x-Tabelle basierend auf der Anzahl der Fragen erstellen, wie in der folgenden Abbildung gezeigt.
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.
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 \tblrbody
wird mit initialisiert \tl_new:N \tblrbody
.
Der Inhalt wird mit gesammelt \tl_build_put_right:Nn
. Dieser Vorgang wird mit gestartet \tl_build_begin:N
und mit beendet \tl_build_end:N
. Danach expand=\tblrbody
wird die Option angegeben, tblr
in welcher Umgebung \tblrbody
platziert wird.
Die Anzahl der Zeilen richtet sich nach der Zahl nach \int_step_inline:nn
.
\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}