zestedesavoir / zds-site

Cœur du projet technique de Zeste de Savoir
https://zestedesavoir.com
Other
268 stars 161 forks source link

[Markdown] Symbole $ systématiquement considéré comme une balise math #80

Closed cgabard closed 10 years ago

cgabard commented 10 years ago

Si il ne semble y avoir aucune balises $ fermantes, éviter de tout considérer comme une balise math

Coy0te commented 10 years ago

Quelques infos si besoin :

Exemple : http://zestedesavoir.com/forums/sujet/7/rediger-sur-zds?page=1#p54

Pour commencer, limiter l'analyse à la ligne courante, au lieu d'aller chercher des trucs sur les lignes suivantes, ça sera déjà pas mal. De toute manière, sauf erreur de ma part, une balise math ne s'étend pas sur plusieurs lignes.

cgabard commented 10 years ago

Les grands esprits se rencontrent, j'allais te demander des précisions.

Donc effectivement, deux $ vont entrainer l'apparition d'une balise math si ils sont dans le même bloc. Et donc effectivement il faut bien 2 sauts de lignes consécutifs, un changement de paragraphe, pour résoudre ça.

De là plusieurs possibilités :

La première solution reste le fonctionnement de Latex et donc le plus logique (ce qui ne m'empeche pas d'ajouter les legendes pour l'autre syntaxe).

edit: Si une equation sur plusieurs lignes est pratique. Pour les matrices par ex. Mais ce ne devrait pas être inline pour le coup.

Coy0te commented 10 years ago

Pour le coup, je ne connaissais pas la syntaxe avec deux $$. Je n'ai pas encore vérifié dans les tutos SdZ si y'avait des formules multi-lignes ou pas.

cgabard commented 10 years ago

En fait actuellement c'est comme en latex : les equation avec un seul symbole de chaque coté sont insérées tel quel. Celles avec les deux doivent normalement les centrés si je me fit aux tests de Shigerum

cgabard commented 10 years ago

Le gros prob est que mathjax cherche à parser les expressions avec des $ n'importe ou dans le texte. Qu'elles soit dans dans des balises dédié ou non.

J'ai fait une grosse parade en dédectant ces cas et cradossant le html pour pas que ça soit détécté par mathjax.

A voir à l'usage donc :) a venir dans la prochaine PR

cgabard commented 10 years ago

Il me semble que c'est en prod, je ferme :)

Coy0te commented 10 years ago

Je me permets de ré-ouvrir, juste pour vérifier si vous considérez le comportement observé ici comme un bug ou pas.

Apparemment, il est nécessaire d'écrire \$ quand on veut écrire deux symboles dollars sur une même ligne sans qu'il déclenche mathjax. Je sais que sur ZdS, on ne va pas parler de dollars tous les 4 matins, mais bon... c'est pas intuitif de devoir échapper ce caractère. D'autant que si on écrit les deux symboles sur deux lignes différentes, ça marche bien. C'est un exemple de problème qui ne se poserait pas si on adoptait la syntaxe avec double dollar pour les formules de math.

cgabard commented 10 years ago

Actuellement les deux sont autorisés pour suivre le fonctionnement de latex : avec simple c'est inline, avec double c'est un flottant.

A partir de là je n'ai pas moyen de détecter que entre les deux dollar de la même ligne c'est effectivement une equation. D'autant plus que au niveau markdown, je ne fais juste qu'empecher markdown de parser le contenu entre les deux. C'est le script JS (mathjax) qui va le parser et le transformer. Meme si en markdown je ne match pas celles entre de simples $, mathjax le fera.

De là plusieurs solutions :

firm1 commented 10 years ago

On empêche mathjax de se déclencher sur les simples $ (facile a faire, c'est dans les options qu'on a rajouté).

Cette solution a l'inconvénient de complexifier la reprise des .tuto. Beaucoup de personne on surement utilisé la syntaxe avec un $.

Vous me trouvez un moyen de détecter si le contenu entre les deux est effectivement des maths ou pas. Dans ce cas je peux automatiquement rajouter l'échapement avant ce qui va bloquer mathjax.

ça serait un peu lourd quand même.

Je pense plutôt a une syntaxe qui se base sur ce qu'il y'a autour du symbole. Par exemple, la règle suivante : si le caractère à gauche et le caractère à droite du dollars est dans le set suivants (espace, point, point d'exclamation, point d'interrogation) alors il faut empêcher mathjax de se déclencher Ne pourrait pas résoudre le problème ?

cgabard commented 10 years ago

Cette solution a l'inconvénient de complexifier la reprise des .tuto. Beaucoup de personne on surement utilisé la syntaxe avec un $.

Dans le zcode il y avait une balise math dédié il me semble.

Je pense plutôt a une syntaxe qui se base sur ce qu'il y'a autour du symbole. Par exemple, la règle suivante : si le caractère à gauche et le caractère à droite du dollars est dans le set suivants (espace, point, point d'exclamation, point d'interrogation) alors il faut empêcher mathjax de se déclencher Ne pourrait pas résoudre le problème ?

Non j'aime pas ça. Personne va comprendre pourquoi il se déclenche ou pas. Il faut que le comportement soit clair et simple. Si mathjax doit se déclencher quand on met des $, les membres feront avec et l'echaperont. Si il ne se déclenche pas, tant mieux. mais faut que ce soit simple.

Une autre solution consiste à trouver une autre syntaxe que le $ pour les inline car on considère que c'est trop courant (C'est la raison pour laquelle, d'ailleurs, mathjax ne le catch pas par defaut)

cgabard commented 10 years ago

Pandoc fait un truc dans le genre de ce que propose @firm1, en plus simple :

Anything between two $ characters will be treated as TeX math. The opening $ must have a character immediately to its right, while the closing $ must have a character immediately to its left. Thus, $20,000 and $30,000 won’t parse as math. If for some reason you need to enclose text in literal $ characters, backslash-escape them and they won’t be treated as math delimiters.

Le prob est que ça s'adapte bien à l'utilisation américaine du dollard, pas forcément au français.

Coy0te commented 10 years ago

Le zCode utilise bien une balise XML pour les maths (comme pour tout en fait).

Utiliser autre chose que le $ serait peut-être judicieux, mais à moins d'aller chercher un truc à coucher dehors genre §, on se retrouvera toujours avec le même problème. La solution serait peut-être de simplement doubler le $, et de gérer automatiquement la présence inline ou seule de la formule dans un paragraphe.

Après on peut aussi considérer d'une part que l'utilisation française du symbole dollar est marginale, et d'autre part que :

cgabard commented 10 years ago

Donc on resterait ainsi ?

cgabard commented 10 years ago

En soit moi ça ne me choque pas. Les membres vont déjà devoir échapper les asterisques ou les underscore par ex dans bon nombre de situations. Qu'ils le fassent pour les dollards ne me semble pas catastrophique.

Coy0te commented 10 years ago

J'ai édité entre temps, je demandais si le doublage du dollar était pas envisageable ? Si non, effectivement y'a pas mort d'homme ici.

cgabard commented 10 years ago

En fait le truc est que mathjax ne traite pas pareil les inline que non-inline pour le rendu. Et je ne vois rien dans la doc qui permet de penser qu'il puisse le detecter seule : il semble etre basé sur les délimiteurs utilisées pour les discerner.

Donc mettre des doubles $ pour le inline suppose que quelqu'un aille s'occuper du code de matjax. Ce que je ne me sent pas apte, pas le temps et pas les compétences en JS.

Car là c'est un double prob : en markdown je dois connaitre les délimiteurs pour empecher toute interprétation à l'intérieur. Mais il faut aussi que les délimiteurs soient données à mathjax pour qu'il les trouve et transforme.

Coy0te commented 10 years ago

Ok, on laisse tel quel alors, si personne n'a d'objection.

(Dernière question : pas moyen d'utiliser $$ et $$$, au lieu de $ et $$, sans devoir plonger dans le JS de mahtjax ?)

cgabard commented 10 years ago

Il reste la solution d'un autre délimiteur, mais on casse la compatibilité avec pandoc pour le coup

cgabard commented 10 years ago

(Dernière question : pas moyen d'utiliser $$ et $$$, au lieu de $ et $$, sans devoir plonger dans le JS de mahtjax ?)

Changer les délimiteurs, même dans mathjax est simple. Et c'est bien la seule chose que je peux/veux faire dessus.

Donc oui on peut changer ça, simplement tant que les delimiteurs restent différent.

Mais du coup on a plus ni la compatibilité pandoc, ni le même fonctionnement que Latex.

Apres moi je m'en fout. Faudrait d'autres avis.

cgabard commented 10 years ago

Du coup on en fait quoi ?

Coy0te commented 10 years ago

Je ne pourrai pas modifier le parseur zCode avant ce week-end, prenez votre temps... :-*

cgabard commented 10 years ago

Pas de news ? On garde ça donc ?

Coy0te commented 10 years ago

On garde tel quel, et on rajoute dans la notice du ZdS-markdown qu'il faut échapper les $ quand c'est ni une ouverture de balise math, ni contenu dans un bloc de code.

Du coup, que reste-t-il à finaliser au niveau de la syntaxe markdown ? Si on est prêt à figer la version, je peux attaquer la conversion de tous les tutos en zCode et on pourra décider du moyen d'import souhaité (massif par un admin, unitaire par chaque auteur, etc.).

Le plus tôt le contenu est prêt, le moins de temps on perdra. On pourrait même prendre de l'avance avant la sortie de ZdS, si certains d'entre nous prennent du temps pour relire/survoler tranquillement les tutos importés, et corriger les petits défauts de syntaxe restant ça et là.

cgabard commented 10 years ago

Je crois qu'il ne reste que des bugs a corriger (mais j'arrive plus a faire tourner d'instance locale de zds depuis hier) en fait mais niveau syntaxe je crois que je n'ai plus rien dans ma todo list.

En attendant, je ferme ce sujet du coup