TikZ를 기반으로 동적 테이블 생성

TikZ를 기반으로 동적 테이블 생성

다음 그림과 같이 TikZ를 사용하여 질문 수를 기반으로 3*x 테이블을 만들려고 합니다.

여기에 이미지 설명을 입력하세요.

메소드를 정의했는데 코드는 다음과 같습니다.

\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}
    }

\createtable{4}main.tex에서 명령어( )를 사용하면 아래와 같은 테이블을 생성할 수 있다.

여기에 이미지 설명을 입력하세요.

그러나 두 개의 추가 행이 있는 것 같습니다. 또한 질문이 너무 많으면 표가 페이지 밖으로 확장됩니다. 이 문제를 어떻게 해결할 수 있나요?

답변1

매크로는 \tblrbody으로 초기화됩니다 \tl_new:N \tblrbody.

콘텐츠는 으로 수집됩니다 \tl_build_put_right:Nn. 이 프로세스는 로 시작되고 \tl_build_begin:N으로 끝납니다 \tl_build_end:N. 이후에는 배치된 환경 에 옵션이 expand=\tblrbody부여됩니다 .tblr\tblrbody

행 수는 뒤에 오는 숫자에 따라 달라집니다 \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}

관련 정보