# MathJax

MathJax est une bibliothèque logicielle JavaScript cross-browser qui affiche les formules mathématiques dans des navigateurs web, en utilisant les balises de AsciiMath (en), LaTeX ou de MathML. MathJax est distribué comme logiciel open-source sous licence Apache.
Le projet MathJax a débuté en 2009 comme successeur de jsMath qui est une bibliothèque de formatage des mathématiques. Il est développé par Design Science (en). Il est subventionné par l'American Mathematical Society, Design Science (en) et la Society for Industrial and Applied Mathematics ; le projet est soutenu par des « partenaires » : Stack Exchange Network et American Institute of Physics et des « soutiens », parmi lesquels la American Physical Society, Elsevier, IEEE, la London Mathematical Society, la Optical Society et le Projet Euclide.
MathJax est utilisé par des sites web MathSciNet, MathOverflow, les journaux du projet Euclide, Scholarpedia, et le portail mathématique russe Общероссийский математический портал. En revanche, Wikipédia a abandonné son usage.

## Propriétés

MathJax est téléchargé en même temps qu'une page web ; il cherche d'éventuelles balises mathématiques dans le contenu de la page, et dans ce cas compose la partie mathématique. Ainsi, MathJax ne nécessite ni l'installation d'un logiciel, ni le chargement de police sur le système de l'utilisateur. Ceci permet à MathJax d'opérer sur tout navigateur qui supporte Javascript, y compris les appareils mobiles.
MathJax affiche les mathématiques par une combinaison de balises HTML et CSS, ou en utilisant un support MathML natif s'il existe. La méthode précise utilisée par MathJax pour composer les mathématiques est déterminée par les propriétés du navigateur de l'utilisateur, des polices disponibles et des paramètres de configuration. La version actuelle MathJax 2.0 introduit le rendu vectoriel SVG.
Dans le cas où la mise en page utilise HTML et CSS, MathJax tente d'optimiser la qualité du rendu par l'emploi de polices mathématiques si elles sont disponibles, et sinon par un rendu en images. Pour les navigateurs plus récents, MathJax fournit un ensemble complet de polices web, que MathJax télécharge au besoin. Si le navigateur n'accepte pas les polices web, MathJax teste si des polices adéquates sont disponibles sur le système local. Dans la négative, MathJax fournit des images pour tous les symboles nécessaires. MathJax peut être configuré pour autoriser ou interdire les polices web, les polices locales, et les polices images.
MathJax peut afficher les expressions mathématiques écrites en AsciiMath (en) en LaTeX ou en MathML. Comme MathJax est destiné seulement à l'affichage des mathématiques, et que LaTeX est un langage de mise en page de documents, MathJax n'accepte que la partie de LaTeX utilisée pour la description d'expressions mathématiques. MathJax fournit également du soutien à l'accessibililté.
L’architecture MathJax est conçue pour supporter ultérieurement l'addition de langages d'entrée et de méthodes d'affichage par l'adjonction de modules chargés dynamiquement. MathJax contient aussi une interface Javascript pour énumérer et interagir avec les parties mathématiques dans une page.

## Compatibilité avec les navigateurs

MathJax est opérationnel dans la plupart des navigateurs courants, y compris Internet Explorer, Firefox, Safari, Opera, iPhone/iPad Safari, et le navigateur Android.

## Compatibilité avec les serveurs

MathJax peut être installé sur des plateformes variées, y compris MediaWiki, Drupal, SPIP, WordPress, et Joomla.

## Support pour AsciiMath

Mathjax fournit un support pour AsciiMath (en)

## Support pour TeX

MathJax a un équivalent pour chaque commande LaTeX de mathématiques. Les commandes mathématiques de AMS-LaTeX sont accessibles via des extensions. MathJax permet aussi de définir des macros TeX et d'utiliser diverses instructions de formatage comme "\color" et "\underline".

## Support pour MathML

MathJax fournit un support partiel pour MathML 2.0 et pour quelques constructions MathML 3.0. MathJax ne traite que de la partie présentation de MathML et ignore sa partie sémantique.