我现在正在学习 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
或\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\)
例如$\alpha$
。
但事实并非如此。
因此你需要使用
\foreach \x/\y in {-2/green,-1/red,0/black,1/blue,2/yellow}