结合 TikZ 的 foreach 和 let 操作

结合 TikZ 的 foreach 和 let 操作

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)后面应该跟一个数字,而不是,

相关内容