
Mein Ziel besteht darin, eine Reihe von Formen in folgender Reihenfolge zu zeichnen: Quadrat, Quadrat, Dreieck, Quadrat, Quadrat, Dreieck ...
Ich verwende eine \foreach
Schleife, 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, m
dass es sich nicht um eine Zahl handelt. Hier m
ist das m
in mod
.
Der Punkt ist, \ifthenelse
kennt pgf
die mathematischen Funktionen von nicht und mod
wird 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}