let
我在循环中使用 TikZ 操作时没有成功foreach
。我遗漏了什么吗?
示例代码(无效):
\begin{tikzpicture}
\foreach \y in {1,2,3}
{\draw (0,0) -- (3,\y);
\draw let
\p1 = (3,\y),
\n1 = {atan2(\x1,\y1)} in
(\y,0) arc [start angle = 0, end angle = \n1, radius=\y];
}
\end{tikzpicture}
答案1
语法let
在 中完全有效\foreach
。但是,您确实存在变量名称冲突:\y
循环中的 from 与\y⟨n⟩
from冲突let
。只需重命名循环计数器即可解决问题:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \a in {1,2,3}
{\draw (0,0) -- (3,\a);
\draw let
\p1 = (3,\a),
\n1 = {atan2(\x1,\y1)} in
(\a,0) arc [start angle = 0, end angle = \n1, radius=\a];
}
\end{tikzpicture}
\end{document}
根本问题是 TeX 宏名不能包含数字。因此let
必须定义一个名为的宏\y
,该宏读取1
(或其他数字)作为参数,然后重定向到正确的值。这当然会覆盖\y
来自循环的。因此您(大概)会在 上收到错误(\y,0)
,因为 new \y
(在 内let
)后面应该跟一个数字,而不是,
。