MathJax pour SPIP

Plugin pour prendre en charge les expressions Tex dans une balise dans le contenu éditoral de SPIP à l’aide de la librairie Javascript MathJax

Mode d’emploi

Le plugin prend en charge les formules mathématiques au format Tex dans les contenus SPIP.

Par exemple

Si on note $dm$ la masse du tronçon et $\ddot{y}$ son accélération alors le principe de la dynamique nous donne une première relation :
$$
d\vec{F} = dm \ddot{\vec{y}}
$$

Mais comme le signe $ qui délimite les formules au format Tex est un signe commun qui peut être présent dans du contenu éditorial sans indiquer une formule mathématique, il faut encadrer les contenus que l’on veut traiter par une balise <math>...</math>

La plupart du temps, si vous n’avez pas de signe $ autre dans votre texte, vous pouvez encadrer tout le texte

<math>
Si on note $dm$ la masse du tronçon et $\ddot{y}$ son accélération alors le principe de la dynamique nous donne une première relation :
$$
d\vec{F} = dm \ddot{\vec{y}}
$$
</math>

Et les formules seront ainsi transformées comme suit

Par ailleurs sur chaque formule un menu contextuel disponible au clic droit vous permet d’exporter la formule dans le format Tex ou MathML, ainsi que d’accéder à d’autres options

Modèle <math|f=...>

Alternativement à la syntaxe historique de SPIP, il est possible aussi d’utiliser un modèle pour insérer des formules inline sour la forme <math|f=...votre_formule en latex...>

Exemple

<math|f=t=\frac{d}{V_{A}+V_{B}}=\frac{70}{80+60}=\frac{70}{140}=0,5\ h=30\ minutes→12h\ 30\ min>

donne

Cette syntaxe est issue du plugin mathjax_latex, qui devient obsolète par la même occasion, tous les utilisateurs pouvant utiliser ce plugin MathJax et l’une ou l’autre syntaxe selon leur préférence

Configuration

Le plugin peut-être configuré pour utiliser la version CDN de mathjax (par défaut) ou une version téléchargée dans le dossier lib/ de votre site

Configuration avancée de MathJax 3

Si vous voulez utiliser la librairie MathJax de façon avancée, au delà de ce qui est prévu par le plugin, vous pouvez surcharger le fichier js/mathjax-config.json en en mettant une copie dans votre dossier squelettes/ et le modifier à votre guise pour y ajouter les options que vous souhaitez.

Par ailleurs, le plugin utilise par défaut le composant tex-chtml via le fichier tex-chtml.js https://docs.mathjax.org/en/latest/web/components/combined.html#tex-chtml Si votre usage le nécessite vous pouvez utiliser un autre composant, via un define dans votre fichier mes_options.php

define('_MATHJAX_LIB_COMPONENTS','tex-svg.js');
Le plugin chargera alors ce composant à la place de celui par défaut

Discussion

