我有一个正在尝试绘制的阶跃函数的 Tikz 图,我认为其中大部分都是样板,但我写的部分没有像我希望的那样工作:
\foreach \i in {0,1,...,5}
\draw[domain=(\i*0.5):((\i+1)*0.5),variable=\x] plot ({\x},{\i*2/5})
node[right] at (((\i+1)*0.5), (\i*2/5)) {$v=\i \cdot 2/5$};
当删除最后一行时node[right]...
,它会按预期绘制,但是当包含此行时,它会破坏一切。
让我感到困惑的是,我写这个 for 循环是为了抽象以前的实现,在以前的实现中我单独编写了每一行。当单独编写这些行时,这个node[right]...
东西确实有效!所以我不确定将它抽象成 for 循环会导致它中断的原因是什么。
无论如何,我主要猜测问题出在 Tikz 如何对表达式进行分组。所以我想我可以通过简单地声明一个设置为\j
等于的变量来解决这个\i+1
问题,然后也许这将有助于它更好地跟踪表达式中的位置。但经过一番谷歌搜索,我还没有看到任何人解释如何在 Tikz 中声明变量,或者更具体地说,在 foreach 循环中声明变量。
如果有帮助的话,这里是其余的图纸:
\begin{tikzpicture}[xscale=1.5,yscale=4]
\draw [very thin, gray!30, step=0.5cm] grid (3.9,2.1);
\draw [thick] [->] (-0.2,0)--(4.2,0) node[right, below] {$t$};
\foreach \x in {0.5,...,3.5}
\draw[xshift=\x cm, thick] (0pt,-1pt)--(0pt,1pt) node[yshift=-0.5cm] {$\x$};
\draw [thick] [->] (0,-0.2)--(0,2.2) node[above, left] {$v$};
\foreach \y in {0,0.5,...,2}
\draw[yshift=\y cm, thick] (-1pt,0pt)--(1pt,0pt) node[left] {$\y$};
% \draw [domain=0:0.5, variable=\x] plot ({\x}, {0}) node[below right] at (0.4,0.15) {$v=0$};
% The above, in the comment, isn't quite right but it's an example of something that works when not abstracted into the foreach below.
\foreach \i in {0,1,...,5}
\draw[domain=(\i*0.5):((\i+1)*0.5),variable=\x] plot ({\x},{\i*2/5})
node[right] at (((\i+1)*0.5), (\i*2/5)) {$v=\i \cdot 2/5$};
\end{tikzpicture}
答案1
也许这个代码可以解决你的问题:
\foreach \i in {0,1,...,5} {
\pgfmathsetmacro{\j}{\i*2/5} % <-- added to declare the \j variable
\draw[domain=(\i*0.5):((\i+1)*0.5),variable=\x] plot ({\x},{\j})
node[right] () {$v=\j$};
}