使用 TikZ 定义 \foreach 循环的限制

使用 TikZ 定义 \foreach 循环的限制

我想\foreach使用该let语句计算 TikZ 循环的上限和下限。不幸的是,当我尝试以下代码时,这会引发错误:

\draw
let \n{lo}={<computation>},
    \n{hi}={<computation>}
in
\foreach \var in {\n{lo},...,\n{hi}} { <STUFF> }

我可以轻松定义一个尾递归宏来执行我想要的操作,但理想情况下,我想使用 TikZ 的\foreach语句。有趣的是,这\n{lo}不会造成问题(就我而言),但\n{hi}……

任何指向解决方案的指示都值得赞赏。

这是一个简单的例子:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
\draw
  let \p{bl}=(0,0),
      \p{br}=(1,0),
      % THIS COMPUTATION IS RELATED TO THE PROBLEM
      % \n{line width}={1} % WORKS FINE
      \n{line width}={\x{br}-\x{bl}},
      \n{x height}={1.2},
      \n{line density}={2},
      \n{x heights}={\n{line width}/\n{x height}},
      \n{aid lines}={ceil(\n{line density} * \n{x heights})},
      \n{aid line factor}={\n{x height} / \n{line density}},
      \n{first}={-10},
      \n{last}={\n{aid lines}-\n{first}}
  in
  % DOESN'T WORK
  \foreach \cpcnt in {\n{first},...,\n{last}} {%
       (\p{bl}) -- + (\cpcnt * \n{aid line factor},0)
  };%
\end{tikzpicture}

\end{document}

答案1

您可以从中看到工作版本和非工作版本之间的区别

\begin{tikzpicture}
\draw
  let \p{bl}=(0,0),
      \p{br}=(1,0),
      \n{a}={1},
      \n{b}={\x{br}-\x{bl}}
  in
   node {$a=\n{a}$, $b=\n{b}$};
\end{tikzpicture}

输出

上述代码的输出

\n宏可以是无量纲数或有量纲数,参见手册第 160 页(针对版本 3.0.1a,第 14.15 节)Let 操作因为有维度,\n{b}所以才变成维度。\x

您可以使用该函数去除尺寸scalar,但之后可能需要缩放它:

\begin{tikzpicture}
\draw
  let \p{bl}=(0,0),
      \p{br}=(1,0),
      \n{a}={1},
      \n{b}={scalar(\x{br}-\x{bl})},
      \n{c}={scalar(\x{br}-\x{bl})*2.54/72.27} % scale from points to cm
  in
   node {$a=\n{a}$, $b=\n{b}$, $c=\n{c}$};
\end{tikzpicture}

上述代码片段的输出

因此,在您的示例中,您可能想要使用

\n{line width}={scalar(\x{br}-\x{bl})*2.54/72.27},

相关内容