TikZ 中的嵌套 foreach 循环

TikZ 中的嵌套 foreach 循环

我想在三角形上绘制一些矢量场,我正在使用嵌套\foreach循环来实现这一点,但是在内循环中,您不能使用外循环变量作为数字范围。例如,以下代码不起作用:

\begin{tikzpicture}
{\draw (0,0) -- ++(1,0) -- ++(-1,1) -- cycle;}
\foreach \x in {0,0.1,...,1}
  \foreach \y in {0,0.1,...,1-\x}
  {
  \draw [->] (\x,\y)--(-1 + \x + 2*\y,-\y);
  }
\end{tikzpicture}

有没有办法像这样进行嵌套循环?还是我必须手动对每个\y依赖项进行循环\x

答案1

我假设向量应该从三角形内部出来(在您的帖子中这不是真的)。​​我认为您因为浮点算法不精确而陷入困境,因此您最好切换到整数:

\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \draw (0,0) -- ++(1,0) -- ++(-1,1) -- cycle;

    \foreach \x in {0, ..., 10}
        \foreach \y in {0, ..., \x} {
            \draw[->] (1 - 0.1*\x,0.1*\y) -- (-0.1*\x + 0.2*\y,-0.1*\y);
        }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我发现\foreach对于它接受的范围端点,可能会有点挑剔。虽然我不知道什么可行,什么不可行,但我知道如何让你的示例(使用1-\x)工作:在之前进行计算\foreach,然后将结果保存在新的宏中。因此:

\documentclass{article}
% http://tex.stackexchange.com/q/16411/86
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(1,0) -- ++(-1,1) -- cycle;
\foreach \x in {0,.1,...,1}
{
  \pgfmathsetmacro{\z}{1-\x}
  \foreach \y in {0,.1,...,\z}
  {
  \draw [->] (\x,\y)--(-1 + \x + 2*\y,-\y);
  }
}
\end{tikzpicture}

\end{document}

(请注意,我还没有纠正其他问题:即使\x为 1,循环也会因为为\y0.1 而执行。使用整数可以解决这个问题,因为可以指定范围,因为0,...,\z默认步长为 1。)

相关内容