Есть ли способ эффективно рисовать одни и те же фигуры в разных позициях, например \foreach?

Есть ли способ эффективно рисовать одни и те же фигуры в разных позициях, например \foreach?

Я знаю, что есть похожий вопрос, но не думаю, что это лучшее решение.

Вот мой код:

\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}}можно заменить чем угодно. Мой вопрос в том, как я могу использовать более лаконичный код для замены второй части моего кода. Поскольку каждый раз, когда я рисую одно и то же, 10 из них могут быть в порядке, но что, если их 100, поэтому я предположил, что должен быть более удобный способ. Я посмотрел руководство, я увидел \foreach, но, похоже, я могу только перебирать отдельные координаты, такие как \xи \y. У кого-нибудь есть какие-нибудь идеи по этому поводу? Спасибо.

решение1

После того, как вы дали координатам имена, просто выполните цикл по их именам:

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

Я понятия не имею, откуда \cryэто взялось, поэтому я просто использовал Aвместо этого.

введите описание изображения здесь

Вы также можете отказаться от определения coordinates и использовать два вложенных \foreachцикла для создания узлов. В коде ниже я также даю им уникальные имена, если вам нужно нарисовать, например, стрелки между некоторыми из них.

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

введите описание изображения здесь

Связанный контент