Existe alguma maneira de desenhar as mesmas formas em posições diferentes de forma eficiente, por exemplo \foreach?

Existe alguma maneira de desenhar as mesmas formas em posições diferentes de forma eficiente, por exemplo \foreach?

Sei que existe uma pergunta semelhante, mas não creio que tenha dado a melhor solução.

Aqui está o meu código:

\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm]
\clip(-0.5,-1) rectangle (5.5,3.5);
% defining coordinates
\coordinate (1)   at (0,0);
\coordinate (2)   at (0,3);
\coordinate (3)   at (3,3);
\coordinate (4)   at (3,0);
\coordinate (1_2) at ($(1)!0.5!(2)$);
\coordinate (2_3) at ($(2)!0.5!(3)$);
\coordinate (3_4) at ($(3)!0.5!(4)$);
\coordinate (4_1) at ($(4)!0.5!(1)$);
\coordinate (1_3) at ($(1)!0.5!(3)$);
%draw \cry{4} at different positions
\draw[color=black] (1) node {\large \cry{4}};
\draw[color=black] (2) node {\large \cry{4}};
\draw[color=black] (3) node {\large \cry{4}};
\draw[color=black] (4) node {\large \cry{4}};
\draw[color=black] (1_3) node {\large \cry{4}};
\draw[color=black] (1_2) node {\large \cry{4}};
\draw[color=black] (2_3) node {\large \cry{4}};
\draw[color=black] (3_4) node {\large \cry{4}};
\draw[color=black] (4_1) node {\large \cry{4}};
\end{tikzpicture}

{\large \cry{4}}pode ser substituído por qualquer coisa que você quiser. Minha pergunta é como posso usar um código mais conciso para substituir a segunda parte do meu código. Como toda vez que desenho a mesma coisa, 10 deles podem estar bem, mas e se houver 100 deles, então imaginei que deveria haver uma maneira mais conveniente. Procurei no manual, vi \foreach, mas parece que só consigo percorrer coordenadas únicas como \xe \y. Alguém tem alguma idéia sobre isso? Obrigado.

Responder1

Depois de nomear as coordenadas, basta fazer um loop sobre seus nomes:

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,calc}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm]
\clip(-0.5,-1) rectangle (5.5,3.5);
% defining coordinates
\coordinate (1)   at (0,0);
\coordinate (2)   at (0,3);
\coordinate (3)   at (3,3);
\coordinate (4)   at (3,0);
\coordinate (1_2) at ($(1)!0.5!(2)$);
\coordinate (2_3) at ($(2)!0.5!(3)$);
\coordinate (3_4) at ($(3)!0.5!(4)$);
\coordinate (4_1) at ($(4)!0.5!(1)$);
\coordinate (1_3) at ($(1)!0.5!(3)$);
%draw \cry{4} at different positions
\foreach \coordname in {1,2,3,4,1_2,2_3,3_4,4_1,1_3}
  \node [draw,font=\large] at (\coordname) {A};
\end{tikzpicture}
\end{document}

Não tenho ideia de onde \cryvem, então usei um A.

insira a descrição da imagem aqui

Você também pode deixar de definir os coordinates e usar dois \foreachloops aninhados para criar os nós. No código abaixo eu também dou a eles nomes exclusivos, se você precisar desenhar, por exemplo, setas entre alguns deles.

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach [count=\i] \x in {0,1.5,3}{
  \foreach [count=\j] \y in {0,1.5,3} {
     \node [draw,font=\large] (n-\i-\j) at (\x,\y) {A};
  }
}

% example of drawing an arrow from one node to another
\draw [red,-latex] (n-1-1) to[out=20,in=200] (n-2-3);
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

informação relacionada