TikZ 中的教室座位表?

TikZ 中的教室座位表?

我想根据学生的编号列表制作一个随机教室座位表。我还想指定每排座位数(因为我的教室里座位数各不相同)和每张桌子的座位数(在我的情况下是 2 个,否则是 1 个)。

我的教室有 22 个座位,具体配置如下(其中 S = 一个座位):

SSSSSSSS ← 一排 8 个座位
 SSSSSSSS ← 一排 8 个座位
    SSSSSS ← 排 6 个座位
  教室前面

我将如何用 TikZ 解决这个问题,我只需要向它传递一个从房间前面开始每排座位数的数组(在我的具体情况下为 {6,8,8})、学生名单 {“Albert”、“Bob”、“Chris”、…,“Zach”},以及每张桌子的座位数(在我的具体情况下,为 2,否则为 1)?

谢谢

答案1

这里有两个版本,第一个版本在某些地方看起来不太友好,但大多数参数(桌子和座位的数量)都是从子列表中自动得出的。

它也不会轻易推广到其他表格布局,并且如果改变尺寸,可能需要进行一些“调整”。

\documentclass[tikz,border=5]{standalone}
\def\countitemsinmacro#1{\foreach \i [count=\itemcount, remember=\itemcount] in #1{}}
\tikzset{%
  every seat/.style={
    shape=rectangle,
    draw,
    font=\footnotesize,
    minimum width=1.5cm,
    minimum height=1cm,
  },
}
\begin{document}
\begin{tikzpicture}
\foreach \childrenrow [count=\rownumber] 
  in {%
   {Alphie,{Bert,Carl},{Dennis,Eon},{Frank,George},{Harry}},%
   {{Alice,Beth},{Carrie,Doris},{Ellie,Felicity},{Gina,Hetty}},%
   {{Zoe,Ziyad},{Yafa,Yaden},{Xana,Xander}}%
  }{
    \countitemsinmacro{\childrenrow}%
    \let\tabletotal=\itemcount%
    \foreach \children [count=\tablenumber] in \childrenrow {
      \countitemsinmacro{\children}%
      \let\seatcount=\itemcount%
      \foreach \child [count=\seatnumber] in \children{
        \node [every seat/.try, seat \rownumber-\tablenumber-\seatnumber/.try]
          at (-\tabletotal/2*4+\tablenumber*4+\seatnumber*1.5-\seatcount/2*1.5,-\rownumber*2) (seat-\rownumber-\tablenumber-\seatnumber) {\child};
}}}
\end{tikzpicture} 
\end{document}

在此处输入图片描述

其次,需要指定更多内容(即每排的桌子数量和每张桌子的座位数量),但儿童姓名列表是自动随机的。

\documentclass[tikz,border=5]{standalone}
\makeatletter
\def\globalnamelet#1#2{%
  \def\marshal{\expandafter\global\expandafter\let\csname#1\endcsname}%
  \expandafter\marshal\csname#2\endcsname%
}
\def\setchildnames#1{\foreach\childname[count=\i@,remember=\i@]in{#1}{%
  \globalnamelet{childlist@\i@}{childname}%
}\let\childlistcount=\i@}

\def\shufflechildnames#1{%
\foreach\i@ in{1,...,#1}{%
  \foreach\j@ in{1,...,\childlistcount}{%
    \pgfutil@namelet{tmpchild}{childlist@\j@}%
  \pgfmathrandominteger\k@{1}{\childlistcount}%
  \globalnamelet{childlist@\j@}{childlist@\k@}%
  \globalnamelet{childlist@\k@}{tmpchild}%
}}}

\def\getchildname#1{\csname childlist@#1\endcsname}

\begin{document}
\setchildnames{Alfie,Ben,Carol,Dalia,Ellie,Felicty,George,%
Hetty,Ian,Jamil,Katrin,Luke,Madia,Niri,Ollie,Peta,%
Qaniah,Rohana,Samita,Thomas,Ute,Vera}
\shufflechildnames{10}
\begin{tikzpicture}
\def\c{0}
\foreach \tables/\tableseats [count=\rowcount, remember=\c] in
%
{5/{1,2,2,2,1},4/{2,2,2,2},3/{2,2,2}}
%
  \foreach \seats [count=\tablecount, remember=\c] in \tableseats
    \foreach \seat [evaluate={\c=int(\c+1);}, remember=\c] in {1,...,\seats}
    \node [draw, minimum width=1.5cm, minimum height=1cm, anchor=base] 
      at (\tablecount*4-\tables/2*4+\seat*1.5-\seats/2*1.5,-\rowcount*2) 
       {\strut\getchildname{\c}}; 
\end{tikzpicture} 
\end{document}

在此处输入图片描述

相关内容