带有方形单元格的表格

带有方形单元格的表格

一位朋友正在尝试制作一些自动生成的宾果游戏板,而 LaTeX 似乎是个显而易见的选择 - 没什么特别的,只是一个 5x5 的表格,带有方形单元格、居中文本和必要时的换行。经过一番搜索,我对设置单元格的垂直高度有点不知所措。我该怎么做?

考虑到要放入方格的术语的长度(例如“语言病理学家”),我认为除了一整张信纸之外,没有其他选择。(它们将被打印出来,特殊纸张会很麻烦,而且一张纸上放两张也太小了。)除此之外,实际上没有任何硬性格式要求 - 清晰易读的大小,只要你有,也可以填满整个页面。无论如何,我相信我可以调整细节。

答案1

随机生成节点:

pgf这是一个使用算法内置的随机数生成器随机生成节点的版本:

  • B包含数字 1 - 15
  • I包含数字 16 - 30
  • N包含数字 31 - 45
  • G包含数字 46 - 60
  • O包含数字 61 - 75

在此处输入图片描述

进一步增强:

  • 不确定一列中是否允许重复的数字,如果不允许,则可以增强为循环,如果生成了以前使用的数字
  • 添加精美的边框并标记列:B,,,,,INGO

代码:

\documentclass{article}
\usepackage{xstring}
\usepackage{tikz}
\usetikzlibrary{calc}

%    Column B contains numbers 1 - 15
%    Column I contains numbers 16 - 30
%    Column N contains numbers 31 - 45
%    Column G contains numbers 46 - 60
%    Column O contains numbers 61 - 75

\def\NumOfColumns{5}%
\def\Sequence{1/A/1/15, 2/B/16/30, 3/C/31/45, 4/D/46/60, 5/E/61/71}%

\newcommand{\Size}{2.5cm}
\tikzset{Square/.style={
    inner sep=0pt,
    text width=\Size, 
    minimum size=\Size,
    draw=black,
    fill=yellow!20,
    align=center,
    }
}

\begin{document}
\begin{tikzpicture}[draw=black, ultra thick, x=\Size,y=\Size]
    \foreach \row/\rowLetter/\MinNumber/\MaxNumber in \Sequence{%
        \foreach \col/\colLetter/\MinNumber/\MaxNumber in \Sequence {%
            \pgfmathtruncatemacro{\value}{\col+\NumOfColumns*(\row-1)}
            \def\NodeText{\pgfmathparse{random(\MinNumber,\MaxNumber)}\pgfmathresult}
            \pgfmathsetmacro{\ColRowProduce}{\col*\row}
            \IfEq{\ColRowProduce}{9}{% If is center square
                \node [Square] at ($(\col,-\row)-(0.5,0.5)$) {\Huge Free Space};
            }{
                \node [Square] at ($(\col,-\row)-(0.5,0.5)$) {\Huge \NodeText};
            }
        }
    }
\end{tikzpicture}
\end{document}

手动指定节点:

我不确定您想如何设置要指定的每个单元格的内容,因此我提供了\Node<col><row>您可以填写的单独宏。如果有一个选择这些的算法,那么它也可以自动化。

以下使用 TikZ 节点。您可以更改的设置\Size来指定正方形边的长度。

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{xstring}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\Size}{2.5cm}% Adjust size of square as desired

\def\NumOfColumns{5}%
\def\Sequence{1/A, 2/B, 3/C, 4/D, 5/E}% This needs to match \NumOfColumns 

\tikzset{Square/.style={
    inner sep=0pt,
    text width=\Size, 
    minimum size=\Size,
    draw=black,
    fill=yellow!20,
    align=center
    }
}

% Define the contents of the cells here.
\newcommand{\NodeAA}{Node $(1,1)$}%
\newcommand{\NodeAB}{Node $(1,2)$}%
\newcommand{\NodeAC}{Node $(1,3)$}%
\newcommand{\NodeAD}{Node $(1,4)$}%
\newcommand{\NodeAE}{Node $(1,5)$}%

\newcommand{\NodeBA}{Node $(2,1)$}%
\newcommand{\NodeBB}{Node $(2,2)$}%
\newcommand{\NodeBC}{Node $(2,3)$}%
\newcommand{\NodeBD}{Node $(2,4)$}%
\newcommand{\NodeBE}{Node $(2,5)$}%

\newcommand{\NodeCA}{Node $(3,1)$}%
\newcommand{\NodeCB}{Node $(3,2)$}%
\newcommand{\NodeCC}{Node $(3,3)$}%
\newcommand{\NodeCD}{Node $(3,4)$}%
\newcommand{\NodeCE}{Node $(3,5)$}%

\newcommand{\NodeDA}{Node $(4,1)$}%
\newcommand{\NodeDB}{Node $(5,2)$}%
\newcommand{\NodeDC}{Node $(5,3)$}%
\newcommand{\NodeDD}{Node $(5,4)$}%
\newcommand{\NodeDE}{Node $(5,5)$}%

