![有什麼方法可以有效地在不同位置繪製相同的形狀,例如 \foreach?](https://rvso.com/image/327808/%E6%9C%89%E4%BB%80%E9%BA%BC%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E6%9C%89%E6%95%88%E5%9C%B0%E5%9C%A8%E4%B8%8D%E5%90%8C%E4%BD%8D%E7%BD%AE%E7%B9%AA%E8%A3%BD%E7%9B%B8%E5%90%8C%E7%9A%84%E5%BD%A2%E7%8B%80%EF%BC%8C%E4%BE%8B%E5%A6%82%20%5Cforeach%EF%BC%9F.png)
我知道有一個類似的問題,但我不認為它給出了最好的解決方案。
這是我的程式碼:
\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
,所以我只是用了 anA
代替。
您也可以放棄定義coordinate
s,並使用兩個巢狀\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}