Une macro est une fonction créée par l’utilisateur et qui renvoie un résultat (liste de complexes ou chaînes, ou bien Nil). TeXgraph distingue trois sortes de macros :
Un fichier de macros est un fichier texte *.mac qui ne contient que des macros et éventuellement des variables globales. On peut créer/modifier un fichier de macros directement dans TeXgraph ou bien avec l’éditeur de son choix, à condition d’utiliser l’encodage UTF8.
Exemple(s) : voici la commande définissant une macro appelée racine qui donne la liste des racines n-ièmes d’un complexe :
{utilisation: racine(n,z), donne la liste des racines nièmes de z} if (Ent(%1)=%1) And %1>0 then $a:= abs(%2)^(1/%1), for $k from 0 to %1-1 do a*exp(i*(Arg(%2)+$k*2*pi)/%1) od fi
Lors de l’analyse de [$a :=3, ∖racine(a,i)] : TeXgraph remplace ∖racine par l’expression de la macro en remplaçant le paramètre %1 par la variable a et le paramètre %2 par i, ce qui revient à analyser la commande :
[$a:=3, if (Ent(a)=a) And a>0 then $a:= abs(i)^(1/a), for $k from 0 to a-1 do a*exp(i*(Arg(i)+$k*2*pi)/a) od fi]
c’est le développement immédiat. On remarquera que cette fois-ci il y a une seule variable a, ce qui fait que cette commande ne donnera pas le bon résultat (elle donne i). Par contre la commande [$b :=3, ∖racine(b,i)] donne le bon résultat ([0.866025403784+0.5*i,-0.866025403784+0.5*i,-i]). Le développement immédiat ne peut avoir lieu que si la macro existe déjà, sinon c’est un développement différé.
Le développement immédiat est à proscrire lorsque la macro possède des variables locales et qu’il y a un risque d’homonymie avec les variables de l’expression appelante. Cependant il y a des cas ou celui-ci est plus intéressant que le développement différé, par exemple si on définit la macro appelée f par la commande %1*arctan(%1)/(1+%1^2) et si on crée l’élément graphique Courbe/Paramétrée avec l’expression t+i*∖f(t), alors l’expression sera en réalité t+i*t*arctan(t)/(1+t^2) et comme cette expression va être évaluée un "grand nombre" de fois, ce sera plus rapide à l’exécution que l’expression t+i*f(t), car dans celle-ci (développement différé) la macro f sera appelée à chaque évaluation de l’expression.
D’un autre côté, le développement immédiat permet aussi d’utiliser les macros comme des variables ou comme des raccourcis.
3.Ceci est également valable pour la commande des éléments graphiques Utilisateurs.
4.Ce n’est pas la valeur de a qui remplace %1 mais l’adresse de a.
5.Dans cette expression il y a en fait deux variables a mais il n’y a pas d’ambiguïté car l’une est "branchée" sur les variables locales de la macro, et l’autre sur les variables locales de l’expression "appelante".