Automatic amount table columns and column numbers
Here is an expl3
implementation. With the help of array
and its w
column specifier, all columns can be made as wide as the last (with the largest number).
\documentclass{article}
\usepackage{xparse,array}
\ExplSyntaxOn
\NewDocumentCommand{\CountBox}{m}
{
% measure the wider number
\hbox_set:Nn \l_tmpa_box { #1 }
\dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box }
% do as many columns as specified
\begin{tabular}{|*{#1}{w{c}{\l_tmpa_dim}|}}
\hline
% do '<number> &' one less than specified, then add the last number
\int_step_function:nN { #1 - 1 } \__phlemp_countbox_head:n #1 \\
\hline
% generate as many &'s as necessary to fill the second row
\prg_replicate:nn { #1 - 1 } { & } \\
\hline
\end{tabular}
}
% auxiliary function for adding the & after the number
\cs_new_protected:Nn \__phlemp_countbox_head:n { #1 & }
\ExplSyntaxOff
\begin{document}
\CountBox{3} \CountBox{10}
\end{document}
The following uses multido
to generate the column numbering sequence and blank row. A similar approach to egreg's uses array
's w{<align>}{<width>}
to set the column width to the widest element:
\documentclass{article}
\usepackage{multido,array}
\newcounter{boxCount}
\newlength{\boxCountwd}
\makeatletter
\newcommand{\CountBox}[1]{%
\setcounter{boxCount}{0}% Reset boxCount
\settowidth{\boxCountwd}{#1}% Measure widest element
\def\CountBoxSeq{\@gobble}%
\def\CountBoxSeqPhantom{\@gobble}%
\multido{\i=1+1}{#1}{%
\xdef\CountBoxSeq{\CountBoxSeq & \i}%
\xdef\CountBoxSeqPhantom{\CountBoxSeqPhantom &}%
}%
\noindent
\begin{tabular}{ *{#1}{|w{c}{\boxCountwd}} | }
\hline
\CountBoxSeq \\
\hline
\CountBoxSeqPhantom \\
\hline
\end{tabular}%
}
\makeatother
\begin{document}
\CountBox{5}
\end{document}
With \foreach
in TikZ:
\documentclass{article}
\usepackage{tikz}
\usepackage{etoolbox}
\usetikzlibrary{
positioning,
shapes.multipart
}
\tikzset{
mynode/.style={
draw,
rectangle split,
rectangle split parts=2,
text centered,
},
}
\newcommand{\CountBox}[1]{%
\begin{tikzpicture}
\node[mynode] (1) {1};
\ifnumcomp{#1}{=}{1}{}{%
\foreach \mynum
[evaluate=\mynum as \myprev using int(\mynum-1)]
in {2,...,#1}
\node[mynode,xshift=-\pgflinewidth,anchor=west] (\mynum) at (\myprev.east) {\mynum};
}%
\end{tikzpicture}%
}
\begin{document}
\CountBox{1}
\CountBox{3}
\CountBox{6}
\CountBox{2}
\CountBox{4}
\CountBox{7}
\end{document}