Ich übe mit dem tkz-euclide
Paket. Ich versuche Folgendes auszuführen:
\documentclass{article}
\usepackage{tkz-euclide,ifthen}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}[scale=4]
\tkzInit[xmin=-1,xmax=1, ymin=-1,ymax=1]
\draw (0,0) circle [radius=1];
\tkzDefPoint(.3,.5){A}\tkzDefPoint(.5,.2){B}\tkzDefPoint(0,0){O}
\tkzDrawPoints(A,B)
\tkzFindAngle(A,O,B)\tkzGetAngle{hoek}
\ifthenelse{\hoek<180}{\tkzDrawArc(O,A)(B);}{\tkzDrawArc(O,B)(A);};
\end{tikzpicture}
\end{document}
Ich erhalte folgende Fehlermeldung:
! Missing = inserted for \ifnum.
<to be read again>
.
l.12 \ifthenelse{\hoek<180}
{\tkzDrawArc(O,A)(B);}{\tkzDrawArc(O,B)...
? H
I was expecting to see `<', `=', or `>'. Didn't.
Ich möchte einen Code, der zwischen A und B immer den gleichen Bogen zeichnet, also entweder den kurzen oder den langen. Warum funktioniert das nicht?
Antwort1
Wenn Sie \show\hoek
kurz vor dem Test hinzufügen, wird Tex angehalten und zeigt Ihnen
> \hoek=macro:
->-37.234850000000000000.
\ifnum
(das \ifthenelse
für numerische Tests verwendet wird) ist für Tex-Zahlen konzipiert, bei denen es sich um ganze Zahlen handelt.
Hier beschwert es sich also über die.
Der übliche TeX-Trick besteht darin, Dimensionen zu verwenden, um nicht ganzzahlige Werte zu speichern
\ifthenelse{\lengthtest{\hoek pt<180pt}}{\tkzDrawArc(O,A)(B);}{\tkzDrawArc(O,B)(A);};
Antwort2
Das funktioniert:
\documentclass{article}
\usepackage{tkz-euclide,ifthen}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}[scale=4]
\tkzInit[xmin=-1,xmax=1, ymin=-1,ymax=1]
\draw (0,0) circle [radius=1];
\tkzDefPoint(.3,.5){A}\tkzDefPoint(.5,.2){B}\tkzDefPoint(0,0){O}
\tkzDrawPoints(A,B)
\tkzFindAngle(A,O,B)\tkzGetAngle{hoek}
\draw(0,0) node{\hoek};
\pgfmathparse{(\hoek<180) ? 1 : 0 }
\ifthenelse{\equal{\pgfmathresult}{1}}{\tkzDrawArc(O,A)(B);}{\tkzDrawArc(O,B)(A);};
\end{tikzpicture}
\end{document}