KaTeX, les maths et un début de solution

(enfin, j'espère)

a marqué ce sujet comme résolu.

Le passage de MathJax à KaTeX est génial pour plein de raison, ne serait-ce que pour la vitesse à laquelle les pages avec des maths se chargent (<3). Le "problème", c’est qu’en terme de fonctionnalité, kaTeX est légèrement en retard en terme de fonctionnalités, ce qui fait que le rendu est un peu bizarre.

Piti état de la situation

Voici une petite liste de ce que j’ai repéré. Hésitez pas à me dire si vous voyez autre chose, mais dans le doute, passez faire un tour par là, qui correspond normalement à ce que ZdS utilise (attention, vous pouvez tomber sur cette page, mais celle-ci présente les fonctionnalités de la version de développement). Il y a également la page "Things that KaTeX does not (yet) support" (pareil, dans ce qui est, je crois, la version actuellement utilisée).

  1. Premier changement annoncé ici, l’apparition d’un mode displayMath. En gros, le code suivant ne fonctionne plus,

    $$\begin{array}{cc}
    a&b\\
    c&d
    \end{array}$$
    

    Par contre, le code suivant fonctionne:

    $$
    \begin{array}{cc}
    a&b\\
    c&d
    \end{array}
    $$
    

    En effet,

    abcd\begin{array}{cc} a&b\\ c&d \end{array}

    C’est plus de peur que de mal, mais ça fait très peur la première fois.

  2. Ensuite, c’est l’absence de \newcommand qui a fait du dégât chez moi (et chez d’autres, on dirait). La fonctionnalité est déjà présente dans KaTeX depuis le 7 juin, mais je n’ai aucune idée de quand elle sera dans la version stable. Donc pour le moment, c’est non.

  3. \begin{align} n’est plus valide (et ne l’a jamais été en LaTeX standard entre dollars). Par contre, il suffit d’utiliser \begin{aligned} à la place. Du coup,

    $$
    \begin{aligned}
    y &= m_1 x + p_1 \\
    y &= m_2 x + p_2  
    \end{aligned}
    $$
    

    Fait bien ce qu’on attend:

    y=m1x+p1y=m2x+p2\begin{aligned} y &= m_1 x + p_1 \\ y &= m_2 x + p_2 \end{aligned}
  4. \hline n’est actuellement pas disponible. Pareil la fonctionnalité est déjà disponible depuis le 12 mai, mais pas dans la version stable. Et je n’ai aucune idée de comment tricher sur ce point ^^ (à part jouer avec \rule, qui est disponible).

  5. Le point dont tout le monde ce fout, sauf moi, c’est que \ce{} n’est pas disponible non plus. La pull request existe, mais c’est pas pour tout de suite ^^

Solution possible ?

On ne passera pas à la prochaine version de KaTeX tout de suite, encore une fois pour de bonnes raisons. En plus, ça ne changerais pas les point 1 et 2. Donc ce que je propose, c’est un "petit" script qui fait une partie du taf de correction (les points 1, 2 et 3, pour être précis).

C’est codé en python et ça s’installe comme tel (j’avoue que je sais pas trop comment faire sous Windows, mais pour Mac et Linux, ça devrait le faire):

pip3 install --user git+ssh://git@github.com/pierre-24/zds-fixcmd.git

(vous n’êtes pas obligé de mettre le --user, mais alors il faudra avoir les droits administrateur, sinon n’oubliez pas de faire un truc du genre echo 'PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc)

Une fois que c’est fait, et munis d’une archive d’un de vos contenus problématiques, disons contenu.zip, vous utilisez simplement la commande:

fix-zdscmd contenu.zip

… Et si tout ce passe bien, vous devriez récupérer une archive nommée contenu.fix.zip1, que vous pourrez réimporter. Sinon, ça lance un message d’erreur (parfois pas tout à fait explicite).

Ça fonctionne, à défaut de mieux, et ça m’a sauvé un contenu en rédaction dans lequel j’avais un peu abusé de la \newcommand. Ça vaut probablement pas le temps que j’y ai passé dessus, mais c’est … Satisfaisant ;)

Et pourquoi ne pas intégrer ça au code de zds ?

Pour plein de raisons, mais principalement parce que je ne garanti pas le résultat. Je n’ai aucune idée du nombre de contenu à problème actuellement (j’ai même pas envie de parler des MPs ou des posts, ça serait du suicide), mais si l’expérience de la ZEP-12 (et actuellement celle de la génération de pdf) m’a appris une chose, c’est que la réalité est terriblement moins drôle que les malheureux tests qu’on pourrais créer (et que le débug en prod, c’est pas drôle). D’ailleurs, je préfère encore fixer les contenus au cas par cas si besoin est, faites moi signe si il faut.

C’est tout pour moi ;)


  1. vous saviez que l’interface zip de python ne permettait pas de modifier directement un fichier dans une archive, et qu’il fallait absolument en créer une nouvelle ? Moi non. Ici, c’est plutôt une bonne chose, mais ça surprend quand on essaye innocemment.

