Rendu web de formules mathématiques
Cette page date un peu et le paquet texgd n'étant pas utilisable sur mon serveur actuel, j'ai modifié le processus de transformation de formules LaTeX en PNG que j'ai documenté sur une nouvelle page.
Introduction
J'utilise le langage TeX pour afficher toutes les formules mathématiques sur ce site et cette page explique la mise en oeuvre de cette fonctionnalité.
Tex2Png : texgd + PHP
Le coeur de la solution c'est l'exécutable texgd, une application qui s'installe sur le serveur envisagé. Utilisant Ubuntu je n'ai eu besoin que d'exécuter la commande suivante pour disposer de cette application sur ma machine :
apt-get install texgd
La doc ("man texgd") est courte mais suffit pour utiliser cette application, plutôt spartiate dans son genre. En gros : on exporte des variables d'environnement Bash pour passer des paramètres à l'application, que l'on lance directement, sans arguments. Elle génère une image selon les variables d'environnement exportées qui sont la formule, le chemin du fichier image généré etc.
La passerelle web
Il ne reste maintenant qu'à décrire la partie PHP : c'est un script qui gère un dossier de cache d'images pour appeler tex2gd uniquement quand il y en a besoin et économiser beaucoup de temps machine qu'un serveur web doit économiser par-dessus tout :
<?
//Ce script nécessite d'installer le package texgd et la présence de plusieurs répertoires ayant les privilèges d'écriture règlés pour le serveur web (l'utilisateur sous lequel tourne ce script).
$Formula = str_replace("\\\\", "\\", rawurldecode($_SERVER["QUERY_STRING"]));
$PicName = md5($Formula).".png";
$CacheDir = "mathcache/";
$PicFilePath = "http://www.flubb.net/"."$CacheDir$PicName";
$TmpPath = $CacheDir."tmp/";
//On ne crée l'image que si elle n'existe pas déjà dans le cache
if (!file_exists($PicFilePath)) {
$TexGDCommand = "
export texgd_src='$Formula'
export texgd_tmpdir=$TmpPath
export texgd_fontdir=".$CacheDir."mathfonts
export texgd_outfile=$CacheDir$PicName
export texgd_texheader=".$CacheDir."header.tex
export texgd_style='\$\$'
export texgd_density=10
export texgd_compressratio='3'
texgd";
$Ret = exec($TexGDCommand, $Output);
}
//On envoie un tag HTML contenant la référence de l'image générée.
echo "<img style='vertical-align:middle;' src='$PicFilePath' border='0' title='$Formula'/>";
?>Ce script est une page à part entière. L'intérêt ? Et bien si on écrit l'URL suivante dans la barre d'adresse de son navigateur :
http://www.flubb.net/tex2png.php?I_2=\frac{x-a}{2}f^{\prime\prime}(a)+\int_{a}^x\frac{x-t}{2}f^{(3)}(t)dtet bien vous verrez l'image suivante apparaître dans votre navigateur :
Exemples
En cours...
Liens externes
J'aurais pu utiliser d'autres applications/scripts pour faire des conversions de formules TeX en PNG, comme ceux-ci : Charles' Latex Page : une page intéressante qui propose des infos sur TeX mais également des schémas de conversion. TeX2png.php : un code qui fait la conversion TeX en PNG mais en partant de bien plus bas, et plus intéressant, que texgd. Là, on appelle TeX directement. Note : c'est issu du projet PHPWiki. Des vidéos de Knuth : ça n'a presque rien à voir avec ce qui précède, si ce n'est qu'il cause de TeX :)
