关于 \pgfplotsinvokeforeach 的疑问

关于 \pgfplotsinvokeforeach 的疑问

\draw[]我使用 tikz,在循环中使用时遇到问题\foreach,所以我找到了它\pgfplotsinvokeforeach,并且对它的工作原理产生了怀疑。这是一个例子

\documentclass{article}
\usepackage{tikz, pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta, calc, positioning}

\usepackage[dvipsnames]{xcolor}


\begin{document}

\begin{tikzpicture}
    \begin{axis}[%
        axis x line=center, axis y line=center,
        xmin= -2, xmax=2,
        ymin=-8, ymax=8,
        xlabel = $x$, ylabel=$y$,
        width=\linewidth
        ]
        \addplot[line width=1.5pt ,samples=100, Purple] {x^3};
        \addplot[no markers, Green, thick] {-5};
        
        \pgfplotsinvokeforeach{-1.5, -1, -0.5, 0.5, 1, 1.5}{%
            \draw[dashed] (#1,0) -- (#1,-5);
        }
        
        \pgfplotsinvokeforeach{-1.5, -1, -0.5}{%, -1, -0.5, 0.5, 1, 1.5
            \pgfmathsetmacro{\ArrowLength}{abs(#1)*0.1} 
            \draw[-stealth, red!50!black, line width=1.5pt] (#1,-5) -- ({#1 + \ArrowLength}); 
            \node at (#1,-5) {\ArrowLength};
            }
    \end{axis}
\end{tikzpicture}

\end{document}

在这个例子中,我希望箭头的长度增加,但我得到的箭头长度似乎相同。我认为这行不通,因为我添加了#1 + \ArrowLength

我想要这样的东西

\documentclass{article}
\usepackage{tikz, pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta, calc, positioning}

\usepackage[dvipsnames]{xcolor}


\begin{document}
\begin{tikzpicture}
    \begin{axis}[%
        axis x line=center, axis y line=center,
        xmin= -2, xmax=2,
        ymin=-8, ymax=8,
        xlabel = $x$, ylabel=$y$,
        width=\linewidth
        ]
        \addplot[line width=1.5pt ,samples=100, Purple] {x^3};
        \addplot[no markers, Green, thick] {-5};
        
        \pgfplotsinvokeforeach{-1.5, -1, -0.5, 0.5, 1, 1.5}{%
            \draw[dashed] (#1,0) -- (#1,-5);
        }
        
        \draw[-stealth, red!50!black, line width=1.5pt] (-1.5, -5) -- (-1.1,-5);
        \draw[-stealth, red!50!black, line width=1.5pt] (-1, -5) -- (-0.73,-5);
        \draw[-stealth, red!50!black, line width=1.5pt] (-0.5, -5) -- (-0.37,-5);
        \draw[-stealth, red!50!black, line width=1.5pt] (1.5, -5) -- (1.91,-5);
        \draw[-stealth, red!50!black, line width=1.5pt] (1, -5) -- (1.27,-5);
        \draw[-stealth, red!50!black, line width=1.5pt] (0.5, -5) -- (0.64,-5);
    \end{axis}
\end{tikzpicture}

\end{document}

我刚刚发现\pgfplotsinvokeforeach,所以我不知道它到底是如何工作的。请稍微解释一下为什么它会这样。提前谢谢

答案1

该点({#1 + \ArrowLength})缺少 y 坐标。

\pgfplotsinvokeforeach如果#1直接使用 ,而不是定义 ,则\ArrowLength中的代码有效abs(#1)*0.27。对于 中的文本\node\fpeval用于评估此表达式。还below添加了 选项。

两者\pgfplotsinvokeforeach合并在一个实例中。

代码\usetikzlibrary{arrows.meta, calc, positioning}\usepackage{tikz}在此示例中是不必要的,因此被删除。代码\usepackage[dvipsnames]{xcolor}被删除,取而代之的dvipsnames是作为选项提供\documentclass

之后\begin{axis}[和之后\pgfplotsinvokeforeach都不%需要。

\documentclass[border=6pt,dvipsnames]{standalone}
\usepackage{xfp}%not necessary from 2022-06-01: see https://ctan.org/pkg/xfp
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    axis x line=center, axis y line=center,
    xmin=-2, xmax=2,
    ymin=-8, ymax=8,
    xlabel=$x$, ylabel=$y$,
    width=\linewidth
  ]
    \addplot[line width=1.5pt, samples=100, Purple] {x^3};
    \addplot[no markers, Green, thick] {-5};
    \pgfplotsinvokeforeach{-1.5, -1, -0.5, 0.5, 1, 1.5}{
      \draw[dashed] (#1,0) -- (#1,-5);
      \draw[-stealth, red!50!black, line width=1.5pt] (#1,-5) -- ({#1 + abs(#1)*0.27},-5);
      \node[below] at (#1,-5) {\fpeval{abs(#1)*0.27}};
    }
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容