定义一个在 for 循环主体中使用的列表(tikzpicture)

定义一个在 for 循环主体中使用的列表(tikzpicture)

我正在用 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}

相关内容