`foreach` funktioniert nicht zusammen mit `ifthenelse` und `mod`

`foreach` funktioniert nicht zusammen mit `ifthenelse` und `mod`

Im Minimalbeispiel unten funktioniert die auskommentierte Zeile nicht. Andere Zeilen funktionieren einwandfrei. Ich verstehe nicht, woran das liegt.

Hierist eine ähnliche Frage, aber meine Variable \imnimmt ganzzahlige Werte an.

\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}

Antwort1

Wenn Sie \show\imnach dem hinzufügen \edef, sehen Sie im ersten Zyklus

> \im=macro:
->0.0.

Und

> \im=macro:
->1.0.

im zweiten Zyklus. Dies kann nicht mit funktionieren \ifthenelse, das Ganzzahlen erwartet.

Verwenden Sie \pgmathtruncatemacro{\im}{mod(\i,5)}stattdessen.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen