Я практикуюсь с tkz-euclide
пакетом. Я пробую запустить это:
\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}
Я получаю следующее сообщение об ошибке:
! 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.
Мне нужен код, который всегда рисует одну и ту же дугу между A и B, т. е. либо короткую, либо длинную. Почему это не работает?
решение1
Если вы добавите \show\hoek
прямо перед тестом, текст остановится и покажет вам
> \hoek=macro:
->-37.234850000000000000.
\ifnum
(который используется \ifthenelse
для числовых тестов) предназначен для чисел tex, которые являются целыми числами.
Так вот он жалуется на.
Обычный трюк TeX — использовать измерения для хранения нецелочисленных значений.
\ifthenelse{\lengthtest{\hoek pt<180pt}}{\tkzDrawArc(O,A)(B);}{\tkzDrawArc(O,B)(A);};
решение2
Это работает:
\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}