Je suis en train de réaliser un parseur LaTeX->MathML.
J'ai constaté que le nombre d'exceptions à la règle suivante \commande[argument_optionnel]{argument1}{argument2}...{argument_n} était finalement négligeable.
Du coup, mon parseur ne parse que les expression ayant cette syntaxe.
Ce que je voudrais faire c'est de transformer ce qu'il reste, via des expressions rationnelles.
Donc le truc, c'est que pour gérer les puissances et les indices je galère un peu.
Voilà ce que j'ai fait :
$math = preg_replace('!(\S+)_(\{\S{1,}\})\^(\{\S{1,}\})!U', '\\subsup{$1}$2$3', $math);
$math = preg_replace('!(\S+)\^(\{\S{1,}\})_(\{\S{1,}\})!U', '\\subsup{$1}$3$2', $math);
$math = preg_replace('!(\S+)_(\S{1})\^(\S{1})!U', '\\subsup{$1}{$2}{$3}', $math);
$math = preg_replace('!(\S+)\^(\S{1})_(\S{1})!U', '\\subsup{$1}{$3}{$2}', $math);
$math = preg_replace('!(\S+)\^(\{.{1,}\})!U', '\\sup{$1}$2', $math);
$math = preg_replace('!(\S+)_(\{.{1,}\})!U', '\\sub{$1}$2', $math);
$math = preg_replace('!(\S+)\^(\S{1})!U', '\\sup{$1}{$2}', $math);
$math = preg_replace('!(\S+)_(\S{1})!U', '\\sub{$1}{$2}', $math);
J'espère que quelqu'un qui connait le LaTeX saura m'aider...En gros le problème, c'est qu'en faisant ça, je ne récupère pas les expressions de la forme truc_a^{machin} et autres variantes. Mais pire, et là je ne sais pas vraiment pourquoi, parfois les \sup{} et \sub{} se placent mal et il faut ajouter des espace devant les { pour ne résoudre que partiellement le problème.
Je ne sais pas si j'ai été super clair, n'hésitez donc pas à me demander des précisions sur certains points s'il le faut...
Merci d'avance.
[EDIT]
Argggeuuu !
En fait ça vient juste du \S, il faut du coup mettre une espace avant le symbole sur lequel on veut mettre l'exposant ou l'indice... :'( du coup c'est pas évident du tout... Je vais essayer d'autres trucs pour mieux pouvoir exposer mon problème
[/EDIT]