Mise à niveau vers le nouveau plugin Math

J’ai toujours l’ancien plugin « Discourse Mathjax » installé. Quelqu’un a-t-il réussi à convertir ses publications pour qu’elles s’affichent correctement avec le nouveau plugin ? Pourriez-vous poster une commande fonctionnelle ?

Les deux plugins ne sont pas 100 % compatibles, car certains contenus seront cassés si j’active simplement le nouveau.

Par exemple, le nouveau plugin nécessite un double $$ avant et après les blocs \\begin{...}...\\end{...}, par exemple \\begin{align}...\\end{align} (sans double $$) est rendu comme des mathématiques avec l’ancien plugin mais pas avec le nouveau.

Pour convertir ceux-ci, je scraperais tout le contenu et ferais une recherche-remplacement par expression régulière pour ajouter/supprimer le double $$ avant/après \\begin{..}/\\end{..} (mais les blocs imbriqués poseraient problème). Il peut y avoir d’autres cas où le contenu apparaîtra cassé que je n’ai pas encore repérés (c’est un forum de 5 ans avec beaucoup de mathématiques).

1 « J'aime »

Eh bien, j’ai passé plus de temps que je ne voudrais l’admettre à convertir et à corriger du contenu cassé après la mise à niveau vers le nouveau plugin mathématique, alors je publie ici les commandes importantes que j’ai utilisées (excusez le hackage moche, j’étais trop paresseux). Une correction manuelle du contenu était toujours nécessaire, mais pas tant que ça dans notre cas.

NOTE : Ceci est à titre d’inspiration. Rappelez-vous le poème « Je n’assume aucune responsabilité… ». N’exécutez pas cela aveuglément si vous ne le comprenez pas.

# remplace \\\\ par \\ (ce qui traduit aussi \\\\\\\\ par \\\\)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";

# remplace {align} par {aligned} et supprime toutes les versions étoilées
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{align.*?\\}/, "\\\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";

# remplace {array} par {matrix} et supprime toutes les versions étoilées
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{array\\*?\\}/, "\\\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";

# remplace `\\begin{equation}` par `$$`
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\s*\\\\(begin|end)\\{equation\\*?\\}\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";

# ajoute des sauts de ligne avant et après `$$`
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";

