From ae575882b0c25855564e1f482d98a681c8d8e445 Mon Sep 17 00:00:00 2001
From: Jean-Michel Sarlat Notations: <argument>: signifie que l’argument est obligatoire. [argument]: signifie que l’argument est facultatif. Args( <entier> ). Description : cette fonction n’a d’effet que dans une macro, elle évalue et renvoie l’argument numéro <entier> avec lequel la macro a été appelée. Hors de ce contexte, elle renvoie la valeur Nil. Voir également la commande StrArgs Exemple(s) : Voir la fonction Nargs. Assign( <expression>, <variable>, <valeur> ). Description : cette fonction évalue <valeur> et l’affecte à la variable nommée <variable> dans <expression>1. La fonction Assign renvoie la valeur Nil. Cette fonction est utile dans l’écriture de macros prenant une expression comme paramètre et qui doivent l’évaluer. Exemple(s) : voici une macro Bof qui prend une fonction f(t) en paramètre et qui calcule la liste [f(0), f(1), . . . , f(5)]:Liste des commandes
+Args
+
+
+Assign
+
+
+
%1 représente le premier paramètre de la macro (c’est à dire f(t)), la boucle: pour k allant de 0 à 5 elle exécute la commande [Assign(%1, t, k), %1], celle-ci assigne la valeur de k à la variable t dans l’expression %1, puis évalue %1. L’exécution de Bof(t^2) donne: [0,1,4,9,16,25]. L’exécution de Bof(x^2) donne Nil.
+Attributs().
Description : cette fonction ouvre la fenêtre permettant de modifier les attributs d’un élément graphique. Cette fonction renvoie la valeur 1 si l’utilisateur a choisi OK, elle renvoie la valeur 0 s’il a choisi Cancel. Si l’utilisateur a choisi OK, alors les variables globales correspondant aux attributs sont modifiées en conséquence.
Border( <0/1> )
Description : cette fonction détermine si un cadre doit être dessiné ou non autour des marges du graphique dans les exportations. Lorsque la valeur de l’argument est nulle (valeur par défaut), le cadre n’est pas dessiné.
+Lorsque l’argument est vide, cette fonction renvoie l’état de la bordure à l’exportation (0 ou 1). Sinon, elle renvoie la valeur Nil.
ChangeAttr( <element1>, ..., <elementN> )
Description : cette fonction permet de modifier les attributs des éléments graphiques <element1>, ..., <elementN>, en leur affectant la valeur des attributs en cours. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
Clip2D( <ligne polygonale>, <contour convexe> [, close(0/1) ] ).
Description : cette fonction clippe la <ligne polygonale> qui doit être une variable contenant une liste de complexes, avec le <contour convexe>, qui est lui aussi une liste de complexes. La fonction calcule la ligne polygonale qui en résulte modifie la variable <ligne polygonale> en conséquence, le dernier agument <close> (0 par défaut) permet de préciser si la <ligne polygonale> doit être refermée ou non. La fonction renvoie Nil.
CloseFile().
Description : cette fonction permet de fermer le fichier ouvert par la commande OpenFile.
ComposeMatrix( <[z1, z2, z3]> )
Description : cette fonction permet de composer la matrice courante (celle-ci affecte tous les éléments graphiques sauf les axes et les grilles dans la version actuelle) avec la matrice <[z1, z2, z3]>. Cette matrice représente l’expression analytique d’une application affine du plan, c’est une liste de trois complexes: z1 qui est l’affixe du vecteur de translation, z2 qui est l’affixe du premier vecteur colonne de la matrice de la partie linéaire dans la base (1,i), et z3 qui est l’affixe du deuxième vecteur colonne de la matrice de la partie linéaire. Par exemple, la matrice de l’identité s’écrit ainsi: [0,1,i] (c’est la matrice par défaut). (Voir aussi les commandes GetMatrix, SetMatrix, et IdMatrix).
Copy( <liste>, <index depart>, <nombre> ).
Description : cette fonction renvoie la liste constituée par les <nombre> éléments de la <liste> à partir de l’élément numéro <depart>[inclus]. Si <nombre> est nul, alors la fonction renvoie tous les éléments de la liste à partir de l’élément numéro <départ>.
+Si le numéro <depart> est négatif, alors la liste et parcourue de droite à gauche en partant du dernier, le dernier élément a l’index - 1, l’avant-dernier a l’index - 2 ⋯ etc. La fonction renvoie les <nombre> éléments de la liste (ou toute la liste si <nombre> est nul) en allant vers la gauche, mais la liste renvoyée est dans le même sens que la <liste>, et cette dernière n’est pas modifiée.
Exemple(s) :
+Copy([1,2,3,4],2,2) renvoie [2,3].
Copy([1,2,3,4],2,5) renvoie [2,3,4].
Copy([1,2,3,4],2,0) renvoie [2,3,4].
Copy([1,2,3,4],-1,2) renvoie [3,4].
Copy([1,2,3,4],-2,2) renvoie [2,3].
Copy([1,2,3,4],-2,0) renvoie [1,2,3].
NB: pour des raisons de compatibilité avec l’ancienne version, l’index 0 correspond aussi au dernier élément de la liste.
+DefaultAttr()
Description : cette fonction met toutes les variables correspondant aux attributs (Color, Width, ...) à leur valeur par défaut. Cette fonction renvoie la valeur Nil.
Del( <liste>, <depart>, <nombre> ).
Description : supprime de la <liste> <nombre> éléments à partir du numéro <départ>[inclus]. Si <nombre> est nul, alors la fonction supprime tous les éléments de la liste à partir de l’élément numéro <départ>.
+Si le numéro <depart> est négatif, alors la liste et parcourue de droite à gauche en partant du dernier. Le dernier élément a l’index - 1, l’avant-dernier a l’index - 2 ⋯ etc. La fonction supprime les <nombre> éléments de la liste (ou toute la liste si <nombre> est nul) en allant vers la gauche.
+Le paramètre <liste> doit être un nom de variable, celle-ci est modifiée et la fonction renvoie Nil.
Exemple(s) : la commande [x:=[1,2,3,4], Del(x,2,2), x] renvoie [1,4].
+La commande [x:=[1,2,3,4], Del(x,-2,2), x] renvoie [1,4].
NB: pour des raisons de compatibilité avec l’ancienne version, l’index 0 correspond aussi au dernier élément de la liste.
+Delay( <nb millisecondes> )
Description : permet de suspendre l’exécution du programme pendant le laps de temps indiqué (en milli-secondes).
DelButton( <texte1>, ..., <texteN> )
Description : Cette fonction permet de supprimer dans la colonne à gauche de la zone de dessin, les boutons portant les inscriptions <texte1>, ..., <texteN>. Si la liste est vide ( DelButton()), alors tous les boutons sont supprimés. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
DelGraph( <element1>, ..., <elementN> )
Description : Cette fonction permet de supprimer les éléments graphiques appelés <element1>, ..., <elementN>. Si la liste est vide ( DelGraph()), alors tous les éléments sont supprimés. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
DelItem( <nom1>, ..., <nomN> )
Description : Cette fonction permet de supprimer de la liste déroulante à gauche de la zone de dessin, les options appelées <nom1>, ..., <nomN>. Si la liste est vide ( DelItem()), alors toute la liste est supprimée. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
DelMac( <mac1>, ..., <macN> )
Description : Cette fonction permet de supprimer les macros (non prédéfinies) appelées <mac1>, ..., <macN>. Si la liste est vide (DelMac()), la commande est sans effet. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
DelText( <texte1>, ..., <texteN> )
Description : Cette fonction permet de supprimer dans la colonne à gauche de la zone de dessin, les labels <texte1>, ..., <texteN>. Si la liste est vide ( DelText()), alors tous les labels sont supprimés. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
DelVar( <var1>, ..., <varN> )
Description : Cette fonction permet de supprimer les variables globales (non prédéfinies) appelés <var1>, ..., <varN>. Si la liste est vide (DelVar()), la commande est sans effet. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
Der( <expression>, <variable>, <liste> ).
Description : cette fonction calcule la dérivée de <expression> par rapport à <variable> et l’évalue en donnant à <variable> les valeurs successives de la <liste>. La fonction Der renvoie la liste des résultats. Mais si on a besoin de l’expression de la dérivée, alors on préférera la fonction Diff.
Exemple(s) :
+la commande Der(1/x,x,[-1,0,2] ) renvoie [-1,-0.25].
Voici le texte d’une macro appelée tangente qui prend une expression f(x) en premier paramètre, une valeur réelle x0 en second paramètre et qui trace la tangente à la courbe au point d’abscisse x0:
+On assigne la valeur x0 à la variable x dans l’expression f(x), on stocke dans une variable A le point de coordonnées (x0, f(x0)) (sous forme d’affixe), on stocke dans une variable Df la dérivée en x0 (fʹ(x0)), puis on trace la droite passant par A et dirigée par le vecteur d’affixe 1 + ifʹ(x0).
Diff( <nom>, <expression>, <variable> [, param1,..., paramN] )
Description : cette fonction permet de créer une macro appelée <nom>, s’il existait déjà une macro portant ce nom, elle sera écrasée, sauf si c’est une macro prédéfinie auquel cas la commande est sans effet. Le corps de la macro créée correspond à la dérivée de <expression> par rapport à <variable>. Les paramètres optionnels sont des noms de variables, le nom de la variable <param1> est remplacé dans l’expression de la dérivée par le paramètre %1, le nom <param2> est remplacé par %2 ... etc. Cette fonction renvoie Nil.
Exemple(s) : après l’exécution de la commande (dans la ligne de commande en bas de la fenêtre): Diff(df, sin(3*t), t), une macro appelée df est créée et son contenu est: 3*cos(3*t), c’est une macro sans paramètre qui contient une variable locale t, elle devra donc être utilisée en développement immédiat (c’est à dire précédée du symbole ∖ )2. Par contre après la commande Diff(df,sin(3*t),t,t), le contenu de la macro df est: {3*cos(3*%1)} qui est une macro à un paramètre.
Echange( <variable1>, <variable2> ).
Description : cette fonction échange les deux variables, ce sont en fait les adresses qui sont échangées. Les contenus ne sont pas dupliqués alors qu’ils le seraient si on utilisait la commande:
+{ [aux:=variable1, variable1:=variable2, variable2:=aux]}
+La fonction Echange renvoie la valeur Nil.
EpsCoord( <affixe> )
Description : renvoie l’affixe exportée en eps. Pour les autres, il y a les macros TeXCoord et SvgCoord.
Eval( <expression> ).
Description : cette fonction évalue l’<expression> et renvoie le résultat. L’<expression> est interprétée comme une chaîne de caractères.
La fonction Input renvoie la saisie sous forme d’une chaîne dans la macro appelée chaine(). La fonction Eval évalue cette chaîne (comme n’importe quelle commande TeXgraph) et renvoie le résultat.
Exemple(s) : voici une commande demandant une valeur à l’utilisateur pour une variable x:
if Input("x=", "Entrez une valeur pour x", x )
+ then x:= Eval( chaine() )
+ fi
+
+Exec( <programme> [, argument(s), répertoire de travail, attendre] ).
Description : cette fonction permet d’exécuter un <programme> (ou un script) en précisant éventuellement des <arguments> et un <répertoire de travail>, ces trois arguments sont interprétés comme des chaînes de caractères. Le dernier argument doit valoir 0 (par défaut) ou 1, il indique si le programme attend ou non la fin du processus fils. La fonction renvoie la valeur Nil. Un message d’erreur s’affiche lorsque: les ressources sont insuffisantes, ou bien le programme est invalide, ou bien le chemin est invalide.
La macro-chaîne prédéfinie @TmpPath contient le chemin vers un répertoire temporaire. La macro Apercu exporte le graphique courant dans ce dossier au format pgf dans le fichier file.pgf, puis elle exécute pdflatex sur le fichier apercu.tex, puis attend la fin de l’exécution avant de lancer le lecteur de pdf.
Exemple(s) : la macro Apercu contenue dans interface.mac est:
[Export(pgf,[@TmpPath,"file.pgf"] ),
+ Exec("pdflatex", ["-interaction=nonstopmode apercu.tex"],@TmpPath,1),
+ Exec(@PdfReader,"apercu.pdf",@TmpPath,0)
+ ]
+
+Export( <mode>, <fichier> ).
Description : cette fonction permet d’exporter le graphique en cours, <mode> est une valeur numérique qui peut être l’une des constantes suivantes: tex, pst, pgf, tkz, eps, psf, pdf, epsc, pdfc, svg, bmp, obj, geom, jvx ou teg. L’exportation se fait dans <fichier> qui contient donc le nom du fichier, avec éventuellement le chemin.
+La macro prédéfinie @TmpPath contient le chemin vers un répertoire temporaire. La macro Apercu exporte le graphique courant dans ce dossier au format pgf dans le fichier file.pgf, puis elle exécute pdflatex sur le fichier apercu.tex, puis attend la fin de l’exécution avant de lancer le lecteur de pdf.
Exemple(s) : la macro Apercu contenue dans interface.mac est:
[Export(pgf,[@TmpPath,"file.pgf"] ),
+ Exec("pdflatex", ["-interaction=nonstopmode apercu.tex"],@TmpPath,1),
+ Exec(@PdfReader,"apercu.pdf",@TmpPath,0)
+ ]
+
+ExportObject( <argument> )
Description : cette commande n’a d’effet que pendant un export. Elle permet d’exporter l’<argument> dans le fichier de sortie, cet <argumet> est soit le nom d’un élément graphique, soit une commande graphique (comme pour la fonction Get). Elle peut-être utile pour écrire des exports personnalisés, ceci est décrit dans cette section.
Fenetre( <A>, <B> [, C] ).
Description : cette fonction modifie la fenêtre graphique, c’est l’équivalent de l’option Paramètres/Fenêtre, sauf que les éléments graphiques ne sont pas automatiquement recalculés. Le paramètre <A> et le paramètre <B> sont les affixes de deux coins de la fenêtre diamétralement opposés, et le paramètre facultatif <C> représente les deux échelles, plus précisément, la partie réelle de <C> est l’échelle [en cm] sur l’axe des abscisses et la partie imaginaire de <C> est l’échelle [en cm] sur l’axe des ordonnées, ces deux valeurs doivent être strictement positives. Cette fonction renvoie la valeur Nil.
Free( <expression>, <variable>.
Description : cette fonction renvoie 1 si l’<expression> contient la <variable>, 0 sinon. Lorsque le deuxième argument n’est pas un nom de variable, la fonction renvoie Nil.
Get( <argument> [, clip(0/1)] ).
Description : lorsque le paramètre <argument> est un identificateur, la fonction cherche s’il y a un élément graphique dont le nom est <argument>, si c’est le cas, alors la fonction renvoie la liste des points de cet élément graphique, sinon elle renvoie la valeur Nil. Dans ce cas l’argument optionnel est ignoré.
+Lorsque <argument> n’est pas un identificateur, celui-ci est considéré comme une fonction graphique, la fonction Get renvoie la liste des points de l’élément graphique construit par cette fonction graphique mais sans créer l’élément en question. L’argument optionnel <clip> (qui vaut 1 par défaut) indique si l’élément doit être clippé par la fenêtre courante (valeur 1) ou non (valeur 0).
+Lorsque l’argument est vide: Get(), la fonction renvoie la liste des points de tous les éléments graphiques déjà construits, ceux qui sont cachés sont ignorés.
Exemple(s) : Get(Cercle(0,1)) renvoie la liste des points du cercle de centre 0 et de rayon 1 mais sans créer ce cercle, la liste des points est clippée par la fenêtre graphique.
Exemple(s) : utilisation des points d’un objet graphique:
++++Cmd view(0,6.25,-1.5,2); size(7.5); [tMin:=0, tMax:=6.25]; Graph axe = Axes(0,1+i); C1 = [Color:=blue,Width:=8, Cartesienne(1/x) ]; C2 = [Color:=red,Width:=8, Cartesienne(sin(2*x)*1.5)]; inter = [DotScale:=2,DotStyle:=dotcircle, Color:=forestgreen, Point(Get(C1) InterL Get(C2)), Color:=blue, LabelDot(5.5+0.1*i,"C1","N"), Color:=red, LabelDot(3-i,"C2","E"), ];
+
GetAttr( <argument> )
Description : lorsque le paramètre <argument> est un identificateur, la fonction cherche s’il y a un élément graphique dont le nom est <argument>, si c’est le cas, alors les attributs de cet élément graphique deviennent les attributs courants, et la fonction renvoie la valeur Nil. Sinon, l’argument est interprété comme une chaîne de caractères puis la fonction effectue la même recherche.
GetMatrix()
Description : cette fonction renvoie la matrice courante. (Voir aussi les commandes ComposeMatrix, SetMatrix, et IdMatrix)
GetSpline(<V0>, <A0>,..., <An>, <Vn> )
Description : renvoie la liste des points de contrôle correspondant à la spline cubique passant par les points <A0> jusqu’à <An>. <V0> et <Vn> désignent les vecteurs vitesses aux extrémités [contraintes], si l’un d’eux est nul alors l’extrémité correspondante est considérée comme libre (sans contrainte). Le résultat doit être dessiné avec la commande graphique Bezier.
GrayScale(0/1) ou GrayScale().
Description : cette fonction permet d’activer ou désactiver la conversion des couleurs en niveaux de gris. Elle équivaut à l’option Paramètres/Gérer les couleurs du menu de l’interface graphique.
+Lorsque l’argument est vide, la fonction renvoie l’état actuel de la conversion en niveaux de gris (0 ou 1). Sinon, elle renvoie Nil.
HexaColor( <valeur héxadécimale> )
Description : cette fonction renvoie la couleur correspondant à la <valeur héxadécimale>, cette valeur doit être passée sous forme d’une chaîne de caractères. Voir aussi la commande Rgb.
Exemple(s) : Color:=HexaColor("F5F5DC")
.
Hide( <element1>, ..., <elementN> )
Description : Cette fonction permet de cacher les éléments graphiques appelés <element1>, ..., <elementN> en mettant leur attribut IsVisible à false. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil.
+Pour tout cacher on invoque la commande sans arguments: Hide().
+Pour tout cacher sauf un ou plusieurs éléments, on invoque la commande: Hide(except, element1, ..., elementN). Voir aussi la commande Show.
IdMatrix()
Description : change la matrice courante en la matrice identité. (Voir aussi les commandes ComposeMatrix, SetMatrix, et GetMatrix)
Input( <message> [, titre, chaîne] ).
Description : cette fonction ouvre une boite de dialogue avec <titre> dans la barre de titre (par défaut le titre est vide), et dans laquelle le paramètre <message> est affiché, le paramètre <chaîne> est affiché dans la zone de saisie. Ces paramètres sont donc interprétés comme des chaînes de caractères, l’utilisateur est invité à faire une saisie. S’il valide alors la fonction Input renvoie la valeur 1 et la chaîne saisie est mémorisée dans la macro chaine(). Si l’utilisateur ne valide pas ou si la chaîne saisie est vide, alors la fonction Input renvoie la valeur 0.
Exemple(s) : voir la fonction Eval.
InputMac( <nom de fichier> ) ou Load( <nom de fichier> ).
Description : cette fonction permet de charger en mémoire un fichier de macros (*.mac), ou un fichier modèle (*.mod), ou tout fichier source texgraph (*.teg).
+Dans le premier cas (fichier *.mac), les variables globales et les macros seront considérées comme prédéfinies (elles n’apparaissent pas à l’écran, elles ne seront pas enregistrées avec le graphique, mais elles sont effacées de la mémoire dès qu’on commence un nouveau graphique). Le paramètre <nom de fichier> est une chaîne de caractères représentant le fichier à charger avec éventuellement son chemin. Cette fonction renvoie Nil, et si ce fichier était déjà chargé, alors elle est sans effet. Si le fichier à charger est dans le répertoire macros de TeXgraph, ou dans le dossier TeXgraphMac, alors il est inutile de préciser le chemin.
Exemple(s) : InputMac("MesMacros.mac").
Inc( <variable>, <expression> ).
Description : cette fonction évalue <expression> et ajoute le résultat à <variable>. Cette fonction est plus avantageuse que la commande variable := variable + expression, car dans cette commande la <variable> est évaluée [c’est à dire dupliquée] pour calculer la somme. La fonction Inc renvoie la valeur Nil.
Insert( <liste1>, <liste2> [, position] ).
Description : cette fonction insère la <liste2> dans la <liste1> à la position numéro <position>. Lorsque la position vaut 0 [valeur par défaut]. La <liste2> est ajoutée à la fin. La <liste1> doit être une variable et celle-ci est modifiée. La fonction Insert renvoie la valeur Nil.
Exemple(s) : si une variable L contient la liste [1,4,5], alors après la commande Insert(L,[2,3],2), la variable L contiendra la liste [1,2,3,4,5].
Int( <expression>, <variable>, <borne inf.>, <borne sup.> ).
Description : cette fonction calcule l’intégrale de <expression> par rapport à <variable> sur l’intervalle réel défini par <borne inf.> et <borne sup>. Le calcul est fait à partir de la méthode de {Simpson} accélérée deux fois avec la méthode de {Romberg}, <expression> est supposée définie et suffisamment régulière sur l’intervalle d’intégration.
Exemple(s) : Int(exp(sin(u)),u,0,1) donne 1.63187 (Maple donne 1.631869608).
IsMac( <nom> ).
Description : cette fonction permet de savoir s’il y a une macro appellée <nom>. Elle renvoie 1 si c’est le cas, 0 sinon.
IsVar( <nom> ).
Description : cette fonction permet de savoir s’il y a une variable globale appellée <nom>. Elle renvoie 1 si c’est le cas, 0 sinon.
Liste( <argument1>, ..., <argumentn> ) ou bien [<argument1>, ..., <argumentn>].
Description : cette fonction évalue chaque argument et renvoie la liste des résultats différents de Nil.
Exemple(s) : Liste(1, Arg(1+2*i), sqrt(-1), Solve(cos(x)-x,x,0,1)) renvoie le résultat [1,1.107149,0.739085].
ListFiles().
Description : cette fonction est disponible seulement dans la version GUI de TeXgraph, elle s’utilise dans la barre de commande en bas de la fenêtre, elle affiche alors la liste des fichiers de macros (*.mac) chargés en mémoire.
LoadImage( <image> ).
Description : cette fonction charge le fichier <image>, qui doit être une image png, jpeg ou bmp. Celle-ci est affichée en image de fond et fait partie du graphique, en particulier elle est exportée dans les formats tex (visible seulement dans la version postscript), pgf, pst et teg. Pour le format pgf c’est la version png ou jpg qui sera dans le document, mais pour les versions pst et tex il faut une version eps de l’image. L’argument est interprêté comme une chaîne de caractères, et la fonction renvoie la valeur Nil.
+Lors du chargement, la taille de l’image est adaptée à la fenêtre, mais celle-ci peut être modifiée de manière à conserver les proportions de l’image. Dès lors la position de l’image et sa taille sont fixées. On peut ensuite élargir la fenêtre si on ne veut pas que l’image occupe tout l’espace. Pour modifier la position ou la taille de l’image, il faut recharger celle-ci.
Loop( <expression>, <condition> ).
Description : cette fonction est une boucle qui construit une liste en évaluant <expression> et <condition> jusqu’à ce que le résultat de <condition> soit égal à 1 (pour True) ou Nil, la fonction Loop renvoie alors la liste des résultats de <expression>. Cette commande est la représentation interne de la boucle repeat dont l’utilisation est préférable pour des raisons de lisibilité.
Exemple(s) : les commandes (équivalentes):
+ou encore
+ou encore
+renvoient la liste: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] (termes d’une suite de {Fibonacci} inférieurs à 100).
Map( <expression>, <variable>, <liste> [, mode] ).
Description : cette fonction est une boucle qui construit une liste de la manière suivante: <variable> parcourt les éléments de <liste> et pour chacun d’eux <expression> est évaluée, la fonction Map renvoie la liste des résultats. Cette commande est la représentation interne de la boucle for dont l’utilisation est préférable pour des raisons de lisibilité.
+Le paramètre optionnel <mode> est un complexe qui vaut Nil par défaut, lorsque <mode> = a + ib, alors:
+si a est un entier et b = 0: les éléments de la <liste> sont traités de a en a,
si a est un entier et b = 1: la <liste> est traitée par composante (deux composantes sont séparées par la constante jump) et les éléments de chaque composante sont traités par paquets complets de a éléments, lorsque la constante jump est rencontrée dans la liste, celle-ci est renvoyée dans le résultat. Un paquet non complet n’est pas traité.
si a est un entier et b = - 1: la <liste> est traitée par composante (deux composantes sont séparées par la constante jump) et les éléments de chaque composante sont traités par paquets complets de a éléments, lorsque la constante jump est rencontrée dans la liste, celle-ci n’est pas renvoyée dans le résultat. Un paquet non complet n’est pas traité.
si a = Re(jump): la <liste> est traitée par composante (deux composantes sont séparées par la constante jump), lorsque la constante jump est rencontrée dans la liste, celle-ci est renvoyée dans le résultat si b = 1 et n’est pas renvoyée si b = - 1.
Exemple(s) : voir la boucle for pour des exemples.
Exemple(s) : si L est une variable contenant une liste de points, alors la commande:
+[sum:=0, Map( Inc(sum,z), z, L), sum] renvoie la somme des éléments de L.
la commande Map(z*exp(i*π/3), z, L) renvoie la liste des images des points de L par la rotation de centre O d’angle π/3.
Marges( <gauche>, <droite>, <haut>, <bas> )
Description : cette fonction permet de fixer les marges autour du dessin (en cm). Les nouvelles valeurs sont copiées dans les constantes margeG, margeD, margeH et margeB.
Merge( <liste> ).
Description : cette fonction permet de recoller des morceaux de listes pour avoir des composantes de longeur maximale, elle renvoie la liste qui en résulte.
Exemple(s) : Merge([1, 2, jump, 3, 5, jump, 3, 4, 2] ) renvoie [1, 2, 3, 4, 5]. Et Merge( [1, 2, jump, 3, 5, jump, 3, 4] ) renvoie [1, 2, jump, 4, 3, 5].
+Attention: pour que deux extrêmités soient recollées elles doivent être égales pour la machine.
Message( <chaîne> ).
Description : cette fonction affiche le paramètre <chaîne>[qui est donc interprété comme une chaîne de caractères] dans une fenêtre. Quand l’utilisateur a cliqué sur OK, la fenêtre se referme et la fonction renvoie la valeur Nil.
Move( <element1>, ..., <elementN> ).
Description : cette fonction ne s’applique qu’aux éléments graphiques créés en mode NotXor, ce qui correspond à la valeur 1 de la variable PenMode. Elle redessine les éléments graphiques <element1>, ..., <elementN>, puis les recalcule, puis les redessine, et elle renvoie la valeur Nil.
+Lorsqu’on redessine un élément graphique créé en mode NotXor, il s’efface en restituant le fond, on peut alors modifier sa position et le redessiner. Cette technique permet de faire glisser des objets sans avoir à réafficher tous les autres (ce qui évite d’avoir une image qui saute).
Exemple(s) : voir la fonction Stroke.
Mtransform( <liste>, <matrice> ).
Description : cette fonction applique la <matrice> à la <liste> et renvoie le résultat. Si la <liste> contient la constante jump, celle-ci est renvoyée dans le résultat sans être modifiée. La <matrice> représente l’expression analytique d’une application affine du plan, c’est une liste de trois complexes [z1, z2, z3]: z1 est l’affixe du vecteur de translation, z2 est l’affixe du premier vecteur colonne de la matrice de la partie linéaire dans la base (1,i), et z3 est l’affixe du deuxième vecteur colonne de la matrice de la partie linéaire. Par exemple, la matrice de l’identité s’écrit ainsi: [0,1,i] (c’est la matrice par défaut).
MyExport( <"nom">, <paramètre 1>, ..., <paramètre n> ) ou draw( <"nom">, <paramètre 1>, ..., <paramètre n> )
Description : cette commande permet d’ajouter de nouveaux éléments graphiques avec un export personnalisé. Elle est décrite dans cette section.
Nargs().
Description : cette fonction n’a d’effet que dans une macro, elle renvoie le nombre d’arguments avec lesquels la macro a été appelée. Hors de ce contexte, elle renvoie la valeur Nil. Voir aussi la fonction Args.
Exemple(s) : voici le corps d’une macro MyLabel(affixe1, texte1, affixe2, texte2, ...) prenant un nombre indéterminé d’arguments:
for $k from 1 to Nargs()/2 do
+ Label(Args(2*k-1), Args(2*k))
+ od
+
+NewButton( <Id>, <nom>, <affixe>, <taille>, <commande> [, aide] ).
Description : cette fonction crée dans la zone grisée à gauche dans la fenêtre un bouton dont le numéro d’identification est l’entier <Id>, le texte figurant sur le bouton est le paramètre <nom> qui est donc interprété comme une chaîne de caractères, la position du coin supérieur gauche est donnée par le paramètre <affixe> qui doit être de la forme X+i*Y avec X et Y entiers car ce sont des coordonnées en pixels, la taille du bouton est donnée par le paramètre <taille> qui doit être de la forme long+i*haut où long désigne la longueur du bouton en pixels et haut la hauteur (ce sont donc des entiers), le paramètre <commande> est interprété comme une chaîne de caractères, c’est la commande associée au bouton, chaque clic provoquera l’exécution de cette commande. Le dernier paramètre <aide> est facultatif, il contient le message de la bulle d’aide s’affichant lorsque la souris passe au-dessus du bouton.
+Si on crée un bouton dont le numéro d’identification est déjà pris, alors l’ancien bouton est détruit sauf si c’est un bouton prédéfini (c’est à dire créé au démarrage). À chaque changement de fichier, les boutons non prédéfinis sont détruits. La fonction NewButton renvoie la valeur Nil.
NewGraph( <chaîne1>, <chaîne2> [, code] ).
Description : cette fonction crée un élément graphique Utilisateur ayant pour nom: <chaîne1> et défini par la commande: <chaîne2>. Les deux arguments sont donc interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil. S’il existait déjà un élément graphique portant le même nom, alors celui-ci est écrasé. L’élément graphique est créé mais non dessiné, c’est la fonction ReDraw() qui permet de mettre l’affichage à jour.
+Le troisième paramètre <code> est un entier positif (optionnel), un clic gauche avec la souris sur l’élément graphique créé dans la liste des éléments graphiques, provoquera l’exécution de la macro spéciale ClicGraph( <code> ), cette macro n’existe pas par défaut et peut-être créée par l’utilisateur, elle est utilisée en particulier dans le fichier modèle Mouse.mod (dessin à la souris).
Supposons que l’utilisateur clique sur le point d’affixe 1+i, alors une fenêtre de dialogue s’ouvre avec le message Label= et une ligne de saisie à remplir. Supposons que l’utilisateur entre la chaîne Test et valide, alors la macro va créer un élément graphique utilisateur portant le nom Label1 et défini par la commande Label(1+i,"Test").
On peut aussi utiliser la macro prédéfinie NewLabel et définir la macro ClicG() en écrivant simplement: {NewLabel(%1) }.
Exemple(s) : voici une macro ClicG() permettant la création "à la volée" de labels, on a créé auparavant une variable globale num initialisée à 1:
if Input("Label=")
+ then NewGraph( ["Label",num], ["Label(", %1,",", """",chaine(),""")"] ),
+ ReDraw(), Inc(num,1)
+ fi
+
+NewItem( <nom>, <commande> ).
Description : cette fonction ajoute dans la liste déroulante de la zone grisée à gauche dans la fenêtre, un item appelé <nom>, le deuxième paramètre <commande> est la commande associée à l’item, chaque sélection de l’item provoquera l’exécution de cette commande. Les deux arguments sont interprétés comme des chaînes de caractères. S’il existe déjà un item portant le même nom, alors l’ancien est détruit sauf si c’est un item prédéfini (c’est à dire créé au démarrage). À chaque changement de fichier, les items non prédéfinis sont détruits. La fonction NewItem renvoie la valeur Nil.
NewMac( <nom>, <corps> [, param1, …, paramN]).
Description : cette fonction crée une macro appelée <nom> et dont le contenu est <corps>. Les deux arguments sont donc interprétés comme des chaînes de caractères. Les paramètres optionnels sont des noms de variables, le nom de la variable <param1> est remplacé dans l’expression de la macro par le paramètre %1, le nom <param2> est remplacé par %2 … etc. Cette fonction renvoie la valeur Nil. S’il existait déjà une macro portant le même nom, alors celui-ci est écrasée si elle n’est pas prédéfinie. Si le nom n’est pas valide, ou s’il y a déjà une macro prédéfinie portant ce nom, ou si l’expression <corps> n’est pas correcte, alors la fonction est sans effet.
NewVar( <nom>, <expression> ).
Description : cette fonction crée une variable globale appelée <nom> et dont la valeur est <expression>. Les deux arguments sont donc interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil. S’il existait déjà une variable portant le même nom, alors celle-ci est écrasée. Si le nom n’est pas valide, ou s’il y a déjà une constante portant ce nom, alors la fonction est sans effet. Si <expression> n’est pas correcte, alors la valeur affectée à la variable sera Nil.
Nops( <liste> ).
Description : cette fonction évalue <liste> et renvoie le nombre de complexes qui la composent.
Exemple(s) : Nops([1,2,3] ) renvoie la valeur 3.
NotXor( <element1>, ..., <elementN> ).
Description : cette fonction ne s’applique qu’aux éléments graphiques créés en mode normal, ce qui correspond à la valeur 0 de la variable PenMode. Elle change le mode des éléments graphiques <element1>, ..., <elementN> en mode NotXor puis les recalcule, et elle renvoie la valeur Nil.
+Lorsqu’on redessine un élément graphique qui est en mode NotXor, il s’efface en restituant le fond, on peut alors modifier sa position et le redessiner. Cette technique permet de faire glisser des objets sans avoir à réafficher tous les autres (ce qui évite d’avoir une image qui saute).
Exemple(s) : voir la fonction Move.
OpenFile( <nom fichier> ).
Description : cette fonction permet d’ouvrir un fichier texte en écriture. ATTENTION: s’il existe un fichier du même nom, alors celui-ci sera écrasé.
+En combinaison avec les commandes WriteFile et CloseFile, cela permet à l’utilisateur de créer ses propres fichiers textes.
OriginalCoord( <0/1> ) ou OriginalCoord()
Description : cette fonction détermine si le repère à l’exportation en pstricks et tikz/pgf est identique à celui de l’écran (ce qui correspond à la valeur 1 de l’argument, valeur par défaut), ou non. Lorsque la valeur de l’argument est nulle, le repère à l’exportation (pstricks et tikz/pgf) aura son origine en bas à gauche et l’unité sera le cm sur les deux axes. Cela est utile lorsqu’on travaille dans des répères où certaines valeurs numériques ne sont plus acceptées par .
+Lorsque l’argument vaut 1, les coordonnées des points dans le fichier exporté sont les mêmes qu’à l’écran.
+Lorsque l’argument vaut 0, les coordonnées dans le fichier exporté (tex, pst, tikz/pgf) du point d’affixe z à l’écran, sont x=Re(TexCoord(z)) et y=Im(TeXCoord(z)) (et EpsCoord à la place de TeXCoord pour l’export eps).
+Lorsque l’argument est vide, la fonction renvoie l’état actuel du repère à l’exportation (0 ou 1). Sinon, elle renvoie la valeur Nil.
PermuteWith( <liste d’index>, <liste à permuter>, [, taille des paquets ou jump] )
Description : la <liste à permuter> doit être une variable, celle-ci sera permutée selon le <liste d’index> qui est une liste d’entiers strictement positifs. La <liste à permuter> est traitée par composante si elle contient la constante jump, et les éléments de chaque composante sont traités par paquets (de 1 par défaut) ou par composante entière (une composante se termine par jump), la liste est donc modifiée.
Exemple(s) : :
+[L:=[-1,0,3,5], PermuteWith([4,3,2,1], L), L] renvoie [5,3,0,-1].
[L:=[-1,0,3,5], PermuteWith([4,3,4,1], L), L] renvoie [5,3,5,-1].
[L:=[-1,0,3,5,6,7,8], PermuteWith([4,3,2,1], L, 2), L] renvoie [6,7,3,5,-1,0].
[L:=[-1,jump,0,3,jump,5,6,7,jump,8,jump], PermuteWith( [4,3,3,1,2], L, jump), L] renvoie [8,jump,5,6,7,jump,5,6,7,jump,-1,jump,0,3,jump].
[L:=[-1,jump,0,3,jump,5,6,7,jump,8], PermuteWith([4,3,3,1,2], L, jump), L] renvoie [5,6,7,jump,5,6,7,jump,-1,jump,0,3,jump].
[L:=[-1,1,5,jump,0,3,jump,5,6,7,jump,8,9], PermuteWith( [2,1], L), L] renvoie [1,-1,jump,3,0,jump,6,5,jump,9,8].
ReadData( <fichier> [, type de lecture, séparateur] ).
Description : cette fonction ouvre un <fichier> texte en lecture, celui-ci est supposé contenir une ou plusieurs listes de valeurs numériques. Le premier argument est interprété comme une chaîne de caractères qui contient le nom du fichier (plus éventuellement son chemin). L’argument (optionnel) suivant <type de lecture> est une valeur numérique qui peut valoir:
+<type de lecture>=1: la fonction lit le fichier réel par réel et renvoie la liste ou les listes lues: [x1, x2, ...]
,
<type de lecture>=2: La fonction lit le fichier complexe par complexe, c’est à dire par paquets de deux réels et renvoie la ou les listes lues sous forme d’affixes: [x1+i*x2, x3+i*x4, ...]
. C’est la valeur par défaut,
<type de lecture>=3: La fonction lit le fichier par paquet de 3 réels (points de l’espace ou point3D) et renvoie la ou les listes lues sous la forme: [x1+i*x2, x3, x4+i*x5, x6, ...]
.
Le troisième argument <séparateur>, est interprété comme une chaîne, il est supposé contenir le caractère servant à indiquer la fin de liste, entre deux listes la constante jump sera insérée, cet argument est facultatif et par défaut il n’y a pas de séparateur (ce qui fait donc une seule liste). Lorsque le séparateur est la fin de ligne dans le fichier, on utilisera la chaîne "LF" (line feed) en troisième paramètre. Lorsqu’il y a un séparateur et lorsque la lecture se fait par paquet de 2 ou 3 réels, un paquet non øg complet est ignoré.
Exemple(s) : supposons qu’un fichier texte test.dat contienne exactement ceci:
+1 2 3 4 5/ 6
+7 8 9 10 11/ 12
+13 14 15 16 17/ 18
+
+alors l’exécution de:
+ReadData("test.dat") donne: [1+2*i,3+4*i,5+6*i,7+8*i,9+10*i,11+12*i,13+14*i,15+16*i,17+18*i],
ReadData("test.dat",1,"/") donne: [1,2,3,4,5,jump,6,7,8,9,10,11,jump,12,13,14,15,16,17,jump,18],
ReadData("test.dat",2,"/") donne: [1+2*i,3+4*i,jump,6+7*i,8+9*i,10+11*i,jump,12+13*i,14+15*i,16+17*i,jump],
ReadData("test.dat",3,"/") donne: [1+2*i,3,jump,6+7*i,8,9+10*i,11,jump,12+13*i,14,15+16*i,17,jump],
ReadData("test.dat",3,"LF") donne: [1+2*i,3,4+5*i,6,jump,7+8*i,9,10+11*i,12,jump,13+14*i,15,16+17*i,18,jump].
ReadFlatPs( <fichier> ).
Description : cette fonction ouvre un <fichier> en lecture, celui-ci est censé être un fichier écrit en flattened postscript. La fonction renvoie la liste des chemins contenus dans le fichier, le premier complexe de la liste est largeur+i*hauteur en cm, puis le premier complexe de chaque chemin est Color+i*Width. Chaque chemin se termine par un jump dont la partie imaginaire est un enter négatif: - 1 pour eofill, - 2 pour fill, - 3 pour stroke et - 4 pour clip.
+Il est possible de transformer un fichier pdf ou un fichier postscript en flattened postscript grâce à l’utilitaire pstoedit (http://www.pstoedit.net/
). La macro conv2FlatPs permet cette conversion en supposant que l’utilitaire est installé sur votre système.
La fonction ReadFlatPs est surtout utilisée en interne par la macro loadFlatPs qui en plus du chargement, adpate les coordonnées des points avant de renvoyer à son tour la liste des chemins que l’on peut alors dessiner avec la macro drawFlatPs.
+Ce système est utilisé par la macro NewTeXLabel pour récupérer les formules TeX compilées.
ReCalc( <nom1>, ..., <nomN> ) ou ReCalc().
Description : cette fonction force le recalcul des éléments graphiques dont les noms sont dans la liste même si ceux-ci ne sont pas en mode Recalcul Automatique. Si la liste est vide (ReCalc()) alors tout le graphique est recalculé. Après le recalcul l’affichage est mis à jour et la fonction renvoie Nil.
Attention: l’utilisation de ReCalc() dans un élément graphique entraîne une récursion infinie et donc un plantage du programme!
+ReDraw( <nom1>, ..., <nomN> ) ou ReDraw().
Description : cette fonction (re)dessine les éléments graphiques dont les noms sont dans la liste. Si la liste est vide (ReDraw()) alors tous les élments sont redessinés. Cette fonction renvoie la valeur Nil.
RenCommand( <nom>, <nouveau> ).
Description : cette fonction renomme la commande appelée <nom>. Les deux arguments sont donc interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil. Si le <nom> n’est pas valide, ou s’il n’y a pas de commande portant ce <nom>, ou s’il a déjà une commande portant le nom <nouveau>, alors la fonction est sans effet.
RenMac( <nom>, <nouveau> ).
Description : cette fonction renomme la macro appelée <nom>. Les deux arguments sont donc interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil. Si le <nom> n’est pas valide, ou s’il n’y a pas de macro portant ce <nom>, ou s’il a déjà une macro portant le nom <nouveau>, alors la fonction est sans effet.
RestoreAttr().
Description : restaure l’ensemble des attributs sauvegardés dans une pile par la commande SaveAttr.
Reverse( <liste> ).
Description : renvoie la <liste> inversée.
Rgb( <rouge>, <vert>, <bleu> ).
Description : cette fonction renvoie un entier représentant la couleur dont les trois composantes sont <rouge>, <vert> et <bleu>, ces trois valeurs doivent être des nombres compris entre 0 et 1. Voir aussi la commande HexaColor.
Exemple(s) : Color:= Rgb(0.5,0.5,0.5)) sélectionne le gris.
SaveAttr().
Description : sauvegarde sur une pile l’ensemble des attributs courants. Voir aussi RestoreAttr.
Seq( <expression>, <variable>, <départ>, <fin> [, pas] ).
Description : cette fonction est une boucle qui construit une liste de la manière suivante: <variable> est initialisée à <départ> puis, tant que <variable> est dans l’intervalle (fermé) défini par <départ> et <fin>, on évalue <expression> et on incrémente <variable> de la valeur de <pas>. Le pas peut être négatif mais il doit être non nul. Lorsqu’il n’est pas spécifié, sa valeur par défaut est 1. Lorsque <variable> sort de l’intervalle, la boucle s’arrête et la fonction Seq renvoie la liste des résultats. Cette commande est la représentation interne de la boucle for dont l’utilisation est préférable pour des raisons de lisibilité.
Exemple(s) : Seq(exp(i*k*pi/5,k,1,5) renvoie la liste des racines cinquièmes de l’unité. La commande:
+renverra la valeur Nil mais dessinera un pentagone (voir Ligne) si elle est utilisée dans un élément graphique utilisateur.
Set( <variable>, <valeur> ).
Description : cette fonction permet d’affecter à <variable>3 la <valeur> spécifiée. La fonction Set renvoie la valeur Nil.
+Cette commande est la représentation interne de l’affectation :=, dont l’utilisation est préférable pour des raisons de lisibilité.
SetAttr().
Description : cette fonction n’a d’effet que dans un élément graphique Utilisateur. Elle permet d’affecter aux attributs de l’élément la valeur des attributs actuellement en cours. La fonction SetAttr renvoie la valeur Nil.
SetMatrix( <[z1, z2, z3]> ).
Description : cette fonction permet de modifier la matrice courante (celle-ci affecte tous les éléments graphiques sauf les axes et les grilles dans la version actuelle). Cette matrice représente l’expression analytique d’une application affine du plan, c’est une liste de trois complexes: z1 qui est l’affixe du vecteur de translation, z2 qui est l’affixe du premier vecteur colonne de la matrice de la partie linéaire dans la base (1,i), et z3 qui est l’affixe du deuxième vecteur colonne de la matrice de la partie linéaire. Par exemple, la matrice de l’identité s’écrit ainsi: [0,1,i] (c’est la matrice par défaut). (Voir aussi les commandes GetMatrix, ComposeMatrix, et IdMatrix)
Exemple(s) : si f: z ↦ f(z) est une application affine, alors sa matrice est [f(0), f(1) - f(0), f(i) - f(0)], ce calcul peut-être fait par la macro matrix() de TeXgraph.mac: SetMatrix(matrix(i*bar(z))) affecte la matrice de la symétrie orthogonale par rapport à la première bissectrice.
++++view(-5,5,-3,3), size(7.5), SetMatrix([0,1,1+i]), axes(0,1+i), tMin:=-5, tMax:=5, Color:=red, Width:=8, Cartesienne(2*sin(x)), Color:=black, Arrows:=2, tangente(2*sin(x), pi/2, 1.5), Arrows:=0, LineStyle:=dotted, Ligne( [2*i,pi/2+2*i, pi/2], 0), Point(pi/2+2*i), LabelDot( pi/2, "$\frac{\pi}2$","S",1), IdMatrix()
+
Show( <element1>, ..., <elementN> ).
Description : Cette fonction permet de montrer les éléments graphiques appelés <element1>, ..., <elementN> en mettant leur attribut IsVisible à true. Les arguments sont interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur Nil. Pour tout montrer on invoque la commande sans arguments: Show(). Pour tout montrer sauf un ou plusieurs éléments, on invoque la commande: Show(except, element1, ..., elementN). Voir aussi la commande Hide.
Si( <condition1>, <expression1>, ..., <conditionN>, <expressionN> [, sinon] ).
Description : cette fonction évalue <condition1>. Une condition est une expression dont le résultat de l’évaluation doit être 0 [pour False] ou 1 [pour True], sinon il y a un échec et la fonction renvoie la valeur Nil. Si la condition donne la valeur 1 alors la fonction évalue <expression1> et renvoie le résultat, si elle vaut 0, elle évalue <condition2>, si celle-ci donne la valeur 1 alors la fonction évalue <expression2>, sinon etc... Lorsqu’aucune condition n’est remplie, la fonction évalue l’argument <sinon>, s’il est présent, et renvoie le résultat, sinon la fonction renvoie Nil. Cette commande est la représentation interne de l’alternative if dont la syntaxe est préférable pour des raisons de lisibilité.
Exemple(s) : définition d’une macro f(x) représentant une fonction f d’une variable x définie en plusieurs morceaux:
+c’est à dire f(x) = 1 - exp(π(x + 1)) si x < - 1, f(x) = sin(πx) si - 1 ≤ x < 0, f(x) = sh(πx) sinon.
Solve( <expression>, <variable>, <borne inf.>, <borne sup.> [, n] ).
Description : cette fonction "résout" l’équation <expression>=0 par rapport à la variable réelle <variable> dans l’intervalle défini par <borne inf.> et <borne sup.>. Cet intervalle est subdivisé en <n> parties [par défaut n=25] et on utilise la méthode de { Newton} sur chaque partie. La fonction renvoie la liste des résultats.
Exemple(s) :
+Solve(sin(x), x, -5, 5) donne [-3.141593, 0, 3.141593].
Équation: $\displaystyle \int_0^x \exp(t^2)dt=1$: Solve(Int( exp(u^2),u,0,x)-1, x, 0, 1) donne 0.795172 et l’exécution de Int(exp(u^2), u, 0, 0.795172) donne 1.
Solve( x2 + x + 1, x, -1, 1) renvoie Nil.
Sort( <liste de complexes> [, option] ).
Description : cette fonction trie la liste passée en argument dans l’ordre lexicographique, si l’argument <option> vaut 0 (valeur par défaut), ou dans l’ordre lexicographique inverse si l’argument <option> vaut 1. Cette liste doit être une variable, et celle-ci sera modifiée. Si la liste contient la constante jump alors celle-ci est recopiée telle quelle dans le résultat, et les øg composantes connexes de la liste sont triées indépendamment les unes des autres. La fonction renvoie la valeur Nil.
Exemple(s) : si la variable L contient la liste [-2,-3+i,1,1-2*i, jump, 3,5,-6] alors après l’exécution de Sort(L), la variable contiendra la liste [-3+i,-2,1-2*i,1,jump,-6,3,5], et après l’exécution de Sort(L,1), la variable contiendra la liste [1,1-2*i,-2,-3+i,jump,5,3,-6]. La méthode utilisée est le Quick Sort..
Special( <chaîne> ).
Description : cette fonction n’aura d’effet que dans un élément graphique Utilisateur (comme les fonctions graphiques). L’argument doit être une chaîne de caractères (délimitée par " et "), si cette chaîne contient les balises \[
, et \]
, alors tout le texte contenu entre ces deux balises est interprété par TeXgraph et le résultat est replacé dans la chaîne. Puis cette chaîne sera écrite telle quelle dans le fichier d’exportation (c’est en fait un Label créé avec LabelStyle= special).
Exemple(s) : Special("\psdot(\[1+\],\[2^3\] )"), écrira dans le fichier exporté: \psdot(2,8).
Str( <nom de macro> ).
Description : lors d’une évaluation alphanumérique, cette fonction renvoie la définition de la macro appelée <nom de macro> (sauf si c’est une macro prédéfinie). En dehors de ce contexte, la fonction Str renvoie Nil. L’argument <nom de macro> est lui-même interprété comme une chaîne de caractères.
Exemple(s) : supposons que la macro f soit définie par {%1+i*sin(%1)}, alors la commande {Label(0,["f(%1)=",Str("f")] )} affichera à l’écran à l’affixe 0, le texte: {f(%1)=%1+i*sin(%1)}.
StrArgs( <entier> ).
Description : cette fonction n’a d’effet que dans une macro, elle renvoie l’argument numéro <entier> avec lequel la macro a été appelée, sous forme d’une chaîne. Hors de ce contexte, elle renvoie la valeur Nil. Voir également la commande Args
Exemple(s) : Voir la fonction Nargs.
StrComp( <chaîne1>, <chaîne2> ).
Description : les deux arguments sont interprétés comme une chaîne de caractères, et les deux chaînes sont comparées, si elles sont égales alors la fonction renvoie la valeur 1, sinon la valeur 0.
Exemple(s) : la combinaison de touches: Ctrl+Maj+<lettre> lance automatiquement l’exécution de la macro spéciale: OnKey( <lettre> ). L’utilisateur peut définir cette macro avec par exemple la commande:
+String( <expression mathématique> ).
Description : lors d’une évaluation alphanumérique, cette fonction renvoie <expression mathématique> sous forme d’une chaîne. En dehors de ce contexte, la fonction String renvoie Nil.
Stroke( <element1>, ..., <elementN> ).
Description : cette fonction recalcule les éléments graphiques <element1>, ..., <elementN>, puis les redéssine en mode NORMAL, et renvoie la valeur Nil.
Exemple(s) : on a créé deux variables globales: a et drawing. On va créer le cercle de centre a et de rayon 1, appelé objet1, on souhaite pouvoir déplacer cet objet à la souris. Pour cela, on crée la macro ClicG avec la commande:
[PenMode:=1, {mode NotXor}
+ NewGraph("objet1", "Cercle(a,1)"),
+ PenMode:=0, {mode normal}
+ ReDraw(), {on montre}
+ drawing:=1]
+
+on crée la macro MouseMove avec la commande: if drawing then a:=,
+puis la macro LButtonUp avec la commande: if drawing then Stroke(objet1), drawing:=0 fi.
+La macro ClicG crée l’objet1 en mode NotXor, rafraîchit l’affichage graphique et passe en mode "dessin". La macro MouseMove permet de placer le centre à la position de la souris, puis de déplacer l’objet1. Lorsque le bouton gauche est relâché, on dessine l’objet1 en mode normal, puis on quitte le mode "dessin".
+TeX2FlatPs( <"formule"> [, dollar(0/1)] ).
Description : cette renvoie une <formule> {} sous forme d’une liste de chemins, le résultat doit être dessiné avec la macro drawFlatPs. La <formule> est écrite dans un fichier appelé formula.tex. Ce fichier est appelé par le fichier formule.tex qui se trouve dans le dossier de travail de TeXgraph, pour être compilé par {}. Si l’option <dollar> vaut 1 alors la formule sera délimitée par \]
et \]
, sinon elle est écrite telle quelle. Pour plus de renseignements sur la façon dont sont récupérés ces chemins, voir la commande ReadFlatPs.
Timer( <milli-secondes> ).
Description : règle l’intervalle de temps pour le timer, celui exécute régulièrement une certaine macro (que l’on peut définir avec la commande TimerMac). Pour stopper le timer il suffit de régler l’intervalle de temps à 0.
TimerMac( <corps de la macro à exécuter> ).
Description : cette commande permet de créer une macro qui sera attachée au timer. L’argument est interprété comme une chaîne de caractères et doit correspondre au corps de la macro (celle-ci sera appélée TimerMac). Pour des raisons de performances, il est préférable d’éviter trop d’appels à d’autres macros dans celle-ci. Cette fonction renvoie la valeur 1 si la macro est correctement définie, 0 en cas d’erreur. Attention, l’exécution de TimerMac ne déclenche pas le timer! Il faut utiliser la commande Timer pour cela.
Exemple(s) : soit A une variable globale (un point), soit dotA un élément graphique qui dessine le point, voilà une commande qui déplace A:
+VisibleGraph( <0/1> ) ou VisibleGraph().
Description : cette fonction permet d’activer ou désactiver la zone de dessin dans l’interface graphique. Lorsque celle-ci est désactivée, son contenu ne change plus car il n’y a plus de mise à jour de la zone. Désactiver l’affichage graphique peut permettre dans certains cas un gain de temps pour enregistrer une animation par exemple.
+Lorsque l’argument est vide, la fonction renvoie simplement l’état actuel de l’affichage graphique (0 ou 1). Sinon, elle renvoie Nil.
WriteFile( <argument> ).
Description : cette fonction permet d’écrire soit dans le fichier texte ouvert par la commande OpenFile, soit dans le fichier d’exportation si l’exécution de cette commande a lieu pendant une exportation par l’intermédiare des macros Bsave et/ou Esave.
Exemple(s) : voici ce que pourrait être la macro Bsave pour modifier la taille des flêches en pstricks:
if ExportMode=pst then WriteFile("\psset{arrowscale=3}") fi
+
+C’est la première occurrence de <variable> dans <expression> qui est assignée, car toutes les occurrences pointent sur la même <case mémoire>, sauf éventuellement pour les macros après l’affectation des paramètres. ↩
Si par exemple on veut tracer la courbe représentative de cette fonction, dans l’option Courbe/Paramétrée, il faudra saisir la commande t+i* ∖ df et non pas t+i*df(t). ↩
Il n’est pas nécessaire de déclarer les variables, elles sont implicitement locales et initialisées à Nil sauf si c’est le nom d’une variable globale ou d’une constante prédéfinie (comme i, π, e, ...). ↩
)}, cette macro n'existe pas par défaut et peut-être créée par l'utilisateur, elle est utilisée en particulier
+dans le fichier modèle \textit{Mouse.mod} (dessin à la souris).
+
+\item Supposons que l'utilisateur clique sur le point d'affixe 1+i, alors une fenêtre de dialogue s'ouvre avec le
+message \textsl{Label=} et une ligne de saisie à remplir. Supposons que l'utilisateur entre la chaîne \textsl{Test} et
+valide, alors la macro va créer un élément graphique \textsl{utilisateur} portant le nom \textsl{Label1} et défini par
+la commande \co{Label(1+i,"Test")}.
+
+\item On peut aussi utiliser la macro prédéfinie \textsl{NewLabel} et définir la macro \textsl{ClicG()}
+en écrivant simplement: \co{NewLabel(\%1) }.
+
+\item \exem voici une macro \textsl{ClicG()} permettant la création "à la volée" de labels, on a créé auparavant
+ une variable globale \textsl{num} initialisée à 1:
+\end{itemize}
+
+\begin{verbatim}
+ if Input("Label=")
+ then NewGraph( ["Label",num], ["Label(", %1,",", """",chaine(),""")"] ),
+ ReDraw(), Inc(num,1)
+ fi
+\end{verbatim}
+
+\section{NewItem}\label{cmdNewItem}
+
+\begin{itemize}
+\item \util \textbf[NewItem()]{NewItem( , )}.
+\item \desc cette fonction ajoute dans la liste déroulante de la zone grisée à gauche dans la fenêtre, un item appelé
+\argu{nom}, le deuxième paramètre \argu{commande} est la commande associée à l'item, chaque sélection de l'item
+provoquera l'exécution de cette commande. Les deux arguments sont interprétés comme des chaînes de caractères. S'il
+existe déjà un item portant le même nom, alors l'ancien est détruit \Mytextbf{sauf si c'est un item prédéfini} (c'est Ã
+dire créé au démarrage). à chaque changement de fichier, les items non prédéfinis sont détruits. La fonction
+\textsl{NewItem} renvoie la valeur \Nil.
+\end{itemize}
+
+\section{NewMac}\label{cmdNewMac}
+
+\begin{itemize}
+\item \util \textbf[NewMac()]{NewMac( , [, param1, $\ldots$, paramN])}.
+\item \desc cette fonction crée une macro appelée \argu{nom} et dont le contenu est \argu{corps}. Les deux arguments
+sont donc interprétés comme des chaînes de caractères. Les paramètres optionnels sont des noms de variables, le nom de
+la variable \argu{param1} est remplacé dans l'expression de la macro par le paramètre \%1, le nom \argu{param2} est
+remplacé par \%2 $\ldots$ etc. Cette fonction renvoie la valeur \Nil. S'il existait déjà une macro portant le même nom,
+alors celui-ci est écrasée \Mytextbf{si elle n'est pas prédéfinie}. Si le nom n'est pas valide, ou s'il y a déjà une
+macro prédéfinie portant ce nom, ou si l'expression \argu{corps} n'est pas correcte, alors la fonction est sans effet.
+\end{itemize}
+
+\section{NewVar}\label{cmdNewVar}
+\begin{itemize}
+\item \util \textbf[NewVar()]{NewVar( , )}.
+\item \desc cette fonction crée une variable globale appelée \argu{nom} et dont la valeur est \argu{expression}. Les
+deux arguments sont donc interprétés comme des chaînes de caractères. Cette fonction renvoie la valeur \Nil. S'il
+existait déjà une variable portant le même nom, alors celle-ci est écrasée. Si le nom n'est pas valide, ou s'il y a déjÃ
+une constante portant ce nom, alors la fonction est sans effet. Si \argu{expression} n'est pas correcte, alors la valeur
+affectée à la variable sera \Nil.
+\end{itemize}
+
+
+\section{Nops}\label{cmdNops}
+\begin{itemize}
+\item \util \textbf[Nops()]{Nops( )}.
+\item \desc cette fonction évalue \argu{liste} et renvoie le nombre de complexes qui la composent.
+\item \exem \co{Nops([1,2,3] )} renvoie la valeur \res{3}.
+\end{itemize}
+
+\section{NotXor}\label{cmdNotXor}
+
+\begin{itemize}
+\item \util \textbf[NotXor()]{NotXor( , ..., )}.
+\item \desc cette fonction ne s'applique qu'aux éléments graphiques créés en mode normal, ce qui correspond à la valeur
+0 de la variable \Helpref{PenMode}{cmdPenMode}. Elle change le mode des éléments graphiques \argu{element1}, ...,
+\argu{elementN} en mode NotXor puis les recalcule, et elle renvoie la valeur \Nil.
+
+Lorsqu'on redessine un élément graphique qui est en mode NotXor, il s'efface en restituant le fond, on peut alors
+modifier sa position et le redessiner. Cette technique permet de faire glisser des objets sans avoir à réafficher tous
+les autres (ce qui évite d'avoir une image qui saute).
+\item\exem voir la fonction \Helpref{Move}{cmdMove}.
+\end{itemize}
+
+\section{OpenFile}\label{cmdOpenFile}
+
+\begin{itemize}
+\item \util \textbf[OpenFile()]{OpenFile( )}.
+\item \desc cette fonction permet d'ouvrir un fichier texte en écriture. ATTENTION: s'il existe un fichier du même nom,
+alors celui-ci sera écrasé.
+
+En combinaison avec les commandes \Helpref{WriteFile}{cmdWriteFile} et \Helpref{CloseFile}{cmdCloseFile}, cela permet Ã
+l'utilisateur de créer ses propres fichiers textes.
+\end{itemize}
+
+
+\section{OriginalCoord}\label{cmdOriginalCoord}
+
+\begin{itemize}
+\item \util \Mytextbf{OriginalCoord( <0/1> )} ou \textbf[OriginalCoord()]{OriginalCoord()}
+\item \desc cette fonction détermine si le repère à l'exportation en \textit{pstricks} et \textit{tikz/pgf} est
+identique à celui de l'écran (ce qui correspond à la valeur 1 de l'argument, valeur par défaut), ou non. Lorsque la
+valeur de l'argument est nulle, le repère à l'exportation (\textit{pstricks} et \textit{tikz/pgf}) aura son origine en
+bas à gauche et l'unité sera le cm sur les deux axes. Cela est utile lorsqu'on travaille dans des répères où certaines
+valeurs numériques ne sont plus acceptées par \TeX.
+
+Lorsque l'argument vaut 1, les coordonnées des points dans le fichier exporté sont les mêmes qu'à l'écran.
+
+Lorsque l'argument vaut 0, les coordonnées dans le fichier exporté (tex, pst, tikz/pgf) du point d'affixe z à l'écran,
+sont x=Re(TexCoord(z)) et y=Im(TeXCoord(z)) (et EpsCoord à la place de TeXCoord pour l'export eps).
+
+Lorsque l'argument est vide, la fonction renvoie l'état actuel du repère à l'exportation (0 ou 1). Sinon, elle renvoie
+la valeur \Nil.
+\end{itemize}
+
+\section{PermuteWith}\label{cmdPermuteWith}
+
+\begin{itemize}
+\item \util \textbf[PermuteWith()]{PermuteWith( , , [, taille des paquets ou jump] )}
+\item \desc la \argu{liste à permuter} doit être une variable, celle-ci sera permutée selon le \argu{liste d'index} qui
+est une liste d'entiers strictement positifs. La \argu{liste à permuter} est traitée par composante si elle contient
+la constante \jump, et les éléments de chaque composante sont traités par paquets (de $1$ par défaut) ou par
+composante entière (une composante se termine par \jump), la liste est donc modifiée.
+\item \exem:
+\begin{itemize}
+\item \co{[L:=[-1,0,3,5], PermuteWith([4,3,2,1], L), L]} renvoie \res{[5,3,0,-1]}.
+\item \co{[L:=[-1,0,3,5], PermuteWith([4,3,4,1], L), L]} renvoie \res{[5,3,5,-1]}.
+\item \co{[L:=[-1,0,3,5,6,7,8], PermuteWith([4,3,2,1], L, 2), L]} renvoie \res{[6,7,3,5,-1,0]}.
+\item \co{[L:=[-1,jump,0,3,jump,5,6,7,jump,8,jump], PermuteWith( [4,3,3,1,2], L, jump), L]} renvoie
+\res{[8,jump,5,6,7,jump,5,6,7,jump,-1,jump,0,3,jump]}.
+\item \co{[L:=[-1,jump,0,3,jump,5,6,7,jump,8], PermuteWith([4,3,3,1,2], L, jump), L]} renvoie
+\res{[5,6,7,jump,5,6,7,jump,-1,jump,0,3,jump]}.
+\item \co{[L:=[-1,1,5,jump,0,3,jump,5,6,7,jump,8,9], PermuteWith( [2,1], L), L]} renvoie
+\res{[1,-1,jump,3,0,jump,6,5,jump,9,8]}.
+\end{itemize}
+\end{itemize}
+
+\section{ReadData}\label{cmdReadData}
+
+\begin{itemize}
+\item \util \textbf[ReadData()]{ReadData( [, type de lecture, séparateur] )}.
+\item \desc cette fonction ouvre un \argu{fichier} texte en lecture, celui-ci est supposé contenir une ou plusieurs
+listes de valeurs numériques. Le premier argument est interprété comme une \Helpref{chaîne de caractères}{chaine} qui
+contient le nom du fichier (plus éventuellement son chemin). L'argument (optionnel) suivant \argu{type de lecture} est
+une valeur numérique qui peut valoir:
+\begin{itemize}
+\item \argu{type de lecture}=1: la fonction lit le fichier réel par réel et renvoie la liste ou les listes lues:
+\verb|[x1, x2, ...]|,
+\item \argu{type de lecture}=2: La fonction lit le fichier complexe par complexe, c'est à dire \Mytextbf{par paquets de
+deux réels} et renvoie la ou les listes lues sous forme d'affixes: \verb|[x1+i*x2, x3+i*x4, ...]|. C'est la valeur par
+défaut,
+\item \argu{type de lecture}=3: La fonction lit le fichier par paquet de 3 réels (points de l'espace ou point3D) et
+renvoie la ou les listes lues sous la forme: \verb|[x1+i*x2, x3, x4+i*x5, x6, ...]|.
+\end{itemize}
+
+Le troisième argument \argu{séparateur}, est interprété comme une chaîne, il est supposé contenir le caractère servant Ã
+indiquer la fin de liste, entre deux listes la constante \jump sera insérée, cet argument est facultatif et par défaut
+il n'y a pas de séparateur (ce qui fait donc une seule liste). Lorsque le séparateur est la fin de ligne dans le
+fichier, on utilisera la chaîne \co{"LF"} (\textit{line feed}) en troisième paramètre. Lorsqu'il y a un séparateur et
+lorsque la lecture se fait par paquet de 2 ou 3 réels, un paquet non \og complet\fg\ est ignoré.
+\item \exem supposons qu'un fichier texte \textit{test.dat} contienne exactement ceci:
+
+\begin{verbatim}
+1 2 3 4 5/ 6
+7 8 9 10 11/ 12
+13 14 15 16 17/ 18
+\end{verbatim}
+
+alors l'exécution de:
+ \begin{itemize}
+ \item \co{ReadData("test.dat")} donne: \res{[1+2*i,3+4*i,5+6*i,7+8*i,9+10*i,11+12*i,13+14*i,15+16*i,17+18*i]},
+ \item \co{ReadData("test.dat",1,"/")} donne:
+\res{[1,2,3,4,5,jump,6,7,8,9,10,11,jump,12,13,14,15,16,17,jump,18]},
+ \item \co{ReadData("test.dat",2,"/")} donne:
+\res{[1+2*i,3+4*i,jump,6+7*i,8+9*i,10+11*i,jump,12+13*i,14+15*i,16+17*i,jump]},
+ \item \co{ReadData("test.dat",3,"/")} donne:
+\res{[1+2*i,3,jump,6+7*i,8,9+10*i,11,jump,12+13*i,14,15+16*i,17,jump]},
+ \item \co{ReadData("test.dat",3,"LF")} donne:
+\res{[1+2*i,3,4+5*i,6,jump,7+8*i,9,10+11*i,12,jump,13+14*i,15,16+17*i,18,jump]}.
+ \end{itemize}
+\end{itemize}
+
+
+\section{ReadFlatPs}\label{cmdReadFlatPs}
+
+\begin{itemize}
+\item \util \textbf[ReadFlatPs()]{ReadFlatPs( )}.
+\item \desc cette fonction ouvre un \argu{fichier} en lecture, celui-ci est censé être un fichier écrit en
+\textit{flattened postscript}. La fonction renvoie la liste des chemins contenus dans le fichier, le premier complexe de
+la liste est \textit{largeur+i*hauteur} en cm, puis le premier complexe de chaque chemin est \textit{Color+i*Width}.
+Chaque chemin se termine par un \jump dont la partie imaginaire est un enter négatif: $-1$ pour eofill, $-2$ pour fill,
+$-3$ pour stroke et $-4$ pour clip.
+
+Il est possible de transformer un fichier pdf ou un fichier postscript en \textit{flattened postscript} grâce Ã
+l'utilitaire \textit{pstoedit} (\url{http://www.pstoedit.net/}). La macro \Helpref{{conv2FlatPs}}{macconv2FlatPs} permet
+cette conversion en supposant que l'utilitaire est installé sur votre système.
+
+La fonction \textsl{ReadFlatPs} est surtout utilisée en interne par la macro \Helpref{{loadFlatPs}}{macloadFlatPs} qui
+en plus du chargement, adpate les coordonnées des points avant de renvoyer à son tour la liste des chemins que l'on peut
+alors dessiner avec la macro \Helpref{{drawFlatPs}}{macdrawFlatPs}.
+
+Ce système est utilisé par la macro \Helpref{{NewTeXLabel}}{macNewTeXlabel} pour récupérer les formules TeX compilées.
+\end{itemize}
+
+
+\section{ReCalc}\label{cmdReCalc}
+
+\begin{itemize}
+\item \util \Mytextbf{ReCalc( , ..., )} ou \textbf[ReCalc()]{ReCalc()}.
+\item \desc cette fonction force le recalcul des éléments graphiques dont les noms sont dans la liste même si ceux-ci
+ne sont pas en mode \textsl{Recalcul Automatique}. Si la liste est vide (\textsl{ReCalc()}) alors tout le graphique est
+recalculé. Après le recalcul l'affichage est mis à jour et la fonction renvoie \Nil.
+\end{itemize}
+
+\Mytextbf{Attention}: l'utilisation de \textsl{ReCalc()} dans un élément graphique entraîne une récursion infinie et
+donc un plantage du programme!
+
+\section{ReDraw}\label{cmdReDraw}
+
+\begin{itemize}
+\item \util \Mytextbf{ReDraw( , ..., )} ou \textbf[ReDraw()]{ReDraw()}.
+\item \desc cette fonction (re)dessine les éléments graphiques dont les noms sont dans la liste. Si la liste est vide
+(\textsl{ReDraw()}) alors tous les élments sont redessinés. Cette fonction renvoie la valeur \Nil.
+\end{itemize}
+
+\section{RenCommand}\label{cmdRenCommand}
+
+\begin{itemize}
+\item \util \textbf[RenCommand()]{RenCommand( , )}.
+\item \desc cette fonction renomme la commande appelée \argu{nom}. Les deux arguments sont donc interprétés comme des
+chaînes de caractères. Cette fonction renvoie la valeur \Nil. Si le \argu{nom} n'est pas valide, ou s'il n'y a pas
+de commande portant ce \argu{nom}, ou s'il a déjà une commande portant le nom \argu{nouveau}, alors la fonction est sans
+effet.
+\end{itemize}
+
+\section{RenMac}\label{cmdRenMac}
+
+\begin{itemize}
+\item \util \textbf[RenMac()]{RenMac( , )}.
+\item \desc cette fonction renomme la macro appelée \argu{nom}. Les deux arguments sont donc interprétés comme des
+chaînes de caractères. Cette fonction renvoie la valeur \Nil. Si le \argu{nom} n'est pas valide, ou s'il n'y a pas
+de macro portant ce \argu{nom}, ou s'il a déjà une macro portant le nom \argu{nouveau}, alors la fonction est sans
+effet.
+\end{itemize}
+
+
+\section{RestoreAttr}\label{cmdRestoreAttr}
+
+\begin{itemize}
+\item \util \textbf[RestoreAttr()]{RestoreAttr()}.
+\item \desc restaure l'ensemble des attributs sauvegardés dans une pile par la commande \Helpref{SaveAttr}{cmdSaveAttr}.
+\end{itemize}
+
+
+\section{Reverse}\label{cmdReverse}
+\begin{itemize}
+\item \util \textbf[Reverse()]{Reverse( )}.
+\item \desc renvoie la \argu{liste} inversée.
+\end{itemize}
+
+\section{Rgb}\label{cmdRgb}
+
+\begin{itemize}
+\item \util \textbf[Rgb()]{Rgb( , , )}.
+\item \desc cette fonction renvoie un entier représentant la couleur dont les trois composantes sont \argu{rouge},
+\argu{vert} et \argu{bleu}, ces trois valeurs doivent être des nombres \Mytextbf{compris entre 0 et 1}. Voir aussi la
+commande \Helpref{HexaColor}{cmdHexaColor}.
+\item \exem \co{Color:= Rgb(0.5,0.5,0.5))} sélectionne le gris.
+\end{itemize}
+
+\section{SaveAttr}\label{cmdSaveAttr}
+
+\begin{itemize}
+\item \util \textbf[SaveAttr()]{SaveAttr()}.
+\item \desc sauvegarde sur une pile l'ensemble des attributs courants. Voir aussi \Helpref{RestoreAttr}{cmdRestoreAttr}.
+\end{itemize}
+
+
+\section{Seq}\label{cmdSeq}
+
+\begin{itemize}
+\item \util \textbf[Seq()]{Seq( , , , [, pas] )}.
+\item \desc cette fonction est une \Mytextbf{boucle} qui construit une liste de la manière suivante: \argu{variable}
+est initialisée à \argu{départ} puis, tant que \argu{variable} est dans l'intervalle (fermé) défini par \argu{départ}
+et \argu{fin}, on évalue \argu{expression} et on incrémente \argu{variable} de la valeur de \argu{pas}. Le pas peut être
+ négatif mais il doit être non nul. Lorsqu'il n'est pas spécifié, sa valeur par défaut est 1. Lorsque \argu{variable}
+sort de l'intervalle, la boucle s'arrête et la fonction \textsl{Seq} renvoie la liste des résultats. Cette commande est
+la représentation interne de la boucle \Helpref{{for}}{cmdfor} dont l'utilisation est préférable pour des raisons de
+lisibilité.
+\item \exem \co{Seq(exp(i*k*pi/5,k,1,5)} renvoie la liste des racines cinquièmes de l'unité. La commande:
+
+\centerline{\co{Ligne( Seq( exp(2*i*k*pi/5, k, 1, 5), 1)}}
+
+renverra la valeur \Nil mais dessinera un pentagone (voir \Helpref{Ligne}{cmdLigne}) si elle est utilisée dans un
+élément graphique \textit{utilisateur}.
+\end{itemize}
+
+\section{Set}\label{cmdSet}
+
+\begin{itemize}
+\item \util \textbf[Set()]{Set( , )}.
+\item \desc cette fonction permet d'affecter à \argu{variable}\footnote{Il n'est pas nécessaire de déclarer les
+variables, elles sont implicitement locales et initialisées à \Nil sauf si c'est le nom d'une variable globale ou d'une
+constante prédéfinie (comme i, $\pi$, e, ...).} la \argu{valeur} spécifiée. La fonction \textsl{Set} renvoie la valeur
+\Nil.
+
+Cette commande est la représentation interne de l'affectation \textsl{:=}, dont l'utilisation est préférable pour des
+raisons de lisibilité.
+\end{itemize}
+
+\section{SetAttr}\label{cmdSetAttr}
+
+\begin{itemize}
+\item \util \textbf[SetAttr()]{SetAttr()}.
+\item \desc cette fonction n'a d'effet que dans un élément graphique Utilisateur. Elle permet d'affecter aux attributs
+de l'élément la valeur des attributs actuellement en cours. La fonction \textsl{SetAttr} renvoie la valeur \Nil.
+\end{itemize}
+
+\section{SetMatrix}\label{cmdSetMatrix}
+
+\begin{itemize}
+\item \util \textbf[SetMatrix()]{SetMatrix( <[z1, z2, z3]> )}.
+\item \desc cette fonction permet de modifier la matrice courante (celle-ci affecte tous les éléments graphiques sauf
+les axes et les grilles dans la version actuelle). Cette matrice représente l'expression analytique d'une application
+affine du plan, c'est une liste de trois complexes: $z1$ qui est l'affixe du vecteur de translation, $z2$ qui est
+l'affixe du premier vecteur colonne de la matrice de la partie linéaire dans la base (1,i), et $z3$ qui est l'affixe du
+deuxième vecteur colonne de la matrice de la partie linéaire. Par exemple, la matrice de l'identité s'écrit ainsi:
+[0,1,i] (c'est la matrice par défaut). (Voir aussi les commandes \Helpref{GetMatrix}{cmdGetMatrix},
+\Helpref{ComposeMatrix}{cmdComposeMatrix}, et \Helpref{IdMatrix}{cmdIdMatrix})
+
+\item \exem si $f:z \mapsto f(z)$ est une application affine, alors sa matrice est $[f(0), f(1)-f(0), f(i)-f(0)]$, ce
+calcul peut-être fait par la macro \textit{matrix()} de TeXgraph.mac: \co{SetMatrix(matrix(i*bar(z)))} affecte la
+matrice de la symétrie orthogonale par rapport à la première bissectrice.
+\end{itemize}
+
+
+\begin{demo}{Repère non orthogonal}{SetMatrix}
+\begin{texgraph}[name=SetMatrix, export=pgf]
+view(-5,5,-3,3), size(7.5),
+SetMatrix([0,1,1+i]), axes(0,1+i),
+tMin:=-5, tMax:=5,
+Color:=red, Width:=8, Cartesienne(2*sin(x)),
+Color:=black, Arrows:=2,
+tangente(2*sin(x), pi/2, 1.5),
+Arrows:=0, LineStyle:=dotted,
+Ligne( [2*i,pi/2+2*i, pi/2], 0),
+Point(pi/2+2*i),
+LabelDot( pi/2, "$\frac{\pi}2$","S",1),
+IdMatrix()
+\end{texgraph}
+\end{demo}
+
+
+\section{Show}\label{cmdShow}
+
+\begin{itemize}
+\item \util \textbf[Show()]{Show( , ..., )}.
+\item \desc Cette fonction permet de montrer les éléments graphiques appelés \argu{element1}, ..., \argu{elementN} en
+mettant leur attribut \textsl{IsVisible} à true. Les arguments sont interprétés comme des chaînes de caractères. Cette
+fonction renvoie la valeur \Nil. Pour tout montrer on invoque la commande sans arguments: \textsl{Show()}. Pour tout
+montrer sauf un ou plusieurs éléments, on invoque la commande: \co{Show(except, element1, ..., elementN)}. Voir aussi la
+commande \Helpref{Hide}{cmdHide}.
+\end{itemize}
+
+
+\section{Si}\label{cmdSi}
+
+\begin{itemize}
+\item \util \textbf[Si()]{Si( , , ..., , [, sinon] )}.
+\item \desc cette fonction évalue \argu{condition1}. Une condition est une expression dont le résultat de l'évaluation
+doit être 0 [pour \textit{False}] ou 1 [pour \textit{True}], sinon il y a un échec et la fonction renvoie la valeur
+\Nil. Si la condition donne la valeur 1 alors la fonction évalue \argu{expression1} et renvoie le résultat, si elle vaut
+0, elle évalue \argu{condition2}, si celle-ci donne la valeur 1 alors la fonction évalue \argu{expression2}, sinon
+etc... Lorsqu'aucune condition n'est remplie, la fonction évalue l'argument \argu{sinon}, s'il est présent, et renvoie
+le résultat, sinon la fonction renvoie \Nil. Cette commande est la représentation interne de l'alternative
+\Helpref{{if}}{cmdif} dont la syntaxe est préférable pour des raisons de lisibilité.
+
+\item \exem définition d'une macro \co{f(x)} représentant une fonction f d'une variable x
+définie en plusieurs morceaux:
+
+\centerline{\co{Si(\%1<-1,1-exp(pi*(\%1+1)),\%1<0,sin($\pi$*\%1),sh(pi*\%1))},}
+
+c'est à dire $f(x)=1-exp(\pi(x+1))$ si $x<-1$, $f(x)=sin(\pi x)$ si $-1\leqslant x<0$, $f(x)=$sh$(\pi x)$ sinon.
+
+\end{itemize}
+
+
+\section{Solve}\label{cmdSolve}
+
+\begin{itemize}
+\item \util \textbf[Solve()]{Solve( , , , [, n] )}.
+\item \desc cette fonction "résout" l'équation \argu{expression}=0 par rapport à la variable \Mytextbf{réelle}
+\argu{variable} dans l'intervalle défini par \argu{borne inf.} et \argu{borne sup.}. Cet intervalle est subdivisé en
+\argu{n} parties [par défaut n=25] et on utilise la méthode de {\sc Newton} sur chaque partie. La fonction renvoie la
+liste des résultats.
+\item \exem
+\begin{itemize}
+ \item \co{Solve(sin(x), x, -5, 5)} donne \res{[-3.141593, 0, 3.141593]}.
+
+ \item Ãquation: $\displaystyle \int_0^x \exp(t^2)dt=1$: \co{Solve(Int( exp(u\^{}2),u,0,x)-1, x, 0, 1)} donne
+\res{0.795172} et l'exécution de \co{Int(exp(u\^{}2), u, 0, 0.795172)} donne \res{1}.
+
+ \item \co{Solve( $x^2+x+1$, x, -1, 1)} renvoie \Nil.
+ \end{itemize}
+\end{itemize}
+
+\section{Sort}\label{cmdSort}
+
+\begin{itemize}
+\item \util \textbf[Sort()]{Sort( [, option] )}.
+\item \desc cette fonction trie la liste passée en argument dans l'ordre lexicographique, si l'argument \argu{option}
+vaut 0 (valeur par défaut), ou dans l'ordre lexicographique inverse si l'argument \argu{option} vaut 1. Cette liste doit
+être une variable, et celle-ci sera modifiée. Si la liste contient la constante \jump alors celle-ci est recopiée telle
+quelle dans le résultat, et les \og composantes connexes\fg\ de la liste sont triées indépendamment les unes des autres.
+La fonction renvoie la valeur \Nil.
+\item \exem si la variable \textsl{L} contient la liste \res{[-2,-3+i,1,1-2*i, jump, 3,5,-6]} alors après l'exécution
+de \co{Sort(L)}, la variable contiendra la liste \res{[-3+i,-2,1-2*i,1,jump,-6,3,5]}, et après l'exécution de
+\co{Sort(L,1)}, la variable contiendra la liste \res{[1,1-2*i,-2,-3+i,jump,5,3,-6]}. La méthode utilisée est le Quick
+Sort..
+\end{itemize}
+
+\section{Special}\label{cmdSpecial}
+
+\begin{itemize}
+\item \util \textbf[Special()]{Special( )}.
+\item \desc cette fonction n'aura d'effet que dans un élément graphique Utilisateur (comme les fonctions graphiques).
+L'argument doit être une chaîne de caractères (délimitée par " et "), si cette chaîne contient les balises \verb|\[|,
+et \verb|\]|, alors tout le texte contenu entre ces deux balises est interprété par TeXgraph et le résultat est replacé
+dans la chaîne. Puis cette chaîne sera écrite telle quelle dans le fichier d'exportation (c'est en fait un Label créé
+avec LabelStyle= special).
+\item \exem \co{Special("\bks psdot(\bks[1+\bks],\bks[2\^{}3\bks] )")}, écrira dans le fichier exporté: \res{\bks
+psdot(2,8)}.
+\end{itemize}
+
+\section{Str}\label{Str}
+
+\begin{itemize}
+\item \util \textbf[Str()]{Str( )}.
+\item \desc lors d'une évaluation alphanumérique, cette fonction renvoie la définition de la macro appelée \argu{nom de
+macro} (sauf si c'est une macro prédéfinie). En dehors de ce contexte, la fonction \textsl{Str} renvoie \Nil. L'argument
+\argu{nom de macro} est lui-même interprété comme une chaîne de caractères.
+\item \exem supposons que la macro \co{f} soit définie par \co{\%1+i*sin(\%1)}, alors la commande
+\co{Label(0,["f(\%1)=",Str("f")] )} affichera à l'écran à l'affixe 0, le texte: \res{f(\%1)=\%1+i*sin(\%1)}.
+\end{itemize}
+
+\section{StrArgs}\label{cmdStrArgs}
+
+\begin{itemize}
+\item \util \textbf[StrArgs()]{StrArgs( )}.
+\item \desc cette fonction n'a d'effet que dans une macro, elle renvoie l'argument numéro \argu{entier} avec lequel la
+macro a été appelée, sous forme d'une chaîne. Hors de ce contexte, elle renvoie la valeur \Nil. Voir également la
+commande \Helpref{Args}{cmdArgs}
+\item\exem Voir la fonction \Helpref{Nargs}{cmdNargs}.
+\end{itemize}
+
+\section{StrComp}\label{cmdStrComp}
+
+\begin{itemize}
+\item \util \textbf[StrComp()]{StrComp( , )}.
+\item \desc les deux arguments sont interprétés comme une chaîne de caractères, et les deux chaînes sont comparées, si
+elles sont égales alors la fonction renvoie la valeur 1, sinon la valeur 0.
+\item \exem la combinaison de touches: Ctrl+Maj+ lance automatiquement l'exécution de la macro spéciale:
+\textsl{ OnKey( )}. L'utilisateur peut définir cette macro avec par exemple la commande:
+
+\centerline{\co{if StrComp(\%1, "A") then Message("Lettre A") fi}}
+\end{itemize}
+
+\section{String}\label{cmdString}
+
+\begin{itemize}
+\item \util \textbf[String()]{String( )}.
+\item \desc lors d'une évaluation alphanumérique, cette fonction renvoie \argu{expression mathématique} sous forme d'une
+chaîne. En dehors de ce contexte, la fonction \textsl{String} renvoie \Nil.
+\end{itemize}
+
+\section{Stroke}\label{cmdStroke}
+
+\begin{itemize}
+\item \util \textbf[Stroke()]{Stroke( , ..., )}.
+
+\item \desc cette fonction recalcule les éléments graphiques \argu{element1}, ..., \argu{elementN}, puis les redéssine
+en mode NORMAL, et renvoie la valeur \Nil.
+
+\item\exem on a créé deux variables globales: $a$ et \textit{drawing}. On va créer le cercle de centre a et de rayon 1,
+appelé \textsl{objet1}, on souhaite pouvoir déplacer cet objet à la souris. Pour cela, on crée la macro \textsl{ClicG}
+avec la commande:
+\end{itemize}
+
+\begin{verbatim}
+ [PenMode:=1, {mode NotXor}
+ NewGraph("objet1", "Cercle(a,1)"),
+ PenMode:=0, {mode normal}
+ ReDraw(), {on montre}
+ drawing:=1]
+\end{verbatim}
+
+on crée la macro \res{MouseMove} avec la commande: \co{if drawing then a:=\%1 \{on déplace le centre\}, Move(objet1)
+fi},
+
+puis la macro \res{LButtonUp} avec la commande: \co{if drawing then Stroke(objet1), drawing:=0 fi}.
+
+La macro \textsl{ClicG} crée l'objet1 en mode NotXor, rafraîchit l'affichage graphique et passe en mode "dessin". La
+macro \textsl{ MouseMove} permet de placer le centre à la position de la souris, puis de déplacer l'objet1. Lorsque le
+bouton gauche est relâché, on dessine l'objet1 en mode normal, puis on quitte le mode "dessin".
+
+
+\section{TeX2FlatPs}\label{cmdTeX2FlatPs}
+
+\begin{itemize}
+\item \util \textbf[TeX2FlatPs()]{TeX2FlatPs( <"formule"> [, dollar(0/1)] )}.
+
+\item \desc cette renvoie une \argu{formule} \TeX{} sous forme d'une liste de chemins, le résultat doit être dessiné
+avec la macro \Helpref{{drawFlatPs}}{macdrawFlatPs}. La \argu{formule} est écrite dans un fichier appelé
+\textit{formula.tex}. Ce fichier est appelé par le fichier \textit{formule.tex} qui se trouve dans le dossier de
+travail de TeXgraph, pour être compilé par \TeX{}. Si l'option \argu{dollar} vaut $1$ alors la formule sera délimitée
+par \verb|\]| et \verb|\]|, sinon elle est écrite telle quelle. Pour plus de renseignements sur la façon dont sont
+récupérés ces chemins, voir la commande \Helpref{{ReadFlatPs}}{cmdReadFlatPs}.
+\end{itemize}
+
+
+\section{Timer}\label{cmdTimer}
+
+\begin{itemize}
+\item \util \textbf[Timer()]{Timer( )}.
+
+\item \desc règle l'intervalle de temps pour le timer, celui exécute régulièrement une certaine macro (que l'on peut
+définir avec la commande TimerMac). Pour stopper le timer il suffit de régler l'intervalle de temps à 0.
+\end{itemize}
+
+\section{TimerMac}\label{cmdTimerMac}
+
+\begin{itemize}
+\item \util \textbf[TimerMac()]{TimerMac( )}.
+
+\item \desc cette commande permet de créer une macro qui sera attachée au timer. L'argument est interprété comme une
+chaîne de caractères et doit correspondre au corps de la macro (celle-ci sera appélée TimerMac). Pour des raisons de
+performances, il est préférable d'éviter trop d'appels à d'autres macros dans celle-ci. Cette fonction renvoie la valeur
+1 si la macro est correctement définie, 0 en cas d'erreur. Attention, l'exécution de TimerMac ne déclenche pas le timer!
+Il faut utiliser la commande Timer pour cela.
+
+\item \exem soit $A$ une variable globale (un point), soit \textit{dotA} un élément graphique qui dessine le point,
+voilà une commande qui déplace $A$:
+
+\centerline{
+\co{[TimerMac("[Inc(A,0.1), if Re(A)>5 then Timer(0) else ReCalc(dotA) fi]"), A:=-5, Timer(10)]}}
+\end{itemize}
+
+\section{VisibleGraph}\label{cmdVisibleGraph}
+
+\begin{itemize}
+\item \util \Mytextbf{VisibleGraph( <0/1> )} ou \textbf[VisibleGraph()]{VisibleGraph()}.
+
+\item \desc cette fonction permet d'activer ou désactiver la zone de dessin dans l'interface graphique. Lorsque
+celle-ci est désactivée, son contenu ne change plus car il n'y a plus de mise à jour de la zone. Désactiver l'affichage
+graphique peut permettre dans certains cas un gain de temps pour enregistrer une animation par exemple.
+
+Lorsque l'argument est vide, la fonction renvoie simplement l'état actuel de l'affichage graphique (0 ou 1). Sinon, elle
+renvoie \Nil.
+\end{itemize}
+
+
+\section{WriteFile}\label{cmdWriteFile}
+
+\begin{itemize}
+\item \util \textbf[WriteFile()]{WriteFile( )}.
+
+\item \desc cette fonction permet d'écrire soit dans le fichier texte ouvert par la commande
+\Helpref{OpenFile}{cmdOpenFile}, soit dans le fichier d'exportation si l'exécution de cette commande a lieu pendant une
+exportation par l'intermédiare des macros \Helpref{Bsave}{macBsave} et/ou \Helpref{Esave}{macEsave}.
+
+\item \exem voici ce que pourrait être la macro \textsl{Bsave} pour modifier la taille des flêches en pstricks:
+\end{itemize}
+
+\begin{verbatim}
+ if ExportMode=pst then WriteFile("\psset{arrowscale=3}") fi
+\end{verbatim}
diff --git a/docs/texgraph/chap07.html b/docs/texgraph/chap07.html
new file mode 100644
index 0000000..9716ed8
--- /dev/null
+++ b/docs/texgraph/chap07.html
@@ -0,0 +1,688 @@
+Les macros mathématiques de TeXgraph.mac
+Opérations arithmétiques et logiques
+Ceil
+
+Ceil( <x> ).
+Description : renvoie le plus petit entier supérieur ou égal au réel <x>.
+
+div
+
+div( <x>, <y> ).
+Description : renvoie l’unique entier k tel que x - ky soit dans l’intervalle [0; ∣y∣[.
+
+mod
+
+mod( <x>, <y> ).
+Description : renvoie l’unique réel r de l’intervalle [0; ∣y∣[ tel que x = ky + r avec k entier.
+
+not
+
+not( <expression booléenne> )
+Description : renvoie la valeur booléenne de la négation.
+
+pgcd
+
+pgcd( <a>, <b> [, <u>, <v>] )
+Description : renvoie la valeur d du pgcd de <a> et <b>, ainsi que deux coefficients de Bezout dans les variables <u> et <v> (si celles-ci sont présentes), de telle sorte que au + bv = d.
+
+ppcm
+
+ppcm( <a>, <b> )
+Description : renvoie la valeur du ppcm de <a> et <b>.
+
+Opérations sur les variables
+Abs
+
+Abs( <affixe> ).
+Description : cette macro donne la norme en cm.
+
+free
+
+free( <x> ).
+Description : libère la variable <x> en la mettant à Nil. Depuis la version 1.93 on peut faire directement l’affectation à la constante Nil, par exemple: x:=Nil.
+
+IsIn
+
+IsIn( <affixe> [, <epsilon>] ).
+Description : renvoie 1 si l’<affixe> est dans la fenêtre graphique, 0 sinon. Cette macro tient compte de la matrice courante, le test se fait à <epsilon> près et <epsilon> vaut 0.0001 cm par défaut.
+
+nil
+
+nil( <x> ).
+Description : renvoie 1 si la variable <x> est à Nil, 0 sinon. Depuis la version 1.93 on peut faire directement le test d’égalité avec la constante Nil.
+
+round
+
+round( <liste> [, décimales] )
+Description : tronque les complexes de la <liste> en arrondissant au plus proche les parties réelles et imaginaires avec le nombre de <décimales> demandé (0 par défaut). Si la <liste> contient le constante jump, alors celle-ci est renvoyée dans la liste des résultats. Cette macro utilise la commande Round (qui ne s’applique qu’à un complexe et non une liste).
+
+Opérations sur les listes
+bary
+
+bary( <[affixe1, coef1, affixe2, coef2, ...]> ).
+Description : renvoie le barycentre du système pondéré <[(affixe1, coef1), (affixe2, coef2),...]>.
+
+del
+
+del( <liste>, <liste des index à supprimer>, <quantité à supprimer> ).
+Description : renvoie la liste après avoir supprimer les éléments dont l’index figure dans la <liste des index à supprimer>. La <quantité à supprimer> (à chaque fois) est de 1 par défaut, cet argument peut être une liste lui aussi.
+Exemple(s) :
+
+del( [1,2,3,4,5,6,7,8], [2,6,8]) donne [1,3,4,5,7].
+del( [1,2,3,4,5,6,7,8], [2,6,8], 2) donne [1,4,5].
+del( [1,2,3,4,5,6,7,8], [2,6,8], [1,2]) donne [1,3,4,5].
+del( [1,2,jump,3,4,5,jump,6,7,8],[3,7]) donne [1,2,3,4,5,6,7,8].
+
+
+getdot
+
+getdot( <s> , <ligne polygonale> ).
+Description : renvoie le point de la <ligne polygonale> ayant <s> comme abscisse curviligne. Le paramètre <s> doit être dans l’intervalle [0; 1], 0 pour le premier point, et 1 pour le dernier.
+
+IsAlign
+
+IsAlign( <liste points 2D> [, epsilon] ).
+Description : renvoie 1 si les points sont sur une même droite, 0 sinon. Par défaut la tolérance <epsilon> vaut 1E-10. La <liste> ne doit pas contenir la constante jump.
+
+isobar
+
+isobar( <[affixe1, affixe2, ...]> ).
+Description : renvoie l’isobarycentre du système <[affixe1, affixe2, ...]>.
+
+KillDup
+
+KillDup( <liste> [, epsilon] ).
+Description : renvoie la liste sans doublons. Les comparaisons se font à <epsilon> près (qui vaut 0 par défaut).
+Exemple(s) : KillDup( [1.255,1.258,jump,1.257,1.256,1.269,jump] ,1.5E-3) renvoie [1.255,1.258,1.269].
+
+length
+
+length( <liste> ).
+Description : calcule la longueur de la <liste> en cm.
+
+permute
+
+permute( <liste> ).
+Description : modifie la <liste> en plaçant le premier élément à la fin, <liste> doit être une variable.
+la commande [x:= [1,2,3,4], permute(x), x] renvoie [2,3,4,1].
+
+Pos
+
+Pos( <affixe>, <liste>, [, epsilon] ).
+Description : renvoie la liste des positions de l’<affixe> dans la <liste>, la comparaison se fait à <epsilon> près, par défaut <epsilon> vaut 0.
+la commande Pos(2, [1,2,3,2,4]) renvoie [2,4], mais Pos(5, [1,2,3,2,4]) renvoie Nil.
+
+rectangle
+
+rectangle( <liste> ).
+Description : détermine le plus petit rectangle contenant la liste, cette macro renvoie une liste de deux complexes qui représentent l’affixe du coin inférieur gauche suivi de celle du coin supérieur droit.
+
+replace
+
+replace( <liste>, <position>, <valeur> ).
+Description : modifie la variable <liste> en remplaçant l’élément numéro <position> par la <valeur>, cette macro renvoie Nil.
+
+reverse
+
+reverse( <liste> ).
+Description : renvoie la liste après avoir inverser chaque composante (deux composantes sont séparées par un jump).
+
+SortWith
+
+SortWith( <liste clés>, <liste>, <taille paquets> [, mode] ).
+Description : trie la variable <liste> suivant les <clés>. Les éléments de la <liste> sont traités par <paquets>, leur taille est de 1 par défaut. La <taille paquets> peut être égale à jump pour un traitement par composante. Si un paquet n’est pas complet, il n’est pas traité. Si la liste contient la constante jump, alors toutes les composantes sont triées chacune leur tour. Le dernier paramètre détermine le type de tri: <mode>=0 pour ordre croissant (valeur par défaut), <mode>=1 pour décroissant.
+
+Gestion des listes par composantes
+La convention adoptée est que deux composantes sont séparées par la constante jump. Une composante peut être vide.
+CpCopy
+
+CpCopy( <liste>, <index depart>, <nombre> ).
+Description : cette fonction renvoie la liste constituée par les <nombre> composantes de la <liste> à partir de la composante numéro <depart>[inclus]. Si <nombre> est nul, alors la fonction renvoie toutes les composantes de la liste à partir de la composante numéro <départ>.
+Si le numéro <depart> est négatif, alors la liste et parcourue de droite à gauche en partant du dernier, la dernière composante a l’index - 1, l’avant-dernière a l’index - 2 ⋯ etc. La fonction renvoie les <nombre> composantes de la liste (ou toute la liste si <nombre> est nul) en allant vers la gauche, mais la liste renvoyée est dans le même sens que la <liste>, et cette dernière n’est pas modifiée.
+Exemple(s) :
+
+CpCopy([1,2,jump,3,7,8,jump,4,jump,5,6], 2, 1) renvoie [3,7,8].
+CpCopy([1,2,jump,3,7,8,jump,4,jump,5,6], -1, 2) renvoie [4,jump,5,6].
+CpCopy([1,2,jump,3,7,8,jump,4,jump,5,6], -3, 0) renvoie [1,2,jump,3,7,8].
+
+
+CpDel
+
+CpDel( <variable liste>, <index depart>, <nombre> ).
+Description : cette fonction détruit dans la <variable liste>, les <nombre> composantes à partir de la composante numéro <depart>[inclus]. Si <nombre> est nul, alors la fonction détruit toutes les composantes de la <variable liste> à partir de la composante numéro <départ>.
+Si le numéro <depart> est négatif, alors la liste et parcourue de droite à gauche en partant du dernier, la dernière composante a l’index - 1, l’avant-dernière a l’index - 2 ⋯ etc. La fonction détruit les <nombre> composantes de la <variable liste> (ou toute la liste si <nombre> est nul) en allant vers la gauche.
+Le paramètre <variable liste> doit être un nom de variable, celle-ci est modifiée et la macro renvoie Nil.
+
+CpNops
+
+CpNops( <liste> ).
+Description : cette fonction évalue <liste> et renvoie le nombre de composantes qui la composent.
+Exemple(s) :
+
+CpNops([1,2,jump,3] ) renvoie la valeur 2.
+CpNops([1,2,jump,3,jump] ) renvoie la valeur 3.
+CpNops([jump] ) renvoie la valeur 2.
+
+
+CpReplace
+
+CpReplace( <variable liste>, <position>, <nouveau> ).
+Description : modifie la <variable liste> en remplaçant la composante numéro <position> par <nouveau>, cette macro renvoie Nil.
+
+CpReverse
+
+CpReverse( <liste> ).
+Description : renvoie la <liste> avec les composantes dans l’ordre inverse.
+Exemple(s) : CpReverse([1,2,jump,3,4,5,jump]) renvoie [jump,3,4,5,jump,1,2].
+
+Gestion des listes de chaînes
+Une telle liste est en réalité une macro, les éléments sont indexés à partir de 1, et la chaîne numéro k est donnée par @nomListe(k)
, alors que la longueur de la liste (nombre d’éléments) est donnée par nomListe(0)
.
+StrListInit
+
+StrListInit( <nomListe>, <"chaine1">, <"chaine2">, ... ).
+Description : crée une liste de chaines sous forme d’une macro appelée <nomListe>, les arguments suivants sont interprétés comme des chaînes, ils constituent les éléments de la liste et sont indexés à partir de 1.
+Exemple(s) : Après la commande StrListInit(essai, "toto", ["toto",2/4], 24), une macro du nom de essai est créée et son contenu est:
+for $z in Args() do
+ if z<0 then Inc(z,4) fi,
+ if z=0 then 3
+ elif z=1 then "toto"
+ elif z=2 then "toto0.5"
+ elif z=3 then "24"
+ fi
+od
+
+Exemple(s) : Afficher des labels avec une affixe et une orientation pour chacun, en utilisant une seule fois LabelDot.
+
+
+
+view(-2,2,-2,2), Marges(0,0,0,0), size(7.5), StrListInit( nom, -1,"A","O", i,"B","N", 1,"C","E", -i,"D","S"), for k from 1 to nom(0) step 3 do LabelDot( Eval(@nom(k)), @nom(k+1), @nom(k+2), 1) od, StrListKill(nom)
+
+
+Une autre solution consiste à faire trois listes: nom, position, orientation:
+ view(-2,2,-2,2), Marges(0,0,0,0), size(7.5),
+ StrListInit( nom, "$A$", "$B$", "$C$", "$D$"),
+ StrListInit(orientation, "O", "N", "E", "S"),
+ position:=[-1, i, 1, -i],
+ for k from 1 to nom(0) do
+ LabelDot( position[k], @nom(k), @orientation(k), 1)
+ od,
+ StrListKill(nom, orientation)
+
+StrListAdd
+
+StrListAdd( <nomListe>, <"chaine1">, <"chaine2">, ... ).
+Description : cette macro ajoute à la fin de la liste de chaînes appelée <nomListe>, les arguments suivants (qui sont interprétés comme des chaînes). Cela suppose que la liste <nomListe> existe déjà, cette liste est en fait une macro qui va être entièrement réécrite pour lui ajouter les éléments supplémentaires. Il est plus rapide de définir la liste en une seule fois avec la macro StrListInit quand c’est possible.
+
+StrListCopy
+
+StrListCopy( <nomListe>, <nouvelleListe> [, index depart, nombre] ).
+Description : cette macro crée une nouvelle liste de chaînes appelée <nouvelleListe> en copiant <nombre> éléments de la liste <nomListe> en partant de <index depart>. L’argument <index depart> peut être négatif ( - 1 designe le dernier élément, - 2 l’avant-dernier, ...), par contre les éléments sont toujours parcourus de gauche à droite quand <nombre> est positif, et dans le sens inverse quand <nombre> est négatif. Par défaut l’<index depart> vaut 1 et le <nombre> vaut 0 (ce qui signifie øg tous les éléments).
+
+StrListDelKey
+
+StrListDelKey( <nomListe>, <index depart>, <nombre> ).
+Description : cette macro supprime de <nomListe> <nombre> éléments à partir de l’<index depart>. Comme dans la commande Del, l’argument <index depart> peut être négatif ( - 1 designe le dernier élément, - 2 l’avant-dernier, ...), par contre les éléments sont toujours parcourus de gauche à droite quand <nombre> est positif, et dans le sens inverse quand <nombre> est négatif. Cette macro renvoie Nil.
+
+StrListDelVal
+
+StrListDelVal( <nomListe>, <val1>, <val2>, ... ).
+Description : cette macro supprime de <nomListe> les chaînes <val1>, <val2>..., sans avoir à connaître leurs index.
+
+StrListGetKey
+
+StrListGetKey( <nomListe>, <chaine> ).
+Description : cette macro renvoie l’index de la <chaîne> dans la liste <nomListe>, si elle n’y figure pas, la macro renvoie Nil.
+
+StrListInsert
+
+StrListInsert( <nomListe1>, <chaîne> [, <index> ]).
+Description : cette macro modifie la liste de chaines <nomListe>, en insérant une nouvelle <chaîne> à la position <index>. Par défaut la valeur de <index> est nulle ce qui représente la fin de la liste, cette valeur peut être négative ( - 1 est l’index du dernier élément, - 2 l’avant-dernier, ...).
+
+StrListKill
+
+StrListKill( <nomListe1>, <nomListe2>, ... ).
+Description : cette macro détruit les listes de chaînes <nomListe1>, <nomListe2>, ...
+
+StrListReplace
+
+StrListReplace( <nomListe>, <ancienne chaine>, <nouvelle> ).
+Description : cette macro remplace dans la liste appelée <nomListe>, l’<ancienne chaine> par la <nouvelle>.
+
+StrListReplaceKey
+
+StrListReplaceKey( <nomListe>, <index>, <nouvelle chaîne> ).
+Description : cette macro remplace dans la liste appelée <nomListe>, la chaîne dont le numéro est<index>, par la <nouvelle chaîne>.
+
+StrListShow
+
+StrListShow( <nomListe> [, <index depart>, <nombre> ]).
+Description : cette macro renvoie la chaîne obtenue en copiant <nombre> éléments de la liste <nomListe> en partant de <index depart>, mais sans les concaténer. La chaîne renvoyée est de la forme: "chaine", "chaine", ...
. L’argument <index depart> peut être négatif ( - 1 designe le dernier élément, - 2 l’avant-dernier, ...), par contre les éléments sont toujours parcourus de gauche à droite quand <nombre> est positif, et dans le sens inverse quand <nombre> est négatif. Par défaut l’<index depart> vaut 1 et le <nombre> vaut 0 (ce qui signifie øg tous les éléments).
+
+Fonctions statistiques
+Anp
+
+Anp( <n>, <p> ).
+Description : renvoie le nombre d’arrangements de <p> parmi <n>.
+
+binom
+
+binom( <n>, <p> ).
+Description : renvoie le coefficient binomial (ou combinaison) <p> parmi <n>.
+
+ecart
+
+ecart( <liste réels> ).
+Description : renvoie l’écart type d’une liste de réels, la constante jump est ignorée.
+
+fact
+
+fact( <n> ).
+Description : renvoie la valeur de n! (fonction factorielle).
+
+max
+
+max( <liste complexes> ).
+Description : renvoie le plus grand élément d’une liste de complexes (ordre lexicographique), la constante jump est ignorée.
+
+min
+
+min( <liste complexes> ).
+Description : renvoie le plus petit élément d’une liste de complexes (ordre lexicographique), la constante jump est ignorée.
+
+median
+
+median( <liste complexes> ).
+Description : renvoie l’élément médian d’une liste de complexes (ordre lexicographique), la constante jump est ignorée.
+
+moy
+
+moy( <liste complexes> ).
+Description : renvoie la moyenne d’une liste de complexes, la constante jump est ignorée.
+
+prod
+
+prod( <liste complexes> ).
+Description : renvoie le produit des éléments d’une liste de complexes, la constante jump est ignorée.
+
+sum
+
+sum( <liste complexes> ).
+Description : renvoie la somme des éléments d’une liste de complexes, la constante jump est ignorée.
+
+var
+
+var( <liste réels> ).
+Description : renvoie la variance d’une liste de réels, la constante jump est ignorée.
+
+Fonctions de conversion
+RealArg
+
+RealArg( <affixe> )
+Description : renvoie l’argument (en radians) de l’affixe réelle d’un vecteur en tenant compte de la matrice courante.
+
+RealCoord
+
+RealCoord( <affixe écran> )
+Description : renvoie l’affixe réelle d’un point compte tenu des échelles et de la matrice courante.
+
+RealCoordV
+
+RealCoordV( <affixe écran> )
+Description : renvoie l’affixe réelle d’un vecteur compte tenu des échelles de la matrice courante.
+
+ScrCoord
+
+ScrCoord( <affixe réelle> )
+Description : renvoie l’affixe écran d’un point en tenant compte des échelles et de la matrice courante.
+
+ScrCoordV
+
+ScrCoordV( <affixe réelle> )
+Description : renvoie l’affixe écran d’un vecteur en tenant compte des échelles et de la matrice courante.
+
+SvgCoord
+
+SvgCoord( <screen affixe> )
+Description : renvoie l’affixe exportée en svg en tenant compte des échelles et de la matrice courante.
+
+TeXCoord
+
+TeXCoord( <screen affixe> )
+Description : renvoie l’affixe exportée en tex, pst et pgf en tenant compte des échelles et de la matrice courante. Pour l’eps il y a la commande EpsCoord.
+
+Transformations géométriques planes
+affin
+
+affin( <liste> , <[A, B]>, <V>, <lambda> )
+Description : renvoie la liste des images des points de <liste> par l’affinité de base la droite <(AB)>, de rapport <lambda> et de direction le vecteur <V>.
+
+defAff
+
+defAff( <nom>, <A>, <A’>, <partie linéaire> )
+Description : cette fonction permet de créer une macro appelée <nom> qui représentera l’application affine qui transforme <A> en <A’>, et dont la partie linéaire est le dernier argument. Cette partie linéaire se présente sous la forme d’une liste de deux complexes: [Lf(1), Lf(i)] où Lf désigne la partie linéaire de la transformation.
+
+ftransform
+
+ftransform( <liste>, <f(z)> )
+Description : renvoie la liste des images des points de <liste> par la fonction <f(z)>, celle-ci peut-être une expression fonction de z ou une macro d’argument z.
+
+hom
+
+hom( <liste>, <A>, <lambda> )
+Description : renvoie la liste des images de la <liste> par l’homothétie de centre <A> et de rapport <lambda>.
+
+inv
+
+inv( <liste>, <A>, <R> )
+Description : renvoie la liste des images des points de <liste> par l’inversion de cercle de centre <A> et de rayon <R>.
+
+mtransform
+
+mtransform( <liste>, <matrice> )
+Description : renvoie la liste des images des points de <liste> par l’application affine f définie par la <matrice>. Cette matrice est de la forme [f(0), Lf(1), Lf(i)] où Lf désigne la partie linéaire.
+
+proj
+
+proj( <liste>, <A>, <B> ) ou proj( <liste>, <[A,B]> )
+Description : renvoie la liste des projetés orthogonaux des points de <liste> sur la droite (AB).
+
+projO
+
+projO( <liste>, <[A,B]>, <vecteur> )
+Description : renvoie la liste des projetés des points de <liste> sur la droite <(AB)> dans la direction du <vecteur>.
+
+rot
+
+rot( <liste>, <A>, <alpha> )
+Description : renvoie la liste des images des points de <liste> par la rotation de centre <A> et d’angle <alpha>.
+
+shift
+
+shift( <liste>, <vecteur> )
+Description : renvoie la liste des translatés des points de <liste> avec le <vecteur>.
+
+simil
+
+simil( <liste> , <A>, <lambda>, <alpha> )
+Description : renvoie la liste des images des points de <liste>, par la similitude de centre <A>, de rapport <lambda> et d’angle <alpha>.
+
+sym
+
+sym( <liste>, <A>, <B> ) ou sym( <liste>, <[A,B]> )
+Description : renvoie la liste des symétriques des points de <liste>, par rapport à la droite (AB).
+
+symG
+
+symG( <liste>, <A>, <vecteur> )
+Description : symétrie glissée: renvoie la liste des images des points de <liste>, par la symétrie orthogonale d’axe la droite passant par <A> et dirigée par <vecteur>, composée avec la translation de <vecteur>.
+
+symO
+
+symO( <liste>, <[A, B]>, <vecteur> )
+Description : renvoie la liste des symétriques des points de <liste> par rapport à la droite <(AB)> et dans la direction du <vecteur>.
+
+Matrices de transformations 2D
+Une transformation affine f du plan complexe peut être représentée par son expression analytique dans la base canonique (1, i), la forme générale de cette expression est:
+{
$\left\{\begin{array}{rcl}
+ x'&=&t_1+ax+by\\
+y'&=&t_2+cx+dy
+ \end{array}\right.$
}
+cette expression analytique sera représentée par la liste [t1+i*t2, a+i*c, b+i*d] c’est à dire: [ f(0), f(1)-f(0), f(i)-f(0)], cette liste sera appelée plus brièvement (et de manière abusive) matrice de la transformation f. Les deux derniers éléments de cette liste: [ a+i*c, b+i*d], représentent la matrice de la partie linéaire de f: Lf = f - f(0).
+ChangeWinTo
+
+ChangeWinTo( <[xinf+i*yinf, xsup+i*ysup]> [, ortho] )
+Description : modifie la matrice courante de manière à transformer la fenêtre courante en la fenêtre de grande diagonale <[xinf+i*yinf, xsup+i*ysup]>, la fenêtre sera orthonormée ou non en fonction de la valeur du paramètre optionnel <ortho> (0 par défaut).
+
+
+
+view(-10,10,-5,5),size(7.5),NbPoints:=100, LabelSize:=footnotesize, SaveWin(),view(-10,-1,-5,5), ChangeWinTo([-2-2*i,2+2*i]), Arrows:=1, axes(0,1+i),Arrows:=0, tMin:=-2, tMax:=2, Color:=red, Width:=8, Cartesienne(x*Ent(1/x)-1,5,1), Color:=blue,A:=(1+i)/4, Dparallelo(A,bar(A),-A), dep:=RealCoord(i*Im(A)), RestoreWin(), SaveWin(), //zoom view(1,10,-5,5), background(full,white), ChangeWinTo([-A,A]), Color:=black, arr:=RealCoord(-Re(A)+i*Im(A)*0.75), Arrows:=1, axes(0,A), Arrows:=0, tMin:=-0.25, tMax:=0.25, Color:=red, Width:=8, Cartesienne(x*Ent(1/x)-1,5,1), Color:=blue, Dparallelo(A,bar(A),-A), RestoreWin(), //trait Color:=blue, Arrows:=1, A:=ScrCoord(dep), B:=ScrCoord(arr), Bezier(A,A+3*exp(i*pi/2),B-3,B)
+
+
+invmatrix
+
+invmatrix( <[f(0), Lf(1), Lf(i)]> )
+Description : renvoie l’inverse de la matrice <[f(0), Lf(1), Lf(i)]>, c’est à dire la matrice [f - 1(0), Lf - 1(1), Lf - 1(i)] si elle existe.
+
+matrix
+
+matrix( <fonction affine>, [variable] )
+Description : renvoie la matrice de la <fonction affine>, par défaut la <variable> est z. Cette matrice se présente sous la forme [f(0), Lf(1), Lf(i)], où f désigne l’application affine et Lf sa partie linéaire, plus précisément: Lf(1)=f(1)-f(0) et Lf(i)=f(i)-f(0).
+Exemple(s) : matrix(i*bar(z)) renvoie [0,i,1].
+
+mulmatrix
+
+mulmatrix( <[f(0), Lf(1), Lf(i)]>, <[g(0), Lg(1), Lg(i)]> )
+Description : renvoie la matrice de la composée: fog, où f et g sont les deux applications affines définies par les matrices passées en argument.
+
+Constructions géométriques planes
+Ces macros définissent des objets graphiques mais ne les dessinent pas, elles renvoient une liste de points représentant ces objets.
+bissec
+
+bissec( <B>, <A>, <C>, <1 ou 2> )
+Description : renvoie une liste de deux points de la bissectrice, 1=intérieure.
+
+cap
+
+cap( <ensemble1>, <ensemble2> )
+Description : renvoie le contour de l’intersection de <ensemble1> avec <ensemble2> sous forme d’une liste de points. Ces deux ensembles sont des lignes polygonales représentant des courbes fermées, orientées dans le meme sens, ayant une forme relativement simple. La macro set permet de définir et dessiner des ensembles.
+Exemple(s) : intersection de deux ensembles:
+
+
+
+Marges(0,0,0,0),size(7.5), A:=set("A", 0, [rotation:=30]), B:=set("B", 0, [rotation:=-30]), C:= cap(A,B),Color:=red,FillStyle:=full, FillOpacity:=0.5, FillColor:=pink, Ligne(C,0)
+
+
+capB
+
+capB( <ensemble1>, <ensemble2> )
+Description : renvoie le contour de l’intersection de <ensemble1> avec <ensemble2> sous forme d’une liste de points de contrôles qui doit être dessinée avec la macro drawSet. Ces deux ensembles sont doivent également être deux listes de points de contrôle représentant des courbes fermées, orientées dans le meme sens, ayant une forme relativement simple. La macro setB permet de définir et dessiner des ensembles.
+Exemple(s) : intersection de deux ensembles:
+
+
+
+Marges(0,0,0,0),size(7.5), A:=setB("A", 0, [rotation:=30]), B:=setB("B", 0, [rotation:=-30]), C:= capB(A,B),Color:=red,FillStyle:=full, drawSet(C, [FillOpacity:=0.5, FillColor:=pink])
+
+
+carre
+
+carre( <A>, <B>, <1 ou -1> )
+Description : renvoie la liste des sommets du carré de sommets consécutifs A et B, 1=sens direct.
+
+cup
+
+cup( <ensemble1>, <ensemble2> )
+Description : renvoie le contour de la réunion de <ensemble1> avec <ensemble2> sous forme d’une liste de points. Ces deux ensembles doivent être des courbes fermées, orientées dans le meme sens, ayant une forme relativement simple. La macro set permet de définir et dessiner des ensembles.
+Exemple(s) : réunion de deux ensembles:
+
+
+
+Marges(0,0,0,0),size(7.5), A:=set("A", 0, [rotation:=30]), B:=set("B", 0, [rotation:=-30]), C:= cup(A,B),Color:=red,FillStyle:=full, FillOpacity:=0.5, FillColor:=pink, Ligne(C,0)
+
+
+cupB
+
+cupB( <ensemble1>, <ensemble2> )
+Description : renvoie le contour de la réunion de <ensemble1> avec <ensemble2> sous forme d’une liste de points de contrôles qui doit être dessinée avec la macro drawSet. Ces deux ensembles sont doivent également être deux listes de points de contrôle représentant des courbes fermées, orientées dans le meme sens, ayant une forme relativement simple. La macro setB permet de définir et dessiner des ensembles.
+Exemple(s) : intersection de deux ensembles:
+
+
+
+Marges(0,0,0,0),size(7.5), A:=setB("A", 0, [rotation:=30]), B:=setB("B", 0, [rotation:=-30]), C:= cupB(A,B),Color:=red,FillStyle:=full, drawSet(C, [FillOpacity:=0.5, FillColor:=pink])
+
+
+cutBezier
+
+cutBezier( <courbe de bézier>, <point>, <avant(0/1)> )
+Description : renvoie un arc de bézier correspondant à la <courbe de bézier> coupée avant ou après le <point>, en fonction du paramètre <avant>. Le résultat doit être dessiné par la commande Bezier.
+
+Cvx2d
+
+Cvx2d( <liste> )
+Description : renvoie l’enveloppe convexe de la <liste> selon l’algorithme de {Ronald Graham}. La <liste> ne doit pas contenir la constante jump.
+Exemple(s) : on choisit aléatoirement 10 points dans le pavé [ - 4, 4] × [ - 4, 4] que l’on place dans une variable P tout en dessinant chacun d’eux avec son numéro, puis on dessine l’enveloppe convexe.
+
+
+
+Marges(0,0,0,0),size(7.5), P:= for k from 1 to 10 do z:=8*Rand()-4+i*(8*Rand()-4), LabelDot(z, k,"N",1), z od, Ligne(Cvx2d(P),1)
+
+
+Intersec
+
+Intersec( <objet1>, <objet2> )
+Description : renvoie la liste des points d’intersection des deux objets graphiques. Ces deux objets peuvent être soit des commandes graphiques (Cercle(), Droite(), ...) ou bien le nom d’un élément graphique déjà créé.
+Exemple(s) : la commande Intersec( Cercle(0, 1), Droite(-1,i/2) ) renvoie:
+[0.59851109463416+0.79925554731708*i, -0.99794539275033+0.00102730362483*i].
+
+med
+
+med( <A>, <B> )
+Description : renvoie une liste de deux points de la médiatrice de [A, B].
+
+parallel
+
+parallel( <[A,B]>, <C> )
+Description : renvoie une liste de deux points de la parallèle à (AB) passant par C.
+
+parallelo
+
+parallelo( <A>, <B>, <C> )
+Description : renvoie la liste des sommets du parallèlogramme de sommets consécutifs A, B, C.
+
+perp
+
+perp( <[A, B]>, <C> )
+Description : renvoie une liste de deux points de la perpendiculaire à (AB) passant par C.
+
+polyreg
+
+polyreg( <A>, <B>, <nombre de cotés> )
+Description : renvoie la liste des sommets du polygône régulier de centre A, passant par B et avec le nombre de côtés indiqué.
+
+ou
+
+polyreg( <A>, <B>, <nombre de cotés + i*sens> ) avec sens = +/-1
+Description : renvoie la liste des sommets du polygône régulier de sommets consécutifs A et B, avec le nombre de côtés indiqué et dans le sens indiqué (1 pour le sens trigonométrique).
+
+pqGoneReg
+
+pqGoneReg( <centre>, <sommet>, <[p,q]> )
+Description : renvoie la liste des sommets du <p/q>-gône régulier défini par le <centre> et un <sommet>.
+Exemple(s) : voir ici.
+
+rect
+
+rect( <A>, <B>, <C> )
+Description : renvoie la liste des sommets du rectangle de sommets consécutifs A, B, le côté opposé passant par C.
+
+setminus
+
+setminus( <ensemble1>, <ensemble2> )
+Description : renvoie le contour de la différence <ensemble1> - <ensemble2> sous forme d’une liste de points. Ces deux ensembles doivent être des courbes fermées, orientées dans le meme sens, ayant une forme relativement simple. La macro set permet de définir et dessiner des ensembles.
+Exemple(s) : différence de deux ensembles:
+
+
+
+Marges(0,0,0,0),size(7.5), A:=set("A", 0, [rotation:=30]), B:=set("B", 0, [rotation:=-30]), C:= setminus(A,B),Color:=red,FillStyle:=full, FillOpacity:=0.5, FillColor:=pink, Ligne(C,0)
+
+
+setminusB
+
+setminusB( <ensemble1>, <ensemble2> )
+Description : renvoie le contour de la différence <ensemble1> - <ensemble2> sous forme d’une liste de points de contrôles qui doit être dessinée avec la macro drawSet. Ces deux ensembles sont doivent également être deux listes de points de contrôle représentant des courbes fermées, orientées dans le meme sens, ayant une forme relativement simple. La macro setB permet de définir et dessiner des ensembles.
+Exemple(s) : différence de deux ensembles:
+
+
+
+Marges(0,0,0,0),size(7.5), A:=setB("A", 0, [rotation:=30]), B:=setB("B", 0, [rotation:=-30]), C:= setminusB(A,B),Color:=red,FillStyle:=full, drawSet(C, [FillOpacity:=0.5, FillColor:=pink])
+
+
+Gestion du flattened postscript
+Il est possible de transformer un fichier pdf ou un fichier postscript en flattened postscript grâce à l’utilitaire pstoedit (http://www.pstoedit.net/
). Dans le fichier obtenu, tout est chemin, y compris le texte. TeXgraph peut récupérer tous les chemins d’un fichier écrit en flattened postscript. C’est que proposent les macros de cette section.
+conv2FlatPs
+
+conv2FlatPs( <fichier entrée>, <fichier sortie> [, dossier de travail] )
+Description : cette macro invoque l’utilitaire pstoedit pour transformer le <fichier entrée> en flattened postscript dans le <fichier sortie>. Le fichier <fichier entrée> doit être un fichier pdf ou ps.
+
+drawFlatPs
+
+drawFlatPs( <affixe>, <chemins lus par loadFlatPs> [, options] )
+Description : cette macro dessine à l’écran l’ensemble des chemins lus dans un fichier en flattened postscript par la macro loadFlatPs. L’affichage se fait à l’<affixe> demandé. Le paramètre <options> est une liste (facultative) de la forme [ option1:= valeur1, ..., optionN:=valeurN ], les options sont:
+
+scale := < nombre positif >: échelle, 1 par défaut.
+position := < center/left/right/... >: position de l’affixe par rapport à l’image, center par défaut (fonctionne comme la variable LabelStyle).
+color := < couleur >: pour imposer une couleur, Nil par défaut ce qui signifie qu’on prend la couleur d’origine.
+rotation := < angle en degrés >: 0 par défaut.
+hollow := < 0/1 >: avec la valeur 0 (par défaut) les remplissages sont effectués.
+select := < liste des numéros de chemin à montrer >: Nil par défaut, ce qui signifie tous les chemins.
+
+
+drawTeXlabel
+
+drawTeXlabel( <affixe>, <variable contenant la formule TeX lue par loadFlatPs>, [, options] )
+Description : cette macro invoque la macro drawFlatPs pour dessiner une expression qui a été au préalable compilée par . Le paramètre <options> est une liste (facultative) de la forme [ option1:= valeur1, ..., optionN:=valeurN ], les options sont:
+
+scale := < nombre>0 >: échelle, 1 par défaut.
+hollow := < 0/1 >: avec la valeur 0 (par défaut) les remplissages sont effectués.
+
+Cette macro est utilisée en interne par la macro NewTeXlabel.
+
+loadFlatPs
+
+loadFlatPs( <fichier en flattened postscript>, [, options] )
+Description : cette macro charge un <fichier en flattened postscript>, adpate les coordonnées des points et renvoie la liste des chemins (que l’on peut alors dessiner avec la macro drawFlatPs). Le paramètre <options> est une liste (facultative) de la forme [ option1:= valeur1, ..., optionN:=valeurN ], les options sont:
+
+width := < nombre>0 >: largeur en cm, Nil par défaut pour largeur naturelle.
+height := < nombre>0 >: hauteur en cm, Nil par défaut pour hauteur naturelle.
+
+supposons que vous ayez le fichier circuit.pdf dans le dossier temporaire de TeXgraph, la commande suivante dans un élément graphique Utilisateur:
+
+ [conv2FlatPs( "circuit.pdf", "circuit.fps", @TmpPath),
+ stock:= loadFlatPs( [@TmpPath,"circuit.fps"] ),
+ drawFlatPs( 0, stock, [scale:=1, hollow:=1] )
+ ]
+
+va permettre de charger et dessiner le contenu de ce fichier dans TeXgraph, sans faire les remplissages.
+NewTeXlabel
+
+NewTeXlabel( <nom>, <affixe>, <formule TeX>, [, options] )
+Description : cette macro va demander à {} de compiler la formule dans un fichier pdf, ce fichier sera ensuite converti en un fichier eps par pstoedit, puis celui-ci sera chargé par loadFlatPs et stocké dans une variable globale appelée TeX_+nom. Un élément graphique appelé <nom> est créée pour dessiner la formule avec drawTeXLabel. Le paramètre <options> est une liste (facultative) de la forme [ option1:= valeur1, ..., optionN:=valeurN ], les options sont:
+
+dollar := < 0/1 >: indique à TeXgraph s’il doit ajouter les délimiteurs \[
et \]
autour de la formule, 1 par défaut.
+scale := < nombre>0 >: échelle, 1 par défaut.
+hollow := < 0/1 >: avec la valeur 0 (par défaut) les remplissages sont effectués.
+
+Dans les options, les attributs suivants peuvent également être utilisés: LabelStyle, LabelAngle et Color.
+Voici la définition de cette macro:
+
+[dollar:=1, scale:=1, hollow:=0, $options:=%4,
+ $aux:=OpenFile([@TmpPath,"formula.tex"]),
+ if dollar then WriteFile(["\[",%3,"\]"]) else WriteFile(%3) fi,
+ CloseFile(),
+ Exec("pdflatex","-interaction=nonstopmode tex2FlatPs.tex",@TmpPath,1),
+ Exec("pstoedit -dt -pta -f ps -r2400x2400","tex2FlatPs.pdf tex2FlatPs.eps",@TmpPath,1),
+ NewVar(["TeX_",%1],loadFlatPs([@TmpPath,"tex2FlatPs.eps"])),
+ NewGraph(%1, ["drawTeXlabel(",%2,", TeX_",%1,", [scale:=",scale,", hollow:=",hollow,"])"]),
+ ReDraw()
+]
+
+
+La formule est écrite dans le fichier formula.tex, puis on compile le fichier tex2FlatPs.tex suivant:
+ \documentclass[12pt]{article}
+ \usepackage{amsmath,amssymb}
+ \usepackage{fourier}
+ \pagestyle{empty}
+ \begin{document}
+ \large
+ \input{formula.tex}%
+ \end{document}
+
+et on convertit le résultat en flattened postscript avant de le charger.
+Cette macro s’utilise dans la ligne de commande ou bien dans des macros qui créent des éléments graphiques, mais pas directement dans un élément graphique Utilisateur, exemple:
+NewTeXlabel( "label1", 0, "\frac{\pi}{\sqrt{2}}", [scale:=1.5, Color:=blue, LabelAngle:=45])
+
+Autres
+pdfprog
+
+pdfprog().
+Description : cette macro est utilisée en interne pour mémoriser le programme utilisé pour faire la conversion du format eps vers le format pdf. Par défaut, cette macro contient la chaine: "epstopdf". En éditant le fichier TeXgraph.mac, vous pouvez modifier le programme utilisé.
+
diff --git a/docs/texgraph/chap07.tex b/docs/texgraph/chap07.tex
new file mode 100644
index 0000000..bb29089
--- /dev/null
+++ b/docs/texgraph/chap07.tex
@@ -0,0 +1,1069 @@
+\chapter{Les macros mathématiques de TeXgraph.mac}
+
+\section{Opérations arithmétiques et logiques}
+
+\subsection{Ceil}
+
+\begin{itemize}
+\item \util \textbf[Ceil()]{Ceil( )}.
+\item \desc renvoie le plus petit entier supérieur ou égal au réel \argu{x}.
+\end{itemize}
+
+\subsection{div}
+
+\begin{itemize}
+\item \util \textbf[div()]{div( , )}.
+\item \desc renvoie l'unique entier $k$ tel que $x-ky$ soit dans l'intervalle $[0;|y|[$.
+\end{itemize}
+
+\subsection{mod}
+
+\begin{itemize}
+\item \util \textbf[mod()]{mod( , )}.
+\item \desc renvoie l'unique réel $r$ de l'intervalle $[0;|y|[$ tel que
+$x=ky+r$ avec $k$ entier.
+\end{itemize}
+
+\subsection{not}\label{macnot}
+
+\begin{itemize}
+\item \util \textbf[not()]{not( )}
+\item \desc renvoie la valeur booléenne de la négation.
+\end{itemize}
+
+\subsection{pgcd}
+
+\begin{itemize}
+\item \util \textbf[pgcd()]{pgcd( , [, , ] )}
+\item \desc renvoie la valeur d du pgcd de \argu{a} et \argu{b}, ainsi que deux coefficients de Bezout dans les
+variables \argu{u} et \argu{v} (si celles-ci sont présentes), de telle sorte que $au+bv=d$.
+\end{itemize}
+
+\subsection{ppcm}
+
+\begin{itemize}
+\item \util \textbf[ppcm()]{ppcm( , )}
+\item \desc renvoie la valeur du ppcm de \argu{a} et \argu{b}.
+\end{itemize}
+
+\section{Opérations sur les variables}
+
+\subsection{Abs}
+
+\begin{itemize}
+\item \util \textbf[Abs()]{Abs( )}.
+\item \desc cette macro donne la norme en cm.
+\end{itemize}
+
+
+\subsection{free}
+
+\begin{itemize}
+\item \util \textbf[free()]{free( )}.
+\item \desc libère la variable \argu{x} en la mettant à \Nil. Depuis la version 1.93 on peut faire directement
+l'affectation à la constante \Nil, par exemple: \co{x:=Nil}.
+\end{itemize}
+
+
+\subsection{IsIn}
+
+\begin{itemize}
+\item \util \textbf[IsIn()]{IsIn( [, ] )}.
+\item \desc renvoie 1 si l'\argu{affixe} est dans la fenêtre graphique, 0 sinon. Cette macro tient compte de la matrice
+courante, le test se fait à \argu{epsilon} près et \argu{epsilon} vaut 0.0001 cm par défaut.
+\end{itemize}
+
+\subsection{nil}
+
+\begin{itemize}
+\item \util \textbf[nil()]{nil( )}.
+\item \desc renvoie 1 si la variable \argu{x} est à \Nil, 0 sinon. Depuis la version 1.93 on peut faire directement le
+test d'égalité avec la constante \Nil.
+\end{itemize}
+
+\subsection{round}
+
+\begin{itemize}
+\item \util \textbf[round()]{round( [, décimales] )}
+\item \desc tronque les complexes de la \argu{liste} en arrondissant au plus proche les parties réelles et imaginaires
+avec le nombre de \argu{décimales} demandé (0 par défaut). Si la \argu{liste} contient le constante \jump, alors
+celle-ci est renvoyée dans la liste des résultats. Cette macro utilise la commande \Helpref{{Round}}{cmdRound} (qui ne
+s'applique qu'Ã un complexe et non une liste).
+\end{itemize}
+
+\section{Opérations sur les listes}
+
+\subsection{bary}
+\begin{itemize}
+\item \util \textbf[bary()]{bary( <[affixe1, coef1, affixe2, coef2, ...]> )}.
+\item \desc renvoie le barycentre du système pondéré \argu{[(affixe1, coef1), (affixe2, coef2),...]}.
+\end{itemize}
+
+\subsection{del}
+\begin{itemize}
+\item \util \textbf[del()]{del( , , )}.
+\item \desc renvoie la liste après avoir supprimer les éléments dont l'index figure dans la \argu{liste des index Ã
+supprimer}. La \argu{quantité à supprimer} (à chaque fois) est de $1$ par défaut, cet argument peut être une liste lui
+aussi.
+\item \exem
+ \begin{itemize}
+ \item \co{del( [1,2,3,4,5,6,7,8], [2,6,8])} donne \res{[1,3,4,5,7]}.
+ \item \co{del( [1,2,3,4,5,6,7,8], [2,6,8], 2)} donne \res{[1,4,5]}.
+ \item \co{del( [1,2,3,4,5,6,7,8], [2,6,8], [1,2])} donne \res{[1,3,4,5]}.
+ \item \co{del( [1,2,jump,3,4,5,jump,6,7,8],[3,7])} donne \res{[1,2,3,4,5,6,7,8]}.
+ \end{itemize}
+\end{itemize}
+
+\subsection{getdot}
+\begin{itemize}
+\item \util \textbf[getdot()]{getdot( , )}.
+\item \desc renvoie le point de la \argu{ligne polygonale} ayant \argu{s} comme abscisse curviligne. Le paramètre
+\argu{s} doit être dans l'intervalle $[0;1]$, $0$ pour le premier point, et $1$ pour le dernier.
+\end{itemize}
+
+\subsection{IsAlign}
+
+\begin{itemize}
+\item \util \textbf[IsAlign()]{IsAlign( [, epsilon] )}.
+\item \desc renvoie 1 si les points sont sur une même droite, 0 sinon. Par défaut la tolérance \argu{epsilon} vaut
+1E-10. La \argu{liste} ne doit pas contenir la constante \jump.
+\end{itemize}
+
+
+\subsection{isobar}
+
+\begin{itemize}
+\item \util \textbf[isobar()]{isobar( <[affixe1, affixe2, ...]> )}.
+\item \desc renvoie l'isobarycentre du système \argu{[affixe1, affixe2, ...]}.
+\end{itemize}
+
+\subsection{KillDup}
+\begin{itemize}
+\item \util \textbf[KillDup()]{KillDup( [, epsilon] )}.
+\item \desc renvoie la liste sans doublons. Les comparaisons se font à \argu{epsilon} près (qui vaut $0$ par défaut).
+\item \exem \co{KillDup( [1.255,1.258,jump,1.257,1.256,1.269,jump] ,1.5E-3)} renvoie \res{[1.255,1.258,1.269]}.
+\end{itemize}
+
+\subsection{length}
+\begin{itemize}
+\item \util \textbf[length()]{length( )}.
+\item \desc calcule la longueur de la \argu{liste} en cm.
+\end{itemize}
+
+\subsection{permute}
+\begin{itemize}
+\item \util \textbf[permute()]{permute( )}.
+\item \desc modifie la \argu{liste} en plaçant le premier élément à la fin, \argu{liste} doit être une variable.
+\item la commande \co{[x:= [1,2,3,4], permute(x), x]} renvoie \res{[2,3,4,1]}.
+\end{itemize}
+
+\subsection{Pos}
+\begin{itemize}
+\item \util \textbf[Pos()]{Pos( , , [, epsilon] )}.
+\item \desc renvoie la liste des positions de l'\argu{affixe} dans la \argu{liste}, la comparaison se fait Ã
+\argu{epsilon} près, par défaut \argu{epsilon} vaut 0.
+\item la commande \co{Pos(2, [1,2,3,2,4])} renvoie \res{[2,4]}, mais \co{Pos(5, [1,2,3,2,4])} renvoie \Nil.
+\end{itemize}
+
+
+\subsection{rectangle}
+\begin{itemize}
+\item \util \textbf[rectangle()]{rectangle( )}.
+\item \desc détermine le plus petit rectangle contenant la liste, cette macro renvoie une liste de deux complexes qui
+représentent l'affixe du coin inférieur gauche suivi de celle du coin supérieur droit.
+\end{itemize}
+
+\subsection{replace}
+\begin{itemize}
+\item \util \textbf[replace()]{replace( , , )}.
+\item \desc modifie la variable \argu{liste} en remplaçant l'élément numéro \argu{position} par la \argu{valeur}, cette
+macro renvoie \Nil.
+\end{itemize}
+
+\subsection{reverse}
+\begin{itemize}
+\item \util \textbf[reverse()]{reverse( )}.
+\item \desc renvoie la liste après avoir inverser chaque composante (deux composantes sont séparées par un \jump).
+\end{itemize}
+
+\subsection{SortWith}
+\begin{itemize}
+\item \util \textbf[SortWith()]{SortWith( , , [, mode] )}.
+\item \desc trie la \textbf{variable} \argu{liste} suivant les \argu{clés}. Les éléments de la \argu{liste} sont
+traités par \argu{paquets}, leur taille est de 1 par défaut. La \argu{taille paquets} peut être égale à \jump pour un
+traitement par composante. Si un paquet n'est pas complet, il n'est pas traité. Si la liste contient la
+constante \jump, alors toutes les composantes sont triées chacune leur tour. Le dernier paramètre détermine
+le type de tri: \argu{mode}=0 pour ordre croissant (valeur par défaut), \argu{mode}=1 pour décroissant.
+\end{itemize}
+
+\section{Gestion des listes par composantes}
+
+La convention adoptée est que deux composantes sont séparées par la constante \jump. Une composante peut être vide.
+
+\subsection{CpCopy}
+\begin{itemize}
+\item \util \textbf[CpCopy()]{CpCopy( , , )}.
+\item \desc cette fonction renvoie la liste constituée par les \argu{nombre} composantes de la \argu{liste} à partir de
+la composante numéro \argu{depart} [inclus]. Si \argu{nombre} est nul, alors la fonction renvoie toutes les composantes
+de la liste à partir de la composante numéro \argu{départ}.
+
+Si le numéro \argu{depart} est négatif, alors la liste et parcourue de droite à gauche en partant du dernier, la
+dernière composante a l'index $-1$, l'avant-dernière a l'index $-2$ $\cdots$ etc. La fonction renvoie les \argu{nombre}
+composantes de la liste (ou toute la liste si \argu{nombre} est nul) en allant vers la gauche, mais la liste renvoyée
+est dans le même sens que la \argu{liste}, et cette dernière n'est pas modifiée.
+\item \exem \begin{itemize}
+ \item \co{CpCopy([1,2,jump,3,7,8,jump,4,jump,5,6], 2, 1)} renvoie \res{[3,7,8]}.
+ \item \co{CpCopy([1,2,jump,3,7,8,jump,4,jump,5,6], -1, 2)} renvoie \res{[4,jump,5,6]}.
+ \item \co{CpCopy([1,2,jump,3,7,8,jump,4,jump,5,6], -3, 0)} renvoie \res{[1,2,jump,3,7,8]}.
+ \end{itemize}
+\end{itemize}
+
+\subsection{CpDel}
+\begin{itemize}
+\item \util \textbf[CpDel()]{CpDel( , , )}.
+\item \desc cette fonction détruit dans la \argu{variable liste}, les \argu{nombre} composantes à partir
+de la composante numéro \argu{depart} [inclus]. Si \argu{nombre} est nul, alors la fonction détruit toutes les
+composantes de la \argu{variable liste} à partir de la composante numéro \argu{départ}.
+
+Si le numéro \argu{depart} est négatif, alors la liste et parcourue de droite à gauche en partant du dernier, la
+dernière composante a l'index $-1$, l'avant-dernière a l'index $-2$ $\cdots$ etc. La fonction détruit les \argu{nombre}
+composantes de la (ou toute la liste si \argu{nombre} est nul) en allant vers la gauche.
+
+Le paramètre \argu{variable liste} doit être \Mytextbf{un nom de variable}, celle-ci est modifiée et la macro renvoie
+\Nil.
+\end{itemize}
+
+\subsection{CpNops}
+\begin{itemize}
+\item \util \textbf[CpNops()]{CpNops( )}.
+\item \desc cette fonction évalue \argu{liste} et renvoie le nombre de composantes qui la composent.
+\item \exem
+ \begin{itemize}
+ \item \co{CpNops([1,2,jump,3] )} renvoie la valeur \res{2}.
+ \item \co{CpNops([1,2,jump,3,jump] )} renvoie la valeur \res{3}.
+ \item \co{CpNops([jump] )} renvoie la valeur \res{2}.
+ \end{itemize}
+\end{itemize}
+
+\subsection{CpReplace}
+\begin{itemize}
+\item \util \textbf[CpReplace()]{CpReplace( , , )}.
+\item \desc modifie la \argu{variable liste} en remplaçant la composante numéro \argu{position} par \argu{nouveau},
+cette macro renvoie \Nil.
+\end{itemize}
+
+\subsection{CpReverse}
+\begin{itemize}
+\item \util \textbf[CpReverse()]{CpReverse( )}.
+\item \desc renvoie la \argu{liste} avec les composantes dans l'ordre inverse.
+\item \exem \co{CpReverse([1,2,jump,3,4,5,jump])} renvoie \res{[jump,3,4,5,jump,1,2]}.
+\end{itemize}
+
+\section{Gestion des listes de chaînes}
+
+Une telle liste est en réalité une \textbf{macro}, les éléments sont indexés à partir de $1$, et la chaîne numéro $k$
+est donnée par \verb|@nomListe(k)|, alors que la longueur de la liste (nombre d'éléments) est donnée par
+\verb|nomListe(0)|.
+
+\subsection{StrListInit}\label{macStrListInit}
+\begin{itemize}
+\item \util \textbf[StrListInit()]{StrListInit( , <"chaine1">, <"chaine2">, ... )}.
+\item \desc crée une liste de chaines sous forme d'une macro appelée \argu{nomListe}, les arguments suivants sont
+interprétés comme des chaînes, ils constituent les éléments de la liste et sont indexés à partir de 1.
+\item \exem Après la commande \co{StrListInit(essai, "toto", ["toto",2/4], 24)}, une macro du nom de \Mytextbf{essai}
+est créée et son contenu est:
+\begin{verbatim}
+for $z in Args() do
+ if z<0 then Inc(z,4) fi,
+ if z=0 then 3
+ elif z=1 then "toto"
+ elif z=2 then "toto0.5"
+ elif z=3 then "24"
+ fi
+od
+\end{verbatim}
+\item \exem Afficher des labels avec une affixe et une orientation pour chacun, en utilisant une seule fois LabelDot.
+\end{itemize}
+
+\begin{demo}{Utilisation de StrListInit}{StrListInit}
+\begin{texgraph}[name=StrListInit,export=pgf]
+ view(-2,2,-2,2), Marges(0,0,0,0), size(7.5),
+ StrListInit( nom, -1,"$A$","O", i,"$B$","N",
+ 1,"$C$","E", -i,"$D$","S"),
+ for k from 1 to nom(0) step 3 do
+ LabelDot( Eval(@nom(k)), @nom(k+1), @nom(k+2), 1)
+ od,
+ StrListKill(nom)
+\end{texgraph}
+\end{demo}
+
+Une autre solution consiste à faire trois listes: nom, position, orientation:
+\begin{verbatim}
+ view(-2,2,-2,2), Marges(0,0,0,0), size(7.5),
+ StrListInit( nom, "$A$", "$B$", "$C$", "$D$"),
+ StrListInit(orientation, "O", "N", "E", "S"),
+ position:=[-1, i, 1, -i],
+ for k from 1 to nom(0) do
+ LabelDot( position[k], @nom(k), @orientation(k), 1)
+ od,
+ StrListKill(nom, orientation)
+\end{verbatim}
+
+\subsection{StrListAdd}
+\begin{itemize}
+\item \util \textbf[StrListAdd()]{StrListAdd( , <"chaine1">, <"chaine2">, ... )}.
+\item \desc cette macro ajoute à la fin de la liste de chaînes appelée \argu{nomListe}, les arguments suivants (qui sont
+interprétés comme des chaînes). Cela suppose que la liste \argu{nomListe} existe déjà , cette liste est en fait une
+macro qui va être entièrement réécrite pour lui ajouter les éléments supplémentaires. Il est plus rapide de définir la
+liste en une seule fois avec la macro \Helpref{StrListInit}{macStrListInit} quand c'est possible.
+\end{itemize}
+
+\subsection{StrListCopy}
+\begin{itemize}
+\item \util \textbf[StrListCopy()]{StrListCopy( , [, index depart, nombre] )}.
+\item \desc cette macro crée une nouvelle liste de chaînes appelée \argu{nouvelleListe} en copiant \argu{nombre}
+éléments de la liste \argu{nomListe} en partant de \argu{index depart}. L'argument
+ peut être négatif ($-1$ designe le dernier élément, $-2$ l'avant-dernier, ...), par contre les éléments
+sont toujours parcourus de gauche à droite quand est positif, et dans le sens inverse quand est
+négatif. Par défaut l'\argu{index depart} vaut $1$ et le \argu{nombre} vaut $0$ (ce qui signifie \og tous les
+éléments\fg).
+\end{itemize}
+
+\subsection{StrListDelKey}
+\begin{itemize}
+\item \util \textbf[StrListDelKey()]{StrListDelKey( , , )}.
+\item \desc cette macro supprime de \argu{nomListe} \argu{nombre} éléments à partir de l'\argu{index depart}. Comme
+dans la commande Del, l'argument \argu{index depart} peut être négatif ($-1$ designe le dernier élément,
+$-2$ l'avant-dernier, ...), par contre les éléments sont toujours parcourus de gauche à droite quand est
+positif, et dans le sens inverse quand est négatif. Cette macro renvoie \Nil.
+\end{itemize}
+
+\subsection{StrListDelVal}
+\begin{itemize}
+\item \util \textbf[StrListDelVal()]{StrListDelVal( , , , ... )}.
+\item \desc cette macro supprime de \argu{nomListe} les chaînes \argu{val1}, \argu{val2}..., sans avoir à connaître
+leurs index.
+\end{itemize}
+
+\subsection{StrListGetKey}
+\begin{itemize}
+\item \util \textbf[StrListGetKey()]{StrListGetKey( , )}.
+\item \desc cette macro renvoie l'index de la \argu{chaîne} dans la liste \argu{nomListe}, si elle n'y figure pas, la
+macro renvoie \Nil.
+\end{itemize}
+
+\subsection{StrListInsert}
+\begin{itemize}
+\item \util \textbf[StrListInsert()]{StrListInsert( , [, ])}.
+\item \desc cette macro modifie la liste de chaines \argu{nomListe}, en insérant une nouvelle \argu{chaîne} à la
+position \argu{index}. Par défaut la valeur de \argu{index} est nulle ce qui représente la fin de la liste, cette valeur
+peut être négative ($-1$ est l'index du dernier élément, $-2$ l'avant-dernier, ...).
+\end{itemize}
+
+\subsection{StrListKill}
+\begin{itemize}
+\item \util \textbf[StrListKill()]{StrListKill( , , ... )}.
+\item \desc cette macro détruit les listes de chaînes \argu{nomListe1}, \argu{nomListe2}, ...
+\end{itemize}
+
+\subsection{StrListReplace}
+\begin{itemize}
+\item \util \textbf[StrListReplace()]{StrListReplace( , , )}.
+\item \desc cette macro remplace dans la liste appelée \argu{nomListe}, l'\argu{ancienne chaine} par la \argu{nouvelle}.
+\end{itemize}
+
+\subsection{StrListReplaceKey}
+\begin{itemize}
+\item \util \textbf[StrListReplaceKey()]{StrListReplaceKey( , , )}.
+\item \desc cette macro remplace dans la liste appelée \argu{nomListe}, la chaîne dont le numéro est\argu{index}, par
+la \argu{nouvelle chaîne}.
+\end{itemize}
+
+\subsection{StrListShow}
+\begin{itemize}
+\item \util \textbf[StrListShow()]{StrListShow( [, , ])}.
+\item \desc cette macro renvoie la chaîne obtenue en copiant \argu{nombre} éléments de la liste \argu{nomListe} en
+partant de
+\argu{index depart}, mais sans les concaténer. La chaîne renvoyée est de la forme: \verb|"chaine", "chaine", ...|.
+L'argument peut être négatif ($-1$ designe le dernier élément, $-2$ l'avant-dernier, ...), par contre
+les éléments sont toujours parcourus de gauche à droite quand \argu{nombre} est positif, et dans le sens inverse quand
+ est négatif. Par défaut l' vaut $1$ et le \argu{nombre} vaut $0$ (ce qui signifie \og tous les
+éléments\fg).
+\end{itemize}
+
+
+\section{Fonctions statistiques}
+
+\subsection{Anp}
+\begin{itemize}
+\item \util \textbf[Anp()]{Anp( , )}.
+\item \desc renvoie le nombre d'arrangements de \argu{p} parmi \argu{n}.
+\end{itemize}
+
+\subsection{binom}
+\begin{itemize}
+\item \util \textbf[binom()]{binom( , )}.
+\item \desc renvoie le coefficient binomial (ou combinaison) \argu{p} parmi \argu{n}.
+\end{itemize}
+
+
+\subsection{ecart}
+\begin{itemize}
+\item \util \textbf[ecart()]{ecart( )}.
+\item \desc renvoie l'écart type d'une liste de réels, la constante \jump est ignorée.
+\end{itemize}
+
+\subsection{fact}
+\begin{itemize}
+\item \util \textbf[fact()]{fact( )}.
+\item \desc renvoie la valeur de $n!$ (fonction factorielle).
+\end{itemize}
+
+
+\subsection{max}
+\begin{itemize}
+\item \util \textbf[max()]{max( )}.
+\item \desc renvoie le plus grand élément d'une liste de complexes (ordre lexicographique), la constante \jump est
+ignorée.
+\end{itemize}
+
+\subsection{min}
+\begin{itemize}
+\item \util \textbf[min()]{min( )}.
+\item \desc renvoie le plus petit élément d'une liste de complexes (ordre lexicographique), la constante \jump est
+ignorée.
+\end{itemize}
+
+\subsection{median}
+\begin{itemize}
+\item \util \textbf[median()]{median( )}.
+\item \desc renvoie l'élément médian d'une liste de complexes (ordre lexicographique), la constante \jump est ignorée.
+\end{itemize}
+
+\subsection{moy}
+\begin{itemize}
+\item \util \textbf[moy()]{moy( )}.
+\item \desc renvoie la moyenne d'une liste de complexes, la constante \jump est ignorée.
+\end{itemize}
+
+\subsection{prod}
+\begin{itemize}
+\item \util \textbf[prod()]{prod( )}.
+\item \desc renvoie le produit des éléments d'une liste de complexes, la constante \jump est ignorée.
+\end{itemize}
+
+\subsection{sum}
+\begin{itemize}
+\item \util \textbf[sum()]{sum( )}.
+\item \desc renvoie la somme des éléments d'une liste de complexes, la constante \jump est ignorée.
+\end{itemize}
+
+\subsection{var}
+\begin{itemize}
+\item \util \textbf[var()]{var( )}.
+\item \desc renvoie la variance d'une liste de réels, la constante \jump est ignorée.
+\end{itemize}
+
+\section{Fonctions de conversion}
+
+\subsection{RealArg}
+
+\begin{itemize}
+\item \util \textbf[RealArg()]{RealArg( )}
+\item \desc renvoie l'argument (en radians) de l'affixe réelle d'un vecteur en tenant compte de la matrice courante.
+\end{itemize}
+
+
+\subsection{RealCoord}
+\begin{itemize}
+\item \util \textbf[RealCoord()]{RealCoord(