差不多就是小学生找规律问题((^_^))
07 -> (7,0)
23 -> (3,2)
152 -> (2,5)使用取模和向下取整的函数即可,规律是显然的。
第一步:
先把「10-99」缩为一重循环;再把「100-199」也缩为一重循环即可
\documentclass[tikz,border=2pt]{standalone}
\usepackage{ctex}
\usepackage{circledtext}
\begin{document}
\tikz{
\foreach \x in {0,...,9} {
\node[scale=2.75] at (\x,0) {\circledtext{\x}};
}
\foreach \x in {10,...,99}{%
\pgfmathtruncatemacro{\xx}{mod(\x,10)}
\pgfmathtruncatemacro{\yy}{floor(\x/10)}
\node[scale=2.75] at (\xx,\yy) {\circledtext{\scalebox{1.25}[2]{\x}}};
}%
}
\tikz{
\foreach \x in {100,...,199}{%
\pgfmathtruncatemacro{\xx}{mod(\x-100,10)}
\pgfmathtruncatemacro{\yy}{floor((\x-100)/10)}
\node[scale=2.75] at (\xx,\yy) {\circledtext{\scalebox{1}[2]{\x}}};
}%
}
\end{document}第二步:
根据数字的位数使用一个分支判断。这样可以把三个循环再缩为一个。
这里我不希望把0-199的数字拆分为两个tikzpicture,所以我稍微修改了一下逻辑和目标效果。
\documentclass[tikz,border=2pt]{standalone}
\usepackage{ctex}
\usepackage{circledtext}
\begin{document}
\tikz{
\foreach \x in {0,...,299} {
\pgfmathtruncatemacro{\xx}{mod(\x,10)}
\pgfmathtruncatemacro{\yy}{floor(\x/10)}
\ifnum\yy<1\relax
\def\content{\x}
\else%
\ifnum\yy<10\relax
\def\content{\scalebox{1.25}[2]{\x}}
\else
\def\content{\scalebox{1}[2]{\x}}
\fi
\fi
\node[scale=2.75] at (\xx,\yy) {\circledtext{\content}};
}%
}
\end{document}

























问 如何用foreach简化这个循环?