+3 -0

L’avantage de MathJax, c’est qu’on peut le remplacer par du MathML côté client – avec un navigateur qui supporte le MathML et une extension qui fait le remplacement.

Qu’en est-il avec KaTeX ?

Breizh

… Ils sont passé pas loin d’une suppression. Ici, si je suis bien, le LaTeX est rendu côté serveur (lors des publications), mais en HTML directement.

@pierre_24 pourrais-tu, vers la fin du mois, faire un rapide résumé pour le récapitulatif communautaire ? En gros, un copié collé de tout ça, sauf si ça évolue entre-temps. J’en avais commencé un, mais c’était pas facile vu que je n’ai pas trop suivi tout ça. Merci !

Rockaround

Ben en gros, c’est cette page qui indique ce qu’on peut et ne peut pas (ou plus) faire. Je vais ceci dit tenter d’écrire quelques lignes là dessus demain, du coup ;)

Notez que nous avons aussi configuré les maths pour être légendable (c’était le cas avant mais c’était caché) :

$$
E = mc^2
$$
Equation: Il est toujours important de citer Einstein pour montrer qu'on a la connaissance
E=mc2E = mc^2
Il est toujours important de citer Einstein pour montrer qu’on a la connaissance
+2 -0

Question bête: pourquoi ne pas rester à MathJax en attendant qu’une version de KaTeX sorte avec les fonctionnalités dont on a besoin ? On peut déjà commencer à changer les choses mineures qui aident la compatibilité (mettre les $$ sur une ligne à part, peut-être que aligned marche aussi en MathJax?) sans casser les contenus.

Question bête: pourquoi ne pas rester à MathJax en attendant qu’une version de KaTeX sorte avec les fonctionnalités dont on a besoin ?

Parce que MathJax n’est pas utilisable. Trop lent. Dans un gros tuto de maths, il faut plusieurs secondes pour avoir un chargement partiel, puis encore quelques-unes pour que le chargement finisse (on est alors ramené automatiquement en début de tuto). Dans ce tuto, par exemple, le chargement KaTeX est instantané, alors qu’il fallait presque une dizaine de seconde sur mon pauvre PC pour que ce soit terminé avec MathJax. Des optimisations avaient été faites, qui supprimaient la deuxième passe, si je me souviens bien, mais ça restait très long (il fallait encore plusieurs secondes, avec des ralentissements au défilement, ce qui est une horreur quand on rédige un tuto).

De mon point de vue, on est passé de quelque chose d’inutilisable à quelque chose avec des lacunes contournables.

+2 -0

Une question : on ne peut plus copier coller le code Latex des formules. Est-ce qu’il y a moyen de retrouver cette option ou non ? (puisque si je comprend bien le rendu est fait coté serveur du coup c’est peut être structurellement impossible ? ).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte