`foreach` は `ifthenelse` および `mod` と一緒に動作しません

`foreach` は `ifthenelse` および `mod` と一緒に動作しません

以下の最小限の例では、コメントアウトされた行は機能しません。他の行は正常に機能します。理由がわかりません。

ここ同様の質問ですが、私の変数は\im整数値を取ります。

\documentclass[margin=3mm]{standalone} 
\usepackage{tikz}
\usepackage{ifthen}
 
\begin{document}
\begin{tikzpicture}    
    \def\m{12}
    \def\n{13}    
    \foreach \i in {0,...,\m}{\coordinate[label=] (u\i) at (360*\i/\n:1);}
     
     \foreach \i in { 0,...,\m}{%        
         \pgfmathMod{\i}{5}\edef\im{\pgfmathresult}        
         \draw[blue] (u\im) circle (0.04);               
         \ifthenelse{\i =0}{ }{\draw[red,fill] (u\i) circle (0.02);}
         %\ifthenelse{\im=0}{ }{\draw[green,fill] (u\i) circle (0.01);}
     }
 
 \end{tikzpicture}
 \end{document}

答え1

\show\imの後にを追加すると\edef、最初のサイクルで

> \im=macro:
->0.0.

そして

> \im=macro:
->1.0.

2 番目のサイクルで。これは\ifthenelse、整数を期待する では機能しません。

代わりに使用してください\pgmathtruncatemacro{\im}{mod(\i,5)}

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usepackage{ifthen}

\begin{document}

\begin{tikzpicture}
  \def\m{12}
  \def\n{13}
  \foreach \i in {0,...,\m}{\coordinate[label=] (u\i) at (360*\i/\n:1);}
  \foreach \i in { 0,...,\m}{
    \pgfmathtruncatemacro{\im}{mod(\i,5)}
    \draw[blue] (u\im) circle (0.04);
    \ifthenelse{\im=0}{}{\draw[green,fill] (u\i) circle (0.01);}
  }
\end{tikzpicture}

\end{document}

ここに画像の説明を入力してください

関連情報