Gibt es eine Möglichkeit, dieselben Formen effizient an verschiedenen Positionen zu zeichnen, beispielsweise \foreach?

Gibt es eine Möglichkeit, dieselben Formen effizient an verschiedenen Positionen zu zeichnen, beispielsweise \foreach?

Ich weiß, dass es eine ähnliche Frage gibt, aber ich glaube nicht, dass sie die beste Lösung bietet.

Hier ist mein Code:

\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}}kann durch alles ersetzt werden, was Sie möchten. Meine Frage ist, wie ich den zweiten Teil meines Codes durch prägnanteren Code ersetzen kann. Da ich jedes Mal dasselbe zeichne, reichen 10 davon vielleicht aus, aber was ist, wenn es 100 davon sind? Ich nehme also an, dass es einen bequemeren Weg geben muss. Ich habe im Handbuch nachgesehen und gesehen , aber es scheint, dass ich nur einzelne Koordinaten wie und \foreachdurchlaufen kann . Hat jemand eine Idee dazu? Danke.\x\y

Antwort1

Nachdem Sie die Koordinaten benannt haben, führen Sie einfach eine Schleife über deren Namen aus:

\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}

Ich habe keine Ahnung, woher \crydas kommt, also habe ich Astattdessen einfach ein verwendet.

Bildbeschreibung hier eingeben

Sie können auch auf die Definition der coordinates verzichten und zwei verschachtelte \foreachSchleifen verwenden, um die Knoten zu erstellen. Im folgenden Code gebe ich ihnen auch eindeutige Namen, falls Sie z. B. Pfeile zwischen einigen von ihnen zeichnen müssen.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen