\section{Présentation de \tkzname{tkz-base}}

\subsection{Exemple qui pose un problème  }

Le code suivant donne une erreur 

\begin{tkzltxexample}[right margin=7cm]  
\begin{tikzpicture}
  \draw (0,0)--(600,0);
\end{tikzpicture}
\end{tkzltxexample}
 {\color{red} Latex Error: ... Dimension too large.} 

En effet, l'unité par défaut est le cm or \TEX\ ne peut pas stocker une dimension supérieure à 575 cm, c'est ce qui entraîne une erreur. \TEX\ cependant, peut stocker des entiers allant jusqu'à $2^{31}-1$, aussi il est possible de travailler en premier sur des entiers puis  de définir les dimensions.

\begin{tkzltxexample}[right margin=7cm]  
\begin{tikzpicture}[x=0.01 cm]
  \draw (0,0)--(600 cm,0);
\end{tikzpicture} 
\end{tkzltxexample} 

{\color{red} Latex Error: ... Dimension too large.}
  
Le code précédent donne encore une erreur. En effet, 600 cm est une dimension
 et ne tient pas compte du changement d'unité. Correct est :
 
\begin{tkzltxexample}[right margin=7cm]  
\begin{tikzpicture}[x=0.01 cm]
  \draw (0,0)--(600,0);
\end{tikzpicture} 
\end{tkzltxexample} 

Cette fois, la dimension stockée est 6 cm ce qui est acceptable. Il est possible avec \TEX\ de manipuler de grands nombres entiers, mais en revanche les dimensions ne peuvent excéder \numprint{16384} pt soit 5,75 m environ.

Avec \TEX, il est aussi possible de travailler avec le package \tkzname{xfp} , qui lui permet de travailler sur des intervalles plus importants, mais au prix d'une certaine lenteur. C'est la méthode que j'ai privilégiée pour certains calculs sensibles qui requièrent une bonne précision comme des calculs de mesure d'angles ou de  longueur de segment, mais il est nécessaire une fois un nombre trouvé de l'attribuer à une dimension. On retrouve toujours les mêmes contraintes.

\subsection{Le rôle de \tkzname{tkz-base}}
Le code suivant donne une erreur non parce que \numprint{6000000} est un trop grand nombre, mais parce que \numprint{0.000001} cm  est une trop petite dimension.

 {\color{red} Latex Error:}

\begin{tkzltxexample}[right margin=7cm]  
\begin{tikzpicture}[x=0.000001 cm]
 \coordinate (x) at (6000000,0);
  \draw (0,0)--(x);
\end{tikzpicture}
\end{tkzltxexample}

Avec \tkzname{tkz-base}, il sera possible de travailler avec des coordonnées quelconques, mais il faudra pour cela utiliser les macros du package.

\tkzNamePack{tkz-base} permet de simplifier l'utilisation d'intervalles de valeurs divers. Ce package est utilisé par plusieurs de mes packages comme \tkzname{tkz-tukey}, un package pour dessiner les représentations graphi-ques en statistiques élémentaires, \tkzNamePack{tkz-fct} qui permet de dessiner les représentations graphiques des fonctions à l'aide du logiciel \tkzname{gnuplot}, ainsi qu'avec \tkzname{tkz-euclide} pour la géométrie euclidienne.

Premièrement, il faut savoir qu'il n'est pas nécessaire de s'occuper avec \TIKZ\ de la taille du support (bounding box), cependant il est parfois nécessaire, soit de tracer une grille, soit de tracer des axes, soit de travailler avec une unité différente que le centimètre, soit finalement de contrôler la taille de ce qui sera affiché.
 Pour cela, il faut avoir préparé le repère dans lequel vous allez travailler, c'est le rôle de \tkzNamePack{tkz-base} et de sa macro principale  \tkzNameMacro{tkzInit}. Par exemple, si l'on veut travailler sur un carré de 10 cm de côté, mais  tel que l'unité soit le dm alors il faudra utiliser.

\begin{tkzltxexample}[right margin=7cm]   
\tkzInit[xmax=1,ymax=1,xstep=0.1,ystep=0.1]
\end{tkzltxexample}

\tkzname{xstep=0.1} signifie que 1cm représente la graduation $0.1$ ainsi la graduation $1$ se trouve à $10$ cm de l'origine.

En revanche pour des valeurs de $x$ comprises entre \numprint{0} et \numprint{10000} et des valeurs de $y$ comprises entre \numprint{0} et \numprint{100000}, il faudra écrire 

\begin{tkzltxexample}[right margin=6cm]     
\tkzInit[xmax=10000,ymax=100000,xstep=1000,ystep=10000]
\end{tkzltxexample}
Le résultat est toujours un carré de 10 cm de côté.

Tout cela a peu de sens pour faire de la géométrie euclidienne, et dans ce cas, il est recommandé de laisser l'unité graphique égale à 1 cm. Je n'ai d'ailleurs pas testé si toutes les macros  destinées à la géométrie euclidienne acceptaient d'autres valeurs que \tkzname{xstep=1} et \tkzname{ystep=1}. En revanche pour certains dessins, il est intéressant de fixer les valeurs extrêmes et de « clipper » le rectangle de définition afin de contrôler au mieux la taille de la figure.

\subsection{Syntaxe de \tkzname{tkz-base}}

J'ai essayé de généraliser la syntaxe suivante :
\begin{itemize}
  \item la syntaxe est proche de celle de \LATEX, pas besoin « ; »;
  \item toutes les macros ont un nom commençant par \tkzname{tkz};
  \item les accolades sont utilisées pour passer un paramètre qui sera la référence d'un objet créé par la macro;
  \item les parenthèses sont utilisées pour faire référence à un objet déjà créé ou bien pour un couple de coordonnées;
  \item les crochets sont nécessaires pour faire passer des arguments optionnels ou bien encore des options, certains choix sont parfois obligatoires. L'emploi de la virgule même dans un mode Math nécessite d'être protégé dans un groupe TeX;
  \item les blancs (espace) sont interdits entre [...] et (...), [...] et \{...\}, ainsi qu'entre (...) et \{...\} mais il est possible de mettre des espaces entre les arguments optionnels passés [...].    

\end{itemize}
 

\newpage
\section{Initialisation \tkzcname{tkzInit}} 
\subsection{La macro principale  \tkzcname{tkzInit}}
\begin{NewMacroBox}{tkzInit}{\oarg{local options}}\hypertarget{init}{}

\medskip
\begin{tabular}{lll}    
\toprule   
options  & défaut & définition             \\
\midrule    
\TOline{xmin} {0} {valeur minimum des abscisses en cm}
\TOline{xmax} {10} {valeur maximum des abscisses   en cm}
\TOline{xstep}{1} {différence entre deux graduations en $x$}
\TOline{ymin} {0} {valeur minimum des ordonnées en cm }
\TOline{ymax} {10} {valeur maximum des ordonnées  en cm}
\TOline{ystep}{1} {différence entre deux graduations en $y$}  
\bottomrule    
\end{tabular}

\medskip 

{Le rôle de \tkzname{tkzInit} est de définir un repère \textcolor{red}{orthogonal} et une partie rectangulaire du plan dans laquelle vous allez placer vos dessins à l'aide de coordonnées cartésiennes. Le repère  n'est pas obligatoirement normé.
Cette macro permet de définir votre environnement de travail comme avec une calculatrice.}
\end{NewMacroBox}

\subsubsection{Modification de la taille du dessin avec \tkzcname{tkzInit}}    
Cette macro prépare le terrain et définit plusieurs constantes. Il est tout à fait possible de faire une figure plus grande que le rectangle prédéfini.
De plus, comme vous pouvez le constater, il est possible d'utiliser les commandes de \TIKZ\ au milieu de celles de \tkzname{tkz} mais {\color{red}  attention aux unités ! il faut réserver cette possibilité que pour des cas exceptionnels}.

\begin{tkzexample}[latex=10cm,small]
\begin{tikzpicture}
   \tkzInit[xmax=8,ymax=6]
   \tkzGrid
   \tkzAxeXY
   \draw[blue](-1,0)--(6,7);
\end{tikzpicture}
\end{tkzexample}
%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>

\subsubsection{Rôle de \tkzname{xstep} , \tkzname{ystep}}

\tkzHandBomb\   Attention, une graduation est représentée par 1 cm, sauf si vous redimensionnez la figure avec l'option \tkzname{scale}. Dans l'exemple ci-dessous \tkzname{xstep} = 2 correspond à 1 cm, donc entre 0 et 10, il nous faudra 5 cm. De même \tkzname{ystep}=400, il y a donc 2 cm entre 0 et 800. Il n'est pas possible d'utiliser les options de \TIKZ, \tkzname{x=...} et \tkzname{y=...}.

\medskip
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
  \tkzInit[xmax=10,xstep=2,ymax=800,ystep=400]
  \tkzGrid  
  \tkzAxeXY 

\end{tikzpicture}
\end{tkzexample} 

\subsection{Autre exemple avec \tkzname{xstep} et \tkzname{ystep}}    
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
  \tkzInit[xmax=5,xstep=1,ymax=2,ystep=.5]
    \tkzGrid  
    \tkzAxeXY 
\end{tikzpicture}
\end{tkzexample}

\subsubsection{Origine personnalisée.}

\medskip
Il est important de remarquer que l'on peut placer un point sans rien calculer.


\begin{tkzexample}[latex=10cm,small]
\begin{tikzpicture}
  \tkzInit[xmin=20,
           xmax=50,
           xstep=10,
           ymin=5000,
           ymax=5150,
           ystep=50]
  \tkzAxeXY  
  \tkzDefPoint(30,5100){A}
  \tkzDrawPoint(A)  
\end{tikzpicture}
\end{tkzexample}

\subsubsection{Utilisation des décimaux }

\medskip
Il est préférable d'écrire les différents arguments relatifs à un axe avec le même nombre de décimales.
\tkzname{numprint} est utilisé pour afficher les graduations correctement.

 Dans l'exemple suivant, \tkzname{numprint} utilise les conventions françaises pour l'écriture des nombres car j'ai utilisé :
 
\tkzcname{usepackage[french]\{babel\} }

\medskip

\begin{tkzexample}[small]
\begin{tikzpicture}
  \tkzInit[xmin=0.00,  xmax=0.05, 
           ymin=1.2200,ymax=1.2215,
           xstep=0.01, ystep=0.0005]
  \tkzAxeXY
  \tkzDefPoint(.04,1.22025){I}
  \tkzDrawPoint(I)   
\end{tikzpicture}
\end{tkzexample}

\subsubsection{Valeurs négatives}

\medskip

\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
  \tkzInit[xmin  = -40,
           xmax  =  60,
           ymin  = -40,
           ymax  =  60,
           xstep =  20,
           ystep =  20]
  \tkzAxeXY  
\end{tikzpicture}
\end{tkzexample}


\endinput
