foreach 语句中的点符号的特性(错误?)

foreach 语句中的点符号的特性(错误?)

我想绘制一些东西,tikz其中内循环的范围取决于外循环(通过构建所涉及的数学)。我需要区分内循环中的偶数和奇数,因此我的第一个方法是定义范围,\foreach \ell in {[begin],[begin+2],...,[end]}然后在循环中分别处理\ell\ell+1(此带有方括号的代码无法运行,有关实际示例,请参阅下面的 MWE)。

问题是 - 与我的预期相反 - 对于出现的最小范围,tikz评估\foreach \ell in {-1,1,...,-1}\ell in {-1,1})。文档(第 910 页)说(方括号和强调是我的):

在这种情况下,列表阅读的部分x,y,...,z被替换x,x+d,x+2d,...,x+md,其中 [d=y-x和] 最后的点是语义点,而不是句法点。该值m是最大数,使得x+md<=z如果d为正,或者如果x+md>=zd负。

我的解释是,就我的情况而言应该是这样的m0但实际上可能很难实现 - 或者这种行为甚至可能是故意的。

无论如何,我都想避免拆分循环,并想找到解决方法。我猜可以根据奇偶性构建一个 if 子句\ell(以区分偶数和奇数,并避免指定列表的第二个值),在我看来这也不太优雅。但就目前情况而言,也许没有办法解决这个问题……

作为我希望我的代码看起来像的样子的简要概述,这是一个 MWE(期望的结果应该只是一个带有(1,1)标签“1”的节点):

\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\foreach \j in {1} % scale (normally more!)
{
    % do something per scale here
    \pgfmathsetmacro{\z}{2^(\j-1)}
    \pgfmathsetmacro\istart{-\z}
    \pgfmathsetmacro\isecond{\istart+2}
    \pgfmathsetmacro\iend{\z-2}
    \foreach \ell in {\istart,\isecond,...,\iend}
    {
        % do something for \ell here
        \node at (\ell,\ell) {\ell}; % just for illustration
        % do something for \ell+1 here
    }
}
\end{tikzpicture}
\end{document}

答案1

TikZ 不会求解x+md<z方程式来得出正确的结果md在这种情况下,它会在 (!) 评估和处的循环后开始添加\isecond - \istart数量,因为这些点是给定的。然后检查是否没有,然后退出2\istart\isecond1+2 < -1我受够了

\ifodd, \ifeven如果要在 foreach 内部进行分支,可以使用if 子句。或者,您可以使用\pgfmathiseven{<number>}并检查\pgfmathresult

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\foreach \j in {1,...,4}
{
\ifodd\j\relax
\node at (0,\j) {odd};
\else
\node at (\j,0) {even};
\fi
}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容