Comment afficher rapidement des formules sans moteur web
De nombreuses applications embarquent un moteur de navigateur entier simplement pour afficher une formule. Cette voie étant fermée à mote, il a fallu en trouver une autre.

mote suit une règle absolue. Ne pas dépendre d’un moteur web.
Je l’ai compris en réalisant le prototype. Dans ce type d’application, le moteur de navigateur intégré représente l’essentiel du coût. J’ai donc décidé de m’en passer dès le départ.
Le problème, c’étaient les formules. En général, on utilise KaTeX ou MathJax dans un navigateur pour les afficher. C’était une méthode inutilisable dans mote.
Les autres solutions ne convenaient pas non plus. Avec un moteur de rendu de polices maison, la forme des caractères diffère de celle des autres applications du système. Or, dans mote, j’avais décidé que tous les caractères seraient dessinés par le moteur de texte de la plateforme.
J’ai finalement choisi la voie la plus difficile.
mote gère la disposition, la plateforme dessine les caractères
La syntaxe des formules suit une convention familière. Dans une phrase, on les entoure d’une paire de signes dollar ; pour les isoler, de deux paires.
Il ne peut pas y avoir d’espace après le signe ouvrant ni avant le signe fermant. Cela évite que des montants comme $5 et $6 soient pris à tort pour des formules. Dans du Markdown écrit directement par une personne, ces petites distinctions sont importantes.
Le rendu des formules a été divisé en deux tâches.
Le cœur de mote calcule la position des caractères et des traits. Les caractères eux-mêmes sont dessinés par le moteur de texte de chaque plateforme.
Le cœur contient une version simplifiée des règles de composition de TeX. Il comprend quatre niveaux de taille, une table qui détermine les espacements en répartissant les symboles en huit catégories, le positionnement des indices, des fractions et des radicaux, ainsi que des éléments comme les parenthèses qui s’agrandissent en fonction de leur contenu.
Mais le cœur ne détermine pas la taille réelle des caractères. Un même caractère peut avoir une taille différente selon la police et la plateforme. Lorsque le cœur demande : « Quelle taille fera ce caractère s’il est dessiné à cette taille-ci ? », la plateforme lui répond. Le cœur finalise la disposition à partir de cette valeur, puis la plateforme dessine les caractères et les traits aux emplacements définis.
Ainsi, même si le nombre de plateformes augmente, il suffit de maintenir une seule mise en page.
Dans l’éditeur aussi, le texte source reste intact. Même lorsqu’une formule s’affiche en mode direct, les octets de la source restent dans la ligne. Seul un espace correspondant à la taille de la formule est réservé à cet endroit.
Le curseur se place donc exactement au bon endroit, et le caractère sur lequel on clique peut être identifié avec précision. Le principe selon lequel l’écran peut être mis en forme sans que le fichier soit modifié est ainsi respecté. Le mode lecture et le PDF utilisent eux aussi la même mise en page.

Les italiques ne sont pas non plus inclinées artificiellement. Des caractères mathématiques Unicode sont utilisés afin de dessiner les véritables glyphes mathématiques présents dans la police.
Les formules inconnues ne sont pas dissimulées
Lorsqu’une formule est discrètement incorrecte, il est difficile de s’en apercevoir.
Si une commande non prise en charge est remplacée par un espace vide, l’utilisateur ne peut pas savoir s’il s’agit d’une faute de frappe ou d’une limite de l’application. C’est pourquoi mote affiche en rouge le nom exact des commandes qu’il ne connaît pas.
Même si les parenthèses ne correspondent pas, l’application ne s’arrête pas. Ces saisies ont été conservées sous forme de tests afin d’éviter que le même problème ne se reproduise.
Le principe de performance a lui aussi été respecté. Les résultats des calculs sont conservés pour un maximum de 512 combinaisons de formules et de tailles de caractères. La même formule n’est pas recalculée à répétition pendant la saisie, et aucune tâche ne s’exécute lorsque l’utilisateur ne fait rien.
Lors de l’exportation en HTML, mote utilise MathML. Comme le navigateur dessine directement les formules, aucun script n’est nécessaire. Les formules restent visibles même sans connexion à Internet.
Certaines choses ne sont pas encore possibles
mote ne prend pas en charge l’intégralité de TeX.
Les commandes définies par l’utilisateur, la spécification des couleurs, la numérotation des formules, les indices sur plusieurs lignes, les symboles placés au-dessus des caractères et le texte placé au-dessus des flèches ne sont pas encore pris en charge.
Il n’existe pas non plus d’accents qui s’étirent pour s’adapter à la largeur. Un chapeau large apparaît comme un chapeau étroit. Les grands symboles de somme et d’intégrale sont dessinés avec un agrandissement de 1,45 fois au lieu d’utiliser des glyphes dédiés. Les parenthèses qui ne devraient s’étirer que verticalement grandissent à la fois en largeur et en hauteur.
Les fractions en ligne sont affichées en petit, comme dans TeX. Pour les afficher en plus grand, il faut le préciser à l’aide d’une commande distincte.
Je ne prétendrai pas que ces fonctionnalités existent déjà. Elles seront ajoutées une par une lorsque des demandes en ce sens arriveront.
Je n’ai pas modifié toute la structure des coûts de l’application pour une seule formule. J’ai plutôt changé la manière de dessiner les formules.
C’était la voie la plus difficile, mais je crois que c’est celle qui pourra durer.