Fehler beim Versuch, Modulo 3 innerhalb einer Foreach-Schleife in TikZ zu berechnen

Fehler beim Versuch, Modulo 3 innerhalb einer Foreach-Schleife in TikZ zu berechnen

Mein Ziel besteht darin, eine Reihe von Formen in folgender Reihenfolge zu zeichnen: Quadrat, Quadrat, Dreieck, Quadrat, Quadrat, Dreieck ...

Ich verwende eine \foreachSchleife, in der ich modulare Arithmetik verwende, um zu bestimmen, wann ein Dreieck gezeichnet werden soll. Hier ist mein MWE:

\documentclass{article}
\usepackage{pgfplots,tikz,tikz-3dplot}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} [scale=0.35,
triangle/.style = {regular polygon, regular polygon sides=3, scale=2.5},
square/.style = {regular polygon, regular polygon sides=4, scale=2}]
\foreach \i in {1,...,9}
{
    \ifthenelse{mod(\i,3) = 0}
    {
        \node[triangle] (\i) at (\i,0) {};
    }
    {
        \node[square] (\i) at (\i,0) {};
    }
}
\end{tikzpicture}
\end{figure}
\end{document}

Ich erhalte die folgenden Fehlermeldungen:

! Missing number, treated as zero.
! Missing = inserted for \ifnum.

Die am häufigsten gestellte Frage zu diesen Fehlern istDasaber es berücksichtigt Dezimalzahlen, was bei mir nicht der Fall ist. Was übersehe ich?

Antwort1

Wenn Sie sich die Protokolldatei ansehen, sehen Sie den gesamten Fehler. Dort können Sie sehen, dass es sich um beschwert m. Ich nehme also an, mdass es sich nicht um eine Zahl handelt. Hier mist das min mod.

Der Punkt ist, \ifthenelsekennt pgfdie mathematischen Funktionen von nicht und modwird an dieser Stelle nicht analysiert. Sie können die Berechnung mit durchführen \foreach [evaluate={\j=int(mod(\i,3));}]und den Vergleich mit durchführen \j.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} [scale=0.35,
triangle/.style = {draw, regular polygon, regular polygon sides=3, scale=2.5},
square/.style = {draw, regular polygon, regular polygon sides=4, scale=2}]
\foreach [evaluate={\j=int(mod(\i,3));}] \i in {1,...,9}
{
    \ifthenelse{\j = 0}
    {
        \node[triangle] (\i) at (\i,0) {};
    }
    {
        \node[square] (\i) at (\i,0) {};
    }
}
\end{tikzpicture}
\end{figure}
\end{document}

verwandte Informationen