为什么这个 \foreach 不起作用?

为什么这个 \foreach 不起作用?

我不明白为什么这不起作用。我改成xyz但没有起作用。有什么想法吗?

\documentclass[11pt]{article}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    grid=major,
    xmin = 0, xmax = 6,
    ]
    \addplot[red, domain=0:6, samples=10,]{x};
    \foreach \x in {1.,2.,3.,4.,5.}
        \node[] at (\x , 1)  {Hello};
\end{axis}
\end{tikzpicture}
\end{document}

添加:\addplot只要变量名不是,\x它就可以正常工作\y

\begin{tikzpicture}
\begin{axis}[
    grid=major,
    ]
    \foreach \w in {1,2,...,5} {
    \addplot[red, domain=0:6, samples=10,]{\w * x};
    \addplot[blue, mark=square, ycomb] coordinates {(\w, \w^2 - 1)};
    }
\end{axis}
\end{tikzpicture}

在此处输入图片描述

答案1

另一个选择是使用\pgfplotsinvokeforeach

\pgfplotsinvokeforeach{1,2,3,4,5} {
    \node[]  at (#1 , 1)  {Hello};
}

其中参数可用为#1。这得出:

在此处输入图片描述

代码:

\documentclass[11pt]{article}
\usepackage{pgfplots,pgfplotstable}
%\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    grid=major,
    xmin = 0, xmax = 6,
    legend style={
    legend pos= north west,},
    legend style={%at={(0.5,0.95)},anchor=north,
    legend columns=1},
    ]
    \addplot[red, domain=0:6, samples=10,]{x};
    
    \pgfplotsinvokeforeach{1,2,3,4,5} {
        \node[]  at (#1 , 1)  {Hello};
    }
\end{axis}
\end{tikzpicture}

答案2

\x需要扩展,因为它位于其自己的\foreach组中,因此其值是冒泡的。通过首先扩展它,将的实际值\x传递给\node,而不是间接引用\x,后者不会持久。

\documentclass[11pt]{article}
\usepackage{pgfplots,pgfplotstable}
%\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    grid=major,
    xmin = 0, xmax = 6,
    legend style={
    legend pos= north west,},
    legend style={%at={(0.5,0.95)},anchor=north,
    legend columns=1},
    ]
    \addplot[red, domain=0:6, samples=10,]{x};
    \foreach \x in {1.,2.,3.,4.,5.}
        \def\tmp{\node[] at (}
        \expandafter\tmp\x , 1)  {Hello};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容