在 Tikz 中声明变量

在 Tikz 中声明变量

我有一个正在尝试绘制的阶跃函数的 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$};
        }

相关内容