我想在三角形上绘制一些矢量场,我正在使用嵌套\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,循环也会因为为\y
0.1 而执行。使用整数可以解决这个问题,因为可以指定范围,因为0,...,\z
默认步长为 1。)