如何在LaTeX中随机生成10张以上的BINGO卡?

如何在LaTeX中随机生成10张以上的BINGO卡?

我使用了与以下代码类似的代码https://tex.stackexchange.com/a/63440/279612,而我只得到了 10 张宾果卡。我想生成超过 10 张。我想创建 80 张宾果卡,每名学生一张。我知道如果我们刷新给定的代码并再次编译它,它将生成另外 10 张宾果卡。但我只是想知道我们是否可以一次生成我们想要的任意数量的宾果卡。提前感谢您的回复。我最近注册了,如果我没有清楚地提出问题,请原谅。

答案1

我没有动力去阅读其他代码,所以我写了一些宾果卡创建代码。

这里的方法使用两个宏:

  • \randbingothingies采用单个逗号分隔的列表作为卡片上可能出现的所有内容的参数。
  • \randbingocards采用可选参数,后跟三个强制参数。可选参数可以包含一个键=值列表,其中包含键widthheighthpad(水平填充),指定每个字段的大小。强制参数是行数、列数和卡片数。

下面创建了 80 张卡片,每张卡片有 4 行 5 列。thingies-list 中的每个 thingy 只在每张卡片上出现一次。

警告:如果最大的内容高于指定的高度,它们将会默默地垂直叠印。

\documentclass{article}

\ExplSyntaxOn
\seq_new:N \l__lpadmini_randbingo_thingies_seq
\seq_new:N \g__lpadmini_randbingo_tmp_seq
\seq_new:N \l__lpadmini_randbingo_line_seq
\int_new:N \l__lpadmini_randbingo_columns_int
\keys_define:nn { lpadmini/randbingo }
  {
     width  .dim_set:N = \l__lpadmini_randbingo_wd_dim
    ,height .dim_set:N = \l__lpadmini_randbingo_ht_dim
    ,hpad   .code:n    = \setlength \tabcolsep { \dim_eval:n {#1} }
  }
\msg_new:nnn { lpadmini/randbingo } { insufficient-thingies }
  { Not~ enough~ thingies~ provided. }
\cs_new_protected:Npn \__lpadmini_randbingo_line:
  {
    \rule
      [ -.5\l__lpadmini_randbingo_ht_dim ]
      { \c_zero_dim }
      { \l__lpadmini_randbingo_ht_dim }
    \seq_clear:N \l__lpadmini_randbingo_line_seq
    \prg_replicate:nn \l__lpadmini_randbingo_columns_int
      {
        \seq_gpop:NN \g__lpadmini_randbingo_tmp_seq \l_tmpa_tl
        \seq_put_right:Nx \l__lpadmini_randbingo_line_seq
          { \exp_not:N \__lpadmini_randbingo_cell:n { \exp_not:V \l_tmpa_tl } }
      }
    \seq_use:Nn \l__lpadmini_randbingo_line_seq { & } \\
    \hline
  }
\cs_new:Npn \__lpadmini_randbingo_cell:n #1
  {
    \hbox_set:Nn \l_tmpa_box {#1}
    \smash
      {
        \raisebox { \dim_eval:n { .5\depth - .5\height } }
          {
            \dim_compare:nNnTF
                { \box_wd:N \l_tmpa_box }
                >
                \l__lpadmini_randbingo_wd_dim
              { \parbox { \l__lpadmini_randbingo_wd_dim } { \centering #1 } }
              { \makebox [ \l__lpadmini_randbingo_wd_dim ] [ c ] { #1 } }
          }
      }
  }
\NewDocumentCommand \randbingothingies { m }
  { \seq_set_from_clist:Nn \l__lpadmini_randbingo_thingies_seq {#1} }
\NewDocumentCommand \randbingocards { O{} m m m }
  {
    \group_begin:
      \keys_set:nn { lpadmini/randbingo } {#1}
      \int_compare:nNnT
          { #2 * #3 }
          >
          { \seq_count:N \l__lpadmini_randbingo_thingies_seq }
        { \msg_error:nn { lpadmini/randbingo } { insufficient-thingies } }
      \int_set:Nn \l__lpadmini_randbingo_columns_int {#3}
      \int_step_inline:nn {#4}
        {
          \seq_set_eq:NN
            \g__lpadmini_randbingo_tmp_seq \l__lpadmini_randbingo_thingies_seq
          \seq_shuffle:N \g__lpadmini_randbingo_tmp_seq
          \noindent
          \begin{tabular}{|*{#3}{c|}}
            \hline
            \prg_replicate:nn {#2} \__lpadmini_randbingo_line:
          \end{tabular}
          \par
          \vfill
        }
    \group_end:
  }
\ExplSyntaxOff

\begin{document}
\randbingothingies{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,Some
extrordinary long field}
\randbingocards[width=1.6cm,height=2cm,hpad=2mm]{4}{5}{80}
\end{document}

输出的第一页:

在此处输入图片描述

相关内容