\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}