\newcommand{\NodeEA}{Node $(5,1)$}%
\newcommand{\NodeEB}{Node $(5,2)$}%
\newcommand{\NodeEC}{Node $(5,3)$}%
\newcommand{\NodeED}{Node $(5,4)$}%
\newcommand{\NodeEE}{Node $(5,5)$}%

\begin{document}
\begin{tikzpicture}[draw=black, ultra thick, x=\Size,y=\Size]
    \foreach \col/\colLetter in \Sequence {%
        \foreach \row/\rowLetter in \Sequence{%
            \pgfmathtruncatemacro{\value}{\col+\NumOfColumns*(\row-1)}
            \def\NodeText{\expandafter\csname Node\rowLetter\colLetter\endcsname}
            \node [Square] at ($(\col,-\row)-(0.5,0.5)$) {\NodeText};
        }
    }
\end{tikzpicture}
\end{document}

答案2

\documentclass[border=20pt]{standalone}
\usepackage[thinlines]{easytable}
\begin{document}

\huge
\begin{TAB}(e,2cm,2cm){|c:c:c:c:c|}{|c:c:c:c:c|}
1 & 2 & 3 & 4 & 5 \\
6 & 7 &   &   &   \\
  &   &   &   &   \\
  &   &   &   &   \\
  &   &   &   &     
\end{TAB}
\end{document}

在此处输入图片描述

答案3

以下非常好的文章来自威尔·罗伯逊发表在PracTeX 期刊描述如何使用基本数组技术创建方形单元格环境。我没有包含任何用于输入单元格的特定代码;根据单元格的生成方式,我可能倾向于使用该datatool包并从 CSV 文件中读取板。这很容易适应这种表格样式。

方形细胞:阵列烹饪课

以下是一个例子:

% This code written by Will Robertson and published in PracTeX Journal 2005-2
% "Square cells: an array cooking lesson"
% Modified for line wrapping

\documentclass{article}
\usepackage{array}
\usepackage{calc}

\newlength\celldim
\newlength\fontheight
\newlength\extraheight
\newcounter{sqcolumns}

\newcolumntype{S}{
 @{}
 >{\centering \rule[-0.5\extraheight]{0pt}{\fontheight + \extraheight}%
 \begin{minipage}{\celldim}\centering}
 p{\celldim}
 <{\end{minipage}} 
 @{} }

\newcolumntype{Z}{ @{} >{\centering} p{\celldim} @{} }

\newenvironment{squarecells}[1]
  {\setlength\celldim{4.5em}%
   \settoheight\fontheight{A}%
   \setlength\extraheight{\celldim - \fontheight}%
   \setcounter{sqcolumns}{#1 - 1}%
   \begin{tabular}{|S|*{\value{sqcolumns}}{Z|}}\hline}
% squarecells tabular goes here
  {\end{tabular}}

\newcommand\nl{\tabularnewline\hline}

\begin{document}
  \Huge
  \begin{squarecells}{4}
    This is a long line & 3  & 2  & 13 \nl
    5  & 10 & 11 & 8  \nl
    9  & 6  & 7  & 12 \nl
    4  & 15 & 14 & 1  \nl
  \end{squarecells}
\end{document}

代码输出

答案4

使用tabstackengine根据最宽的列编写具有等间距列的表格\fboxsep,我们有以下 MWE。您可以使用、\fboxrule\mystrutwidth和的定义来控制框的大小和规则厚度\mystrutdepth

\documentclass{article}
\usepackage{tabstackengine}
\usepackage{fixltx2e}
% YOU CONTROL THE NEXT FOUR LINES
\fboxsep=3pt
\fboxrule=.8pt
\def\mystrutwidth{2.5\baselineskip}
\def\mystrutdepth{1\baselineskip}
%
\def\mystrut{\rule[-\mystrutdepth]{0ex}{\mystrutwidth}}
\newcommand\bngo[1]{\kern-\fboxrule\fbox{\mystrut\makebox[\mystrutwidth]{#1}}}%
\setstackgap{L}{\mystrutwidth+2\fboxsep+\fboxrule}
\begin{document}
\tabbedLongstack{
\bngo{8} & \bngo{29} & \bngo{45} & \bngo{54} & \bngo{68}\\
\bngo{9} & \bngo{19} & \bngo{40} & \bngo{49} & \bngo{67}\\
\bngo{15} & \bngo{24} & \stackanchor{Free}{Space} & \bngo{46} & \bngo{71}\\
\bngo{7} & \bngo{26} & \bngo{32} & \bngo{60} & \bngo{64}\\
\bngo{14} & \bngo{28} & \bngo{37} & \bngo{46} & \bngo{66}
}
\end{document}

在此处输入图片描述

相关内容