我正在用 tikzpicture 画图。其中一部分只是用节点画一条线:
\foreach \x in {0,...,10}{
\draw[->-, very thick,red] (\x,0) -- (\x+1,0);
\filldraw[yellow] (\x,0) circle (2.5pt);
}
现在我想命名我的节点。有没有办法定义某种列表,然后从 for 循环主体中调用此列表?我想到了这样的方法:
List= \{$1$, $w$, $tb$, etc\};
\foreach \x in {0,...,10}{
\draw[->-, very thick,red] (\x,0) -- (\x+1,0);
\filldraw[yellow] (\x,0) circle (2.5pt) node[below,black]{List[\x]};
}
任何帮助都非常感谢!谢谢。
答案1
解释数组操作在手册中。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\newcommand*\List{{"$1$", "$w$", "$tb$"}}
\foreach \x in {0,...,2}{
\draw[->, very thick,red] (\x,0) -- (\x+1,0);
\filldraw[yellow] (\x,0) circle (2.5pt) node[below,black]{\strut\pgfmathprint{\List[\x]}};
}
\end{tikzpicture}
\end{document}
答案2
该listofitems
包可以提供帮助。然后,\foreachitem
可以使用循环来代替循环\foreach
。
\documentclass{article}
\usepackage{tikz,listofitems}
\begin{document}
\readlist*\List{$1$, $w$, $tb$, etc}
\begin{tikzpicture}
\foreachitem\x\in\List[]{
\ifnum\xcnt=\listlen\List[]\relax\else
\draw[-, very thick,red] (\xcnt,0) -- (\xcnt+1,0);\fi
\filldraw[yellow] (\xcnt,0) circle (2.5pt) node[below,black]{\strut\x};
}
\end{tikzpicture}
\end{document}
答案3
虽然我认为 Steven 的答案更胜一筹,但以下是我对你的问题的看法。我认为代码更容易理解,但你必须定义两个变量。
另外,我已将箭头置于中心,因为我认为您想通过不存在的箭头来实现这一点->-
,不是吗?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\begin{scope}[decoration = {
markings,
mark = at position 0.5 with {\arrow{>}}
}]
\foreach \x/\y in {
0/$1$,
1/$w$,
2/$tb$,
3/etc
}{
\draw[postaction={decorate}, very thick,red] (\x,0) -- (\x+1,0);
\filldraw[yellow] (\x,0) circle (2.5pt) node[below,black]{\strut\y};
}
\end{scope}
\end{tikzpicture}
\end{document}
编辑
我刚刚想到了另一种更简单的可能性。您可以使用选项访问索引\foreach
。[count = \i]
这实际上与 Steven 提出的建议相同,但您不需要加载新包,因此不需要处理新语法或可能的兼容性问题。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\begin{scope}[decoration = {
markings,
mark = at position 0.5 with {\arrow{>}}
}]
\foreach \x [count=\i] in {
$1$,
$w$,
$tb$,
etc
}{
\draw[postaction={decorate}, very thick,red] (\i,0) -- (\i+1,0);
\filldraw[yellow] (\i,0) circle (2.5pt) node[below,black]{\strut\x};
}
\end{scope}
\end{tikzpicture}
\end{document}