在 TikZ 中列出并绘制区间的分区

在 TikZ 中列出并绘制区间的分区

如何编写一个文件(程序)来绘制(可能在 TikZ 中)区间 [0, 18] 的所有分区,其中 6 个区间大小为 1,6 个区间大小为 2?

观察发现,这些分区与两个数列(仅 1 和 2)组成的数字是一一对应的,其中最小的数字是:

111111222222

最后一个

222222111111

其中还有不少。

答案1

在此处输入图片描述

您可以进行简单的双重递归来生成 1 和 2 的列表,然后遍历该列表中的每个项目,以绘制相隔 1 或 2 个单位的线来显示分区

\documentclass{article}

\def\z#1#2#3{%
\ifnum#2>0
\edef\tmp{\noexpand\z{#11}{\the\numexpr#2-1\relax}{#3}}\tmp\par
\fi
\ifnum#3>0
\edef\tmp{\noexpand\z{#12}{#2}{\the\numexpr#3-1\relax}}\tmp\par
\else
\ifnum#2=0
#1 \quad \p{#1}\par
\fi
\fi
}
\newcount\zcount
\def\p#1{%
\begin{picture}(180,10)
\global\zcount=0
\multiput(0,-5)(10,0){19}{\makebox(0,0){\tiny\the\zcount}\global\advance\zcount1 }
\global\zcount=0
\put(0,0){\line(0,1){10}}
\zrules#10
\end{picture}}

\def\zrules#1{%
\ifnum#1=0
\else
\global\advance\zcount\numexpr10*#1\relax
\put(\zcount,0){\line(0,1){10}}%
\expandafter\zrules
\fi}

\parskip=20pt
\begin{document}

\z{}66

\end{document}

相关内容