使用 TikZ 自动生成表格矩阵

使用 TikZ 自动生成表格矩阵

我正在研究这个代码

\documentclass[a4paper]{standalone}

\usepackage{amssymb,tikz}
\usetikzlibrary{positioning, calc}

\begin{document}
\newcounter{compteur}
\setcounter{compteur}{1}
\newcounter{lettres}
    \setcounter{lettres}{1}
    \begin{tikzpicture}
\node[matrix, inner sep=0](truc){
    \node[anchor=west, inner sep=0](question){Question~\thecompteur};
    \addtocounter{compteur}{1}
    \node[right=of question](carre\thelettres){$\square$};


    \node[above =\baselineskip of carre\thelettres]{\Alph{lettres}};
    \stepcounter{lettres}
    \foreach\x [evaluate = \x as \y using int(\x+1)] in {1,...,4}{
        \node[right=of carre\x](carre\y){$\square$};

        \node[above =\baselineskip of carre\thelettres]{\Alph{lettres}};
        \stepcounter{lettres}
        }

    \foreach\a in{2,...,15}{
        \node[anchor=east, below=\baselineskip of question, inner sep=0](question){Question~\thecompteur};
        \foreach\b in {1,...,5}{
            \path let \p1=(question), \p2=(carre\b) in node at (\x2,\y1){$\square$};
            }
    \addtocounter{compteur}{1}
    }
    \\
};
    \end{tikzpicture}
\end{document}

编译后为:

在此处输入图片描述 我的问题是,我想要将几个这种类型的表格并列,就像另一个 6 行/2 列矩阵的一些元素一样,其中第 1 行/第 2 列的表格元素的第一个问题标记为“问题 16”,依此类推。

简单的代码能解决这个问题吗?

答案1

重复使用样本的第一步始终是创建包含该样本的宏。 就您而言,这些宏需要完成三件事:

  • 可调整第一个问题的数量(以防您不想在每种情况下继续计数)
  • 问题数量不定
  • 盒子数量可变

所以我做了以下事情:

\documentclass{standalone}

\usepackage{amssymb,tikz}
\usetikzlibrary{positioning}

\newcounter{question}
\setcounter{question}{1}
\newcounter{letter}

\tikzstyle{my question} = []
\tikzstyle{my box} = []
\tikzstyle{my heading} = []

% usage: \createtable[first question number]{number of questions}{number of letters}
\newcommand{\createtable}[3][\value{question}]{
  \setcounter{question}{#1} % do nothing by default
  \setcounter{letter}{1}
  \begin{tikzpicture}
  \node[my heading] (tmp1) {\Alph{letter}};
  \ifnum#3>1
  \foreach \current [evaluate = \current as \last using int(\current-1)] in {2,...,#3} {
    \stepcounter{letter}
    \node[my box, right=of tmp\last] (tmp\current) {\Alph{letter}};
  }
  \fi
%  \coordinate (upper right) at (tmp#3.north east);
  \foreach \y in {1,...,#2} {
    \node[my box, below=\baselineskip of tmp1] (tmp1) {$ \square $};
    \node[my question, left= of tmp1] (q\y) {Question~\arabic{question}};
    \stepcounter{question}
    \ifnum#3>1
    \foreach \x in {2,...,#3} {
      \node[my box, below=\baselineskip of tmp\x] (tmp\x) {$ \square $};
    }
    \fi
  }
%  \coordinate (lower left) at (q#2.south west);
%  \useasboundingbox (upper right) rectangle (lower left);
  \end{tikzpicture}
}

\begin{document}
  \createtable{5}{2}
  \createtable{2}{3}
\end{document}

这导致:

你需要这个matrix做什么?据我所知,不可能把这个放在&里面\foreach,所以在我看来,你根本没有从中得到任何好处。如果你需要它作为边界框或类似的东西,请查看上面代码中的注释。

相关内容