
我現在剛學習 TikZ,正在嘗試一些控制結構。有人可以幫我解決下面的程式碼嗎?
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw[fill=black] (0,0)circle(0.05) node[above=1.5]{You};
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
{
\filldraw[draw=\y] (0,0)--(\x,-1);
\draw[fill=black] (-\x,-1)circle(0.05);
}
\end{tikzpicture}
\end{center}
\end{document}
我知道問題出在我嘗試使用的地方
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
TikZ 有辦法處理這樣的事情嗎?
答案1
是的,有一種方法可以做到這一點。
取自第 83 條/第 911 頁PGF/TikZ 手冊 (v3.0.0):
多個變數。您經常希望同時迭代兩個變數。由於可以嵌套
\foreach
循環,因此這通常很簡單。然而,您有時希望變數“同時”迭代。例如,我們可能會得到一個連接兩個座標的邊列表,並且可能想要迭代這些邊。這樣做時,我們希望將邊的來源和目標設定為兩個不同的變數。為此,您可以使用以下語法:⟨變數⟩可能不僅僅是單一 TEX 變數。相反,它也可以是由斜線 ( ) 分隔的變數列表
/
。在這種情況下,列表項目也可以是由斜線分隔的值列表。假設⟨變數⟩列表項是值列表,每次⟨命令⟩被執行時,每個變數⟨變數⟩設定為構成目前清單項目的清單的一部分。
PGF/TikZ 文件非常詳細,整個部分都\foreach
很好地引導您使用循環。我不建議您在第一次學習時從頭到尾閱讀(完整文件超過 1000 頁),但如果您想詳細了解新知識,那麼這是非常好的。
所以你應該更換線路
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
和
\foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}
我建議將第二個變數重命名為\col
or \color
/\colour
因為它更具描述性。您可能會發現自己相當頻繁地循環遍歷 (x,y) 座標對,因此您不想感到困惑。
這就是您的範例的樣子:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [fill=black] (0,0) circle (0.05) node [above=1.5] {You};
\foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}
{
\filldraw [draw=\col] (0, 0) -- (\x, -1);
\draw [fill=black] (-\x, -1) circle (0.05);
}
\end{tikzpicture}
\end{document}
其編譯結果如下:
答案2
好吧,即使它支援類似 Python 的循環,\(
仍然會導致問題,因為它是內聯數學環境,例如\(\alpha\)
is $\alpha$
。
但事實並非如此。
因此你需要使用
\foreach \x/\y in {-2/green,-1/red,0/black,1/blue,2/yellow}