# ajoute `$$` avant et après les blocs `{aligned}`
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/\s*(\\\\begin\\{align})/m,"\\n$$\\n\\\\1").gsub(/(\\\\end\\{align.*?\\})\s*/m,"\\\\1\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";

# ... corrige les doubles `$$` dans `{aligned}`
Post.where('raw ~ ?', "\\\\begin\\{aligned").each{|p| p.raw=p.raw.gsub(/(\\\\end\\{align.*?\\}\\n\\$\\$)\\n\\$\\$/,"\\\\1").gsub(/\\$\\$\\n(\\$\\$\\n\\\\begin\\{align)/,"\\\\1"); p.save; print "."; $stdout.flush;}; puts "";

## applique les deux commandes ci-dessus à d'autres environnements que vous pourriez avoir en plus de {aligned}

# CORRECTION MANUELLE RECOMMANDÉE POUR CE QUI SUIT :
# Posts où `$$` apparaissent dans un environnement cité `> ` . Seuls les `$$` d'ouverture et
# de fermeture doivent être précédés, c'est-à-dire `> $$`, le contenu entre les deux ne doit pas
# l'être, sinon il est rendu comme des signes mathématiques supérieur à.
# Exécutez ceci pour identifier les posts :
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};

# ... OU, exécutez ceci pour tenter une correction automatisée, bien que risquée
# (a bien fonctionné pour nous, quelques posts ont nécessité des travaux manuels supplémentaires) :
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| p.raw=p.raw.gsub(/(\u003e\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1\u003e $$\\2\u003e $$\n\u003e"); p.save; print "."; $stdout.flush;}; puts "";

# Cosmétique, facultatif : remplace 3+ sauts de ligne consécutifs par 2 sauts de ligne
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";

# Facultatif : remplace 2+ sauts de ligne consécutifs avant et après `$$`
# par un seul saut de ligne
# ATTENTION : cela fonctionne dans la version actuelle du plugin, mais cela peut s'afficher
# différemment dans une future version (?). Par exemple, en Latex réel, une ligne vide
# après $$ avant le texte fait une différence dans l'espacement vertical.
Post.where('raw ~ ?', "\\n\\$\\$\\n{2,}|\\n{2,}\\$\\$").each{|p| p.raw=p.raw.gsub(/\n\$\$\n{2,}/,"\\n$$\\n").gsub(/\n{2,}\$\$/,"\\n$$"); p.save; print "."; $stdout.flush;}; puts "";
2 « J'aime »

@sam puisque ce plugin est maintenant officiel, pourrions-nous s’il vous plaît faire fonctionner correctement la fonctionnalité « Citation » ? Lorsque vous sélectionnez du texte avec des mathématiques, puis que vous utilisez le bouton « Citation », j’obtiens actuellement toutes les mathématiques dépouillées et doublées. Le code JavaScript pour la fonctionnalité « Citation » pourrait reconnaître les balises HTML de mathématiques et ajouter les $ et/ou $$ nécessaires dans la boîte d’édition, au lieu de les dépouiller et de doubler la chaîne de mathématiques.

De plus, je pense qu’il serait bien d’inclure une version plus récente de Katex dans le plugin. Celle incluse a plus de 2 ans (0.11) alors que la version stable de Katex est la 0.15.2, qui est plus riche et a corrigé de nombreux bugs. Je suis conscient du readme mais peu de gens s’en soucieront.

Mathjax 3.x serait également bien (beaucoup plus rapide que 2.7)

EDIT : Il existe une mise à niveau beaucoup plus facile de Katex inclus qui ne nécessite pas de construire Katex à partir des sources. Il suffit de récupérer l’archive tar, de copier les fichiers, de remplacer le dossier de polices dans le CSS.

wget -O- https://github.com/KaTeX/KaTeX/releases/latest/download/katex.tar.gz | tar -zx
cp katex/fonts/*.woff* /chemin/vers/discourse/plugins/discourse-math/public/katex/fonts/
cp katex/katex.min.* katex/contrib/mhchem.min.js /chemin/vers/discourse/plugins/discourse-math/public/katex/
sed -i "s~url(fonts/~url(/plugins/discourse-math/katex/fonts/~g" /chemin/vers/discourse/plugins/discourse-math/public/katex/katex.min.css
5 « J'aime »

Tout cela semble formidable, auriez-vous une chance de soumettre des PR pour cela ?

3 « J'aime »

Créé une PR pour la mise à jour de KaTeX et l’ai également mise à jour vers la dernière version. N’utilisant pas MathJax moi-même, je ne m’en suis pas encore occupé. En fin de compte, Discourse pourrait vouloir autoriser la liaison à un CDN pour ceux-ci (permettre à l’utilisateur de spécifier l’URL afin qu’il puisse corriger une version de publication s’il le souhaite ; par défaut à l’hôte actuel) même si cela va un peu à l’encontre de l’éthos de Discourse, car ces bibliothèques sont mises à jour très souvent avec des corrections et autres.

Malheureusement, pas le temps pour une PR pour la correction de la fonctionnalité “Quote” – trop débordé de travail ces jours-ci, c’est pourquoi j’ai laissé un message en espérant que quelqu’un d’autre puisse s’en occuper.

4 « J'aime »

Merci beaucoup pour la PR @nordize, je l’ai fusionnée !

5 « J'aime »

Je me souviens que ce fil contenait beaucoup de messages et de discussions - que s’est-il passé ?

Je suis venu ajouter quelques notes à ma dernière contribution que j’ai faite plus tôt cette année, ainsi qu’une amélioration pour permettre aux macros de persister entre les expressions mathématiques avec Katex (voir ici). Suis-je dans le mauvais fil ?

Les publications de ce sujet sont sur une minuterie automatique pour les effacer, mais je peux en déterrer si vous souhaitez les déplacer vers un sujet de style Trucs et astuces ?

Pourquoi donc?!? Ce plugin est important et l’un des plus populaires. La discussion dans ce sujet contenait de nombreux messages intéressants. J’ai écrit au moins un guide dans un message et j’ai eu confiance qu’il serait là pour y faire référence. Mes collègues et moi-même avions même mis en favoris certains messages… et maintenant tout a disparu ?

C’est une décision très étrange. L’un des objectifs de Discourse n’était-il pas de pouvoir gérer de longs sujets (chargement adaptatif et tout le reste, etc.) ? “les effacer”… nous ne manquons certainement pas d’espace ! À notre époque, la postérité de l’information est plus importante. Je ne comprends pas vraiment de telles décisions car nous ne sommes plus en 1990, et cela dit essentiellement que la responsabilité incombe toujours à l’individu de sauvegarder les informations et de se démener pour les partager à partir de sources locales, car elles peuvent disparaître à tout moment de l’endroit où elles ont été publiées en ligne, ce qui encourage le gaspillage, les tracas, l’attention et l’organisation inutiles, et diminue la confiance et la fiabilité. Aider les utilisateurs de la communauté devient également inefficace et problématique si les informations sont effacées après 1 mois. Cela va à l’encontre de plusieurs objectifs. Nous étions censés aller dans la direction opposée.

Ce n’est pas une question de vie ou de mort, évidemment, je ne veux pas exagérer, mais quand même… Pourriez-vous le ramener en intégralité et peut-être reconsidérer cette politique d’un mois pour l’avenir ?

Quoi qu’il en soit, @sam - j’ai fait cette PR : katex: enable persistent macros by qnxor · Pull Request #51 · discourse/discourse-math · GitHub que j’encourage à fusionner car Mathjax a cela par défaut, donc les personnes qui passent de Mathjax à Katex auraient un contenu cassé. Il en va de même pour les personnes qui mettent à niveau à partir de l’ancien plugin.

1 « J'aime »

Pourquoi donc?!? Ce plugin est important et l’un des plus populaires. La discussion dans ce sujet contenait de nombreux messages intéressants. J’ai écrit au moins un guide dans un message et j’ai fait confiance au fait qu’il serait là pour y faire référence. Mes collègues et moi-même avons même mis en signet certains des messages… et maintenant tout a disparu ?
[/quote]

J’aurais peut-être pu le dire plus délicatement. :slightly_smiling_face:

J’espère (si tout va bien :crossed_fingers:) que toute information utile/discussion intéressante aura été déplacée dans le message initial ou divisée en un nouveau sujet. Il est possible que cela n’arrive pas toujours, mais je serais heureux de jeter un œil et de vérifier. :+1:

2 « J'aime »

Bien sûr, pas assez de café peut-être… mais c’est formidable de découvrir que ce dans quoi on investit du temps (pour le bien d’une communauté) est jeté à la poubelle. Je suppose que j’aurais dû sauvegarder le guide et les scripts que j’ai écrits pour la mise à niveau de l’ancien plugin, ainsi que les autres messages qui m’intéressaient, puis espérer que les gens me demandent de l’aide par e-mail. Qui aurait cru que les publier sur le forum communautaire serait l’option la plus risquée. Oui, pas assez de café…

Aucune de ces choses ne s’est produite ici, à ma connaissance.

Ramener le sujet serait trop… ? Pas assez de café, c’est sûr ! :slight_smile:

1 « J'aime »

Je pense que j’ai bien tout pris ? Je les ai déplacés de la zone de minuterie automatique vers Support, donc ils devraient être en sécurité contre toute suppression. :+1: Des ajustements ou des changements que vous souhaitez que je fasse ?