当内部范围由外部范围给出时,如何使用嵌套的 \foreach?

当内部范围由外部范围给出时,如何使用嵌套的 \foreach?
\documentclass[pstricks,border=\dimexpr355pt/113\relax,12pt]{standalone}

\def\obj{%
    \pscircle[linecolor=yellow](.5,.5){12pt}
    \pscircle[linecolor=cyan](.5,.5){11pt}}
    
\begin{document}
\foreach \k in {%
    {0/0},
    {0/0,2/3},
    {0/0,2/3,4/4}
    }{%
\begin{pspicture}(8,8)
    \psframe[dimen=i,linewidth=\dimexpr355pt/113\relax,linecolor=brown](8,8)
    \multips(0,0)(0,2){4}{%
        \multips(0,0)(2,0){4}{%
            \multips(0,0)(1,1){2}{\psframe*(1,1)}}}
    \foreach \i/\j in \k {\rput(\i,\j){\obj}}
\end{pspicture}}
\end{document}

附加问题:

有什么技巧可以简化以下内容

{0/0},
{0/0,2/3},
{0/0,2/3,4/4}

{0/0,2/3,4/4}外循环仍然有效,就像它仍然在工作一样

{0/0},
{0/0,2/3},
{0/0,2/3,4/4}

答案1

主要问题是将\foreach每个循环埋在一个组内。

\documentclass[pstricks,border=3,12pt]{standalone}

\newcommand\obj{%
  \pscircle[linecolor=yellow](.5,.5){12pt}%
  \pscircle[linecolor=cyan](.5,.5){11pt}%
}

\begin{document}

\let\CUMULATIVE\undefined
\foreach \k in {0/0,2/3,4/4}{
  \xdef\CUMULATIVE{\ifdefined\CUMULATIVE \CUMULATIVE,\fi \k}%
  \begin{pspicture}(8,8)
    \psframe[dimen=i,linewidth=3pt,linecolor=brown](8,8)
    \multips(0,0)(0,2){4}{%
      \multips(0,0)(2,0){4}{%
        \multips(0,0)(1,1){2}{\psframe*(1,1)}%
      }%
    }
    \foreach \i/\j in \CUMULATIVE {\rput(\i,\j){\obj}}
  \end{pspicture}%
}
\end{document}

我使用了一个不常见的命令名只是为了确保没有重要的内容被重新定义。

答案2

我只是随便说说,我目前手边没有安装 LaTeX,但也许可以安装类似的东西

\newcounter{foo}
\foreach \k in {1,2,3}{
  \setcounter{foo}{0}
  \foreach \j in {{(0,0)},{(2,3)},{(4,4)}}{
     \stepcounter{foo}
     \ifnum\value{foo}<\k
        do stuff with \j
     \fi
  }
}

我无法保证不会出现一次错误,也无法保证用括号括起来的 (a,b) 是否有效(但它应该有效,而且我很确定我的数学是正确的。你也可以这样做

\ifnum\value{foo}=\k
   \breakforeach
\fi
do stuff with \j

这会稍微更有效率,但对我来说感觉有点像 20 世纪 80 年代的代码。

答案3

\documentclass[pstricks,border=\dimexpr355pt/113\relax,12pt]{standalone}
\usepackage{pst-tools,multido}
\def\obj{%
    \pscircle[linecolor=yellow](.5,.5){12pt}
    \pscircle[linecolor=cyan](.5,.5){11pt}}    

\psRegisterList{No}{{0,0},{2,3},{4,4}}

\begin{document}
\multido{\iA=1+1}{3}{%
  \begin{pspicture}(8,8)
    \psframe[dimen=i,linewidth=\dimexpr355pt/113\relax,linecolor=brown](8,8)
    \multips(0,0)(0,2){4}{%
        \multips(0,0)(2,0){4}{%
            \multips(0,0)(1,1){2}{\psframe*(1,1)}}}
  \multido{\iB=1+1}{\iA}{\rput(\No{\iB}){\obj}}
\end{pspicture}}

\end{document}

相关内容