Estoy practicando con el tkz-euclide
paquete. Intento ejecutar esto:
\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}
Recibo el siguiente mensaje de error:
! 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.
Lo que quiero es un código que dibuje siempre el mismo arco entre A y B, es decir, el corto o el largo. ¿Por qué esto no funciona?
Respuesta1
Si agrega \show\hoek
justo antes, el texto de prueba se detendrá y le mostrará
> \hoek=macro:
->-37.234850000000000000.
\ifnum
(que es lo que \ifthenelse
se usa para las pruebas numéricas) está diseñado para números tex, que son números enteros.
Entonces aquí se queja en el.
El truco habitual de TeX es utilizar dimensiones para contener valores no enteros.
\ifthenelse{\lengthtest{\hoek pt<180pt}}{\tkzDrawArc(O,A)(B);}{\tkzDrawArc(O,B)(A);};
Respuesta2
Esto funciona:
\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}