
В минимальном примере ниже закомментированная строка не работает. Остальные строки работают правильно. Не могу понять, в чем причина.
Здесьаналогичный вопрос, но моя переменная \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.
во втором цикле. Это не может работать с \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}