3 Principes et utilisation
Lephenixnoir edited this page 2019-06-20 17:53:34 -04:00

Principes et utilisation

La bibliothèque TeX permet d'afficher des formules mathématiques en deux temps. Prenons pour exemple une formule TeX simple :

\left(1+\frac{1}{n}\right)^n

La première étape est le parsing (ou analyse syntaxique) et consiste à analyser le texte de la formule pour en construire une représentation structurée. Cette étape lit la syntaxe TeX, les commandes comme \frac, trouve les arguments (qui sont peut-être aussi des commandes) et comprend comment les objets sont inclus les uns dans les autres. Elle produit une structure de données correspondant à la formule.

env:primary 33x21,12
    flow 33x21,12
        <left> subtype '(' 3x17,8 +0+0
        "1+" 11x7,3 +4+0
        <frac> 7x17,8 +16+0
            flow 5x7,3
                "1" 5x7,3 +0+0
            flow 5x7,3
                "n" 5x7,3 +0+0
        <right> subtype ')' 3x17,8 +24+0
        <\sup> 5x7,3 +28-9
            flow 5x7,3
                "n" 5x7,3 +0+0

Dans le code, il s'agit d'un objet de type struct TeX_Env. On y trouve différentes informations comme la taille de tous les éléments ; la formule complète faire 33 pixels de large et 21 pixels de haut, tandis que la fraction fait 7 par 17.

La deuxième étape est le rendu, où l'on dessine la formule à partir de la structures de données. Cela produit un visuel à l'écran.

Image : Rendu graphique de la formule

Utilisation et fonctions principales

Les fonctions principales sont situées dans l'en-tête <TeX/TeX.h>. Vous n'avez besoin d'inclure que cet en-tête si vous ne faites pas un usage avancé de la bibliothèque.

#include <TeX/TeX.h>

Configuration des fonctions d'interface

Avant de pouvoir parser et dessiner des formules, vous devez indiquer à la bibliothèque comment évaluer la taille du texte et faire le dessin. Voyez la page Fonctions d'interface pour voir comment lui indiquer les bonnes fonctions selon votre environnement de développement.

Parser une formule

Pour parser une formule, on utilisera TeX_parse() en indiquant si l'on utilise le mode large (display) ou en-ligne. Le mode large est utile pour les formules qui sont toutes seules sur leurs lignes et peuvent donc être hautes. Lorsqu'il est utilisé, les sommes et les produits ont leurs bornes placées au-dessus et en-dessous d'eux. Le mode en-ligne réduit la hauteur des formules et est préférable quand une formule fait partie d'un paragraphe pour ne pas trop déformer les lignes.

L'image ci-dessous affiche la même formule en mode large (à gauche) et en-ligne (à droite).

Image : illustration sur \sum_{i=1}^{n}i!

TeX_parse() renvoie un objet structuré de type TeX_Env en cas de succès, et NULL en cas d'erreur. Cela peut être dû à une erreur de syntaxe dans la formule, un manque de mémoire, ou une limitation de la bibliothèque.

struct TeX_Env *formula = TeX_parse("\\sum_{i=1}^{n}i!", 1);

Il faut faire attention à deux choses :

  • La première est de ne pas mettre d'espaces superflus dans la formule, car ils seront rendus tels quels et donneront souvent une impression de vide.
  • La seconde est d'échapper les backslashs puisqu'ils ont une signification particulière en C.

Dessiner

Une formule parsée peut être utilisée pour faire le rendu. La fonction TeX_draw() se charge de cela ; elle prend en paramètres la formule, la position et la couleur du tracé. La couleur est transmise aux fonctions d'interfaces fournies par l'utilisateur ; voyez la page Fonctions d'interface.

TeX_draw(formula, 10, 10, BLACK);

Une formule peut être dessinée autant de fois que nécessaire.

Libérer une formule

Une fois qu'on n'a plus besoin d'une formule, il faut libérer la mémoire qu'elle occupe. La fonction TeX_free() sert à ça.

TeX_free(formula);

Une fois la formule libérée, elle ne peut plus être utilisée.

Raccourci

La fonction TeX_interpret() est un raccourci pour les trois fonctions précédentes. Elle parse une formule TeX, la dessine et la libère. Il ne faut l'utiliser que lorsque la formule est à usage unique, sinon le parsing est exécuté et la mémoire réallouée à chaque affichage !

Les exemples donnés ci-dessus sont équivalents à :

TeX_interpret("\\sum_{i=1}^{n}i!", 1, 10, 10, BLACK);