19 discussions

  • 13
    Michel Suquet

    Bonjour,

    je viens de passer à spip4.1(et à php8.1 pour cette occasion)) et votre plugin est compatible, après avoir changé sa borne de compatibilité, il fonctionne ; avec cependant sans doute encore le problème que j’ai signalé quand on met du LaTeX dans une description d’une image.

    Pouvez-vous faire le changement de bornes de compatibilité, [3.0.0 ;4.1.*] ?

    Merci encore une fois pour ce plugin qui nous permet d’utiliser de belles formules mathématiques.

    Cordialement,

    Répondre à ce message

  • 3
    Michel Suquet

    Bonjour,

    je viens de mettre à jour, sur un spip4.1, le plugin en version 1.5 (c’est celui qui est proposé pour la mise à jour) et il y a une erreur :
    Erreur d’exécution ../prive/objets/contenu/article.html | File […]/plugins/auto/mathjax/v1.5.0/inc/math.php Line 87 : Call to undefined function str_contains()

    Sur cette page :
    https://test.apmep.fr/Concours-Advance

    je vois qu’il y a un problème avec le squelette qu’on utilise :
    Erreur d’exécution plugins/spipr-dane-noisettes/noisettes/article-contenu.html | File […]/plugins/auto/mathjax/v1.5.0/inc/math.php Line 87 : Call to undefined function str_contains()

    Ainsi que sur cette page :
    https://test.apmep.fr/Annales-des-concours-niveau-Terminale

    1 Erreur d’exécution plugins/spipr-dane-noisettes/noisettes/rubrique-texte.html | File […]/plugins/auto/mathjax/v1.5.0/inc/math.php Line 87 : Call to undefined function str_contains() 2         Erreur d’exécution plugins/auto/metasplus/v2.4.5/inclure/metasplus/dist.html | File […]/plugins/auto/mathjax/v1.5.0/inc/math.php Line 87 : Call to undefined function str_contains()

    S’il faut plus de détails, merci de m’indiquer lesquels sont nécessaires.

    Cordialement,

    Michel Suquet

    • Hop,

      effectivement c’est une fonction disponible uniquement en PHP 8 ou spip 4.2, mais pas en SPIP 4.1 + PHP 7.4.

      J’ai ouvert un ticket en ce sens, pour que cerdic qui a bossé dessus il y a peu soit au courant.

    • Michel Suquet

      Pour résoudre ce problème, si on passe en php8 cela suffit ?

      À+,

      Michel Suquet

    • Michel Suquet

      on est passé en php8.1 sur notre site de test et avec la version 2.0.0 du plugin : c’est bon, plus d’erreur. On va faire de même sur le site officiel.

      Qu’apporte la 2.0.0 par rapport à la 1.5.0 ?

    Répondre à ce message

  • Bonjour,

    Je viens de faire une mise à jour de SPIP 4.0 vers 4.1 puis 4.2 et je me retrouve dans une configuration où MathJax ne fonctionne que si je désactive la compression des scripts javascript.
    J’héberge en local ma bibliothèque MathJax dans lib/mathjax/ (sans passer par un CDN).

    Dans le cas où je désactive la compression des scripts, je n’ai aucune erreur dans la console du navigateur (juste un warning)

    Dans le cas où j’active la compression des scripts, j’ai deux erreurs 404 qui apparaissent.
    GET https://poivron-robotique.fr/extensions/MathMenu.js?V=2.7.8
    GET https://poivron-robotique.fr/extensions/MathZoom.js?V=2.7.8
    Au lieu d’aller chercher les scripts dans example.com/lib/mathjax/extension, la requête pointe vers example.com/extension

    Quelqu’un a une solution pour ce soucis ?

    Répondre à ce message

  • 5
    Michel Suquet

    Bonjour,

    je viens de mettre à jour le site de l’APMEP Île-de-France en spip4. Votre plugin continue à fonctionner : on peut donc considérer qu’il est compatible avec la version 4.0.0.

    Un bémol toutefois : dans la description des images, il fonctionne en partie, comme vous pouvez le constater pour les figures 54 et 55 par exemple, les fractions ne sont pas reconnues alors que dans le texte il n’y a pas de problème. Pour la version précédente 3.2 de spip, cela fonctionnait.
    https://www.apmep-iledefrance.fr/Le...

    Voyez-vous où se situe le problème ?

    Cordialement,

    Michel Suquet

    • Bonjour,
      j’ai tenté l’installation sous spip 4.0.0 en modifiant la compatibilité dans le fichier paquet.xml mais j’ai toujours « version incompatible ».
      Comment l’avez-vous installé ?
      Merci d’avance

    • Michel Suquet

      Bonjour,

      tout d’abord, vous pouvez lire cet article que je viens de voir :
      Migrer de SPIP 3.2 à SPIP 4.0 : le livre de cuisine

      En ce qui me concerne, j’ai mis en place une sorte de rétro-compatibilité en attendant que tous les plugins se mettent à spip 4, j’ai suivi ce qui est dit dans la FAQ de cet article :https://blog.spip.net/O-mega-c-est-...

      Cordialement,

      Michel Suquet

    • Merci Michel,
      j’ai finalement réussi à installer ce plugin. Je n’avais pas mis 4.0.0 avant 4.0.x dans paquet.xml.
      Au passage, j’ai le même problème avec les légendes : les accolades empêchent l’appel à mathjax.
      Un contournement possible est d’écrire \{ et \} si besoin d’accolades.
      J’ai un autre problème avec mon site : dans la partie privée, les formules sont à la bonne taille mais pas dans la partie publique, Exemple : https://cmath.xyz/spip.php?article132
      Je suppose qu’il faut que je fouille dans les feuilles de style...
      Cdt

    • Michel Suquet

      Bonjour Christophe,

      Un grand merci pour cette astuce des accolades ! Cela fonctionne.

      Heureusement que ce n’est que dans les légendes que le problème se pose !

      Je me demande si cela est dû au plugin ou à spip 4 car avec spip 3.2 il n’y avait pas ce problème. Par contre, je ne sais pas le corriger :-(

      Pour le problème de la taille de la formule affichée, je me demande s’il ne faut pas rajouter un d à \frac qui devient \dfrac, ou alors un \displaystyle ?

      Quel squelette utilises-tu ? ← c’est juste par curiosité. J’ai remarqué que selon les squelettes utilisés, l’affichage peut varier.

      Cordialement,

      Michel Suquet

    • Je pense qu’il doit s’agir d’un problème d’interprétation des accolades dans les légendes (les accolades signifient italique en spip) qui passe avant la transmission des formules à mathjax, ce qui fait que la formule n’est pas syntaxiquement correcte et donc non interprétée.
      Je crains qu’il faille modifier des fonctions internes de spip et donc transmettre ce bug aux développeurs.

      Pour la taille, cela concerne toutes les formules, pas seulement les fractions. En comparant le code source des parties privée et publiques, j’ai constaté des différences de . Mais je suis incapable de savoir qui influence la taille : spip ? mathjax ? le plugin ? Bref c’est pas gagné.

      Mon squelette est spipr : https://spipr.nursit.com/
      A+

    Répondre à ce message

  • 3
    Michel Suquet

    Bonjour,

    pour utiliser votre plugin, il est nécessaire d’apporter une modification en mettant https à la place de http dans le fichier suivant :
    https://git.spip.net/spip-contrib-extensions/mathjax/src/branch/master/mathjax_pipelines.php#L26

    Cordialement,

    Michel Suquet

    Répondre à ce message

  • Bonjour,

    J’ai un peu galérer pour faire fonctionner le plugin :

    • L’utilisation du plugin avec le cdn proposé ne fonctionnait pas. Apparemment ça bloque pour les sites en httpS
    • En l’utilisant sans le CDN mais avec la lib proposée, j’avais des soucis et des formules ne s’affichaient pas.

    Finalement, je suis revenu au réglage « Par CDN » et ai corrigé le fichier mathjax_pipelines.php ligne 26 pour changer l’appel du js.
    //cdn.mathjax.org/mathjax/latest/MathJax.js
    à la place de :
    http://cdn.mathjax.org/mathjax/latest/MathJax.js

    Du coup ça fonctionne.

    Seul souci : lors de l’enregistrement d’un contenu SPIP les formules ne sont pas interprétées. Il faut actualiser la page pour qu’elle le soit.

    Répondre à ce message

  • Bonjour,
    Existe-t’il une version compatible SPIP 3.2

    Répondre à ce message

  • 12
    Jean-Eric

    Bonjour,
    Existe-t’il une version compatible SPIP 3.1.1 [22913]
    Merci
    JE

    Répondre à ce message

  • 4
    Jean-Eric

    Est-ce que ce code marche chez vous ?

    <math>
    $$
    \begin{tabular}{rcl} 
    X_F & =& R_F \cos\theta_F \\ 
    Y_F & =& R_F \sin\theta_F
    \end{tabular} 
    $$
    </math>
    • en LaTeX même ce code ne marche pas.

      ca oui

      \begin{tabular}{rcl} 
      $X_F$ & $=$& $R_F \cos\theta_F$ \\ 
      $Y_F$ & $=$& $R_F \sin\theta_F$
      \end{tabular}

      (même si l’emploi de l’environnement align de amsmath serait mieux).

      Après je n’ai pas ’install du plugin pour tester…

    • Jean-Eric
      • le code tel quel dépend de l’environnement
      • si amslatex est compris par MAthJax Super !

      Merci
      JE

    • aucune idée…

    • Jean-Eric

      si ca marche nettement mieux
      \begin{align*} \end{align*}
      En 2008 qd j’avais ecrit mes articles ca ne fonctionnait pas.

    Répondre à ce message

  • Yves Biton

    Bonjour.

    Je suis l’auteur du logiciel MathGrap32. Ce logiciel permet l’exportation de figures en html dans un SVG. La bibliothèque JavaScript utilisée pour l’exportation la librairie MathJax (en fait une copie sur le site de Sesamath) mais en mode SVG pour la sortie.
    Elle est donc pour le moment incompatible avec votre plugin qui utilise me semble-t-il par défaut une sortie en html.

    Ma question : Est-il possible de configurer soi-même La façon dont MathJax est utilisé par votre plugin ? (J’espère que oui). Et si ou comment ?

    Merci d’avance de votre réponse.

    Yves Biton.

    Répondre à ce message

  • 1

    Autant pour moi ; dans mon dernier message, dernière phrase, je voulais parler de la balise
    <math>.

    • Bonjour, effectivement ce serait mieux sans cette balise ...

      J’utilise pour l’instant le plugin Jsmath qui reconnaît dans un article spip une formule mathématique par la balise $ (comme pour latex). Je pense que ce plugin ne sera plus mis à jour mais remplacé par Mathjax ...

      Je ne sais si c’est possible mais un plugin Mathjax qui reconnaît la syntaxe $\sqrt2$ serait super !

    Répondre à ce message

  • 1
    Guillaume Blanc

    Bonjour,

    Je viens de passer de spip 2.1 à 3.0.17 ; mes articles avec les maths ne fonctionnent plus : si la balise math est là, les équations sont bien affichées, mais pas la mise en page : http://gblanc.fr/spip.php?article529 ; si j’enlève la balise math, la mise en page devient correct, mais évidemment les équations ne sont plus affichées. J’avais le plugin mathjax sous 2.1, je l’ai remis sous 3.0.

    Que puis-je faire ?

    Répondre à ce message

  • 1

    Bonjour,

    En fait, une fois arrangé pour fonctionner sous spip3, le plugin mathjax ne fonctionne pas complétement : il ne reconnait pas un certain nombre d’expression.

    Notamment toutes les expressions du type X_ ... ce qui est plus que génant.

    Quelqu’un a trouvé une solution ?

    Merci

    • Bonjour

      de mon coté X_1 ou X_a fonctionne bien. Par contre je n’arrive pas à exploiter la fonction \cancel, qui permet de barrer des caractères :

      $\require{cancel}
         \cancel{T} 
      $

      Ceci ne m’affiche que \cancelT
      Il en va de même avec le enclose.

      François-Marie

    Répondre à ce message

  • Bonjour,

    je fonctionne sous SPIP 3.0.13 (en local et à sur serveur).
    CFG pour SPIP 3 est installé.

    Pour le moment, j’essaye d’installer MathJax en local.
    Mais, le plugin n’apparaît pas dans l’espace privé/gestion des plugins ? Y-a-t-il quelque chose que je n’ai pas fait ?

    Merci de vos réponses.
    Franck.

    Répondre à ce message

  • Daniel Caillibaud

    Bonjour,

    Si le plugin cfg n’est pas installé, l’installation du module mathjax plante tout le site avec l’erreur

    PHP Fatal error : Call to undefined function lire_config() in .../plugins/auto/mathjax/mathjax_spip_pipelines.php on line 24

    Je suggère la modif suivante dans mathjax_spip_pipelines.php, remplacer

    if (lire_config(’mathjax/mode_dappel’, ’cdn’) == ’cdn’)

    par

    if (!function_exists(’lire_config’) || lire_config(’mathjax/mode_dappel’, ’cdn’) == ’cdn’)

    Répondre à ce message

  • 7

    it seems to work on spip 3.0 :)

    Why don’t you remove the limitation in plugin.xml ?

    • Hi,

      How did you proceed to install mathjax on Spip 3 please ?
      I tried to add to plugin.xml but it doesnt work.

      Thank you.

    • I’ve juste done it. Two steps :
      0) unzip the plugin zip file in a directory .../plugins/mathjax/
      1) unzip the content of https://github.com/mathjax/MathJax/zipball/master in the directory .../plugins/mathjax/lib/mathjax-1.1a/ (you’ll probably have to create it) ;
      2) comment the (near to) last line in plugin.xml :
      <!— —>
      3) Activate the plugin.

    • The « last line » in 2) should read :
      < !— <necessite id=« SPIP » version=« [3.0.3] » />—>

    • Hello,

      Thank you for your reply.

      I try it as soon as possible !

      Thanks

    • It works great, thanks.

      Mais c’est tout de même lent l’accès à http://cdn.mathjax.org/mathjax/latest/MathJax.js .

      Vous parlez de l’installer en local au lieu d’aller chercher le JS sur le site de mathjax, comment fait on ? Installer le Mathjax.js en local permettrait d’accéler l’affichage des pages ?

      merci

    • Oui, bien sûr, il faut l’installer en local. La racine du site spip étant /spip/, le plugin est dans le répertoire /spip/plugins/mathjax/, j’ai créé un répertoire /spip/plugins/mathjax/lib/mathjax-1.1a et y ai dézippé le contenu de la “zipball” https://github.com/mathjax/MathJax/zipball/master, ce qui crée les fichiers suivants :

       config extensions images LICENSE README.md unpacked

       docs fonts jax MathJax.js test

    • Ah d’accord, il est déjà installer comme ceci alors.

      Mais j’ai remarqué que l’accès à cette page : http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML demande toujours un peu de temps.

      Cette ligne est disponible dans le code source de n’importe quelle page quand on active le plugin.

    Répondre à ce message

  • 1

    Lorsque je veux écrire du code \LATEX entre accolade, spip ne calcule pas la formule et affiche le code entre accolade en italique.

    je veux écrire : f^{-1}

    j’obtient : f^-1, -1 en italique au lieu d’être en exposant.

    Merci d’avance !

    • Personnellement, j’utilise

      <math>$f^{-1}$</math>

      pour mettre en exposant.
      Après, sur quelle version de SPIP es-tu ? Tu sais si le javascript de MathJax est bien inclus ?

    Répondre à ce message

  • 3
    Vincent L.

    Bonjour,

    Apparemment, il y a eu du changement dans l’hébergement du projet MathJax.
    Il n’est plus hébergé par Sourceforge, le lien d’installation de la librairie n’est donc plus à jour.

    J’ai essayé de suivre le nouveau lien https://github.com/mathjax/MathJax/, mais la version a apparemment changé. J’ai donc l’impression que la nouvelle librairie et le plugin spip sont imcompatibles.

    • Vincent L.

      J’ai essayé de nouveau aujourd’hui, et ça ne marche toujours pas.

      J’ai essayé la révision du 09/09/2011, mais cela ne suffit pas.

      Il y a une erreur php quand j’active ce plugin.
      Fatal error: Call to undefined function lire_config() in C:\Program Files\EasyPHP-5.3.5.0\www\spip\plugins\mathjax\mathjax_spip_pipelines.php on line 24

      Je trouve aussi que la notice d’Installation de la librairie n’est plus à jour.
      Je ne suis pas sûr qu’il faille dézipper le fichier fonts.zip.

      D’ailleurs, on n’a peut-être plus besoin d’installer la librairie, puisqu’il y a un système de cdn proposé par MathJax.

      C’est moi qui n’ai rien compris ? Est-ce que quelqu’un arrive à faire fonctionner ce plugin ?

    • J’ai mis à jour entièrement le plugin il y a quelques semaines, avec la nouvelle possibilité d’utiliser le CDN de MathJax, il faut pour cela retélécharger la nouvelle version du plugin, tout est configurable avec CFG par la suite.

      Je vais mettre à jour l’article de documentation ;).

    • Vincent L.

      Merci beaucoup pour votre réactivité. Tout fonctionne à présent !

      J’ai trouvé ce qui ne marchait pas pour moi (grâce à votre commentaire) : je ne savais pas qu’il fallait au préalable installer le plugin CFG.

      J’ai relu la notice, elle me semble beaucoup plus claire maintenant. (Peut-être serait-il judicieux d’y souligner la dépendance envers le plugin CFG).

      Bravo à vous, et merci encore une fois. Je suis ravi de pouvoir profiter de MathJax dans mon site Spip.
      Bonne continuation.

    Répondre à ce message

  • 3

    Merci pour ce plugin très intéressant ; je ne connaissais pas MathJax ; c’est vraiment très bien.

    Toutefois il y a des erreurs dans le code du fichier « mathjax_spip_pipelines.php » :

    Lignes 24 et 25 :

    ["\\(","\\)"] et ["\\[","\\]"]
    Il faut coder (on est dans php pour produire du code JS):
    ["\\\(","\\\)"] et ["\\\[","\\\]"]

    Ligne 25 : supprimer la virgule en fin de ligne

    Ligne 29 : supprimer </script> qui est en trop.

    Je crois aussi qu’il faudrait soit supprimer les inputs du type [, ] et \(, \), soit (meilleure solution) les échapper dans la fonction « traiter_math ».

    Enfin une dernière remarque : la balise de SPIP est vraiment malvenue, car elle fait doublon avec celle de MathML ; cela empêche d’utiliser MathJax pour entrer du code MathML dans SPIP.

    • Merci beaucoup ! C’est corrigé par http://www.spip-contrib.net/MathJax-pour-SPIP#forum438553

      Je transmets ta remarque à un développeur :)

    • La balise de SPIP n’empêche rien : il reste possible de bloquer le traitement des raccourcis via <html><math>ici du MathML</math></html> ; autre solution éventuellement, un modèle <mathml | contenu= xxxx>.

    • Tout à fait d’accord.

      Finalement j’ai adopté ce plugin pour un de mes sites (merci encore aux auteurs).
      J’ai seulement rajouté la possibilité de coder le LaTeX entre les délimiteurs \(, )\ et [, ] en plus des $ et $$ (dans le fichier math.php).
      Les formules sont vraiment belles (même en mode HTML/CSS) et j’apprécie aussi la possibilité de faire coder facilement des formules LaTeX au visiteur en interactif.

      Seul inconvénient : l’affichage des formules est parfois trop lent (le JS s’exécute dans le navigateur donc pas de système de cache possible).

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom