Partage
  • Partager sur Facebook
  • Partager sur Twitter

Éditeur markdown pour les sciences

31 août 2020 à 12:58:27

Salut :)

Ça fait un petite moment (_quelques années :-° _) que je ne viens plus régulièrement sur OpenClassroom

Je reviens avec la présentation d'un projet que je réalise en parallèle de mes études (je redouble une PACES cette année).

J'ai crée cet éditeur pour coller à mon besoin (écrire/éditer rapidement mes cours de fac), tout simplement :D ! S'il peut être utile à d'autres, tant mieux :)

Génèse

Au premier semestre de l'année dernière, j'ai passé beaucoup (beaucoup beaucoup) d'heures dans Libre Office à remettre en forme et à éditer des cours que j'avais d'étudiants d'années supérieures, parce que je suis incapable de les comprendre si les phrases ne sont pas parfaitement claires et la présentation consistante.

À partir de ce constat, aux vacances de noël j'ai entrepris de coder un convertisseur de fichier .odt vers markdown pour convertir les cours que j'avais d'étudiants d'années supérieures au format odt en markdown, qui me semblait plus pratique/rapide à modifier. LaTeX ne me convenait pas car trop long/complexe à rédiger, ça ne m'aurait pas fait gagner de temps.

Il me fallait mettre des formules de maths, la syntaxe des maths de libre office me plaisait bien de par sa simplicité à rédiger. Aucun éditeur markdown à ma connaissance ne permettais d'utiliser cette syntaxe. Je me suis résolu à créer un éditeur (avec prévisualisation intégrée). Étant habitué à utiliser Neovim pour écrire du code, j'ai décidé que j'allais l'utiliser comme éditeur.

Le cahier des charges étant grossièrement esquissé, je me suis lancé dans le code. Vu le peu de temps que j'avais (~10j avant le début du 2ème semestre, il fallait que ça soit opérationnel avant) j'ai fait ce que j'ai pu pour que ça marche. C'était du freestyle, c'était sale, c'était à la demi-journée près, mais ça fonctionnais à la rentrée de janvier :pirate:

La base de code étant dégueu et mal organisée, j'ai amélioré tout ça pendant les vacances d'été. On rédige maintenant dans l'éditeur comme sur Zeste de savoir, avec quelques petits trucs en plus :)

Voici une capture d'écran de l'éditeur (il n'a rien de foufou visuellement), vous pouvez cliquer dessus pour l'agrandir : capture d'écran

Résumé des fonctionnalités

  • Toutes les fonctions supportées par zmarkdown, comme les balises de code, les images, ...
  • Support des formules de maths avec la syntaxe asciiMath avec $$ et $ comme délimiteurs
  • Dessin rapide de molécules avec la syntaxe SMILES avec €€ et comme délimiteurs
  • Syntaxe de tableau simple et efficace
  • Neovim comme éditeur, fait gagner beaucoup de temps
  • Double click sur une image pour la modifier dans Gimp
  • export HTML & PDF

Testez le :) !

N'hésitez pas si vous avez un soucis pour l'installer ou pour l'utiliser, je ferais de mon mieux pour essayer de vous aider :)

Installation

L'éditeur requière Nodejs 14, Neovim, et d'autres dépendances notamment pour faire fonctionner node-gtk

  • Pour installer tout ça sur Debian/Ubuntu :
sudo apt install curl -y
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt-get install -y nodejs
sudo apt-get install build-essential git gobject-introspection libgirepository1.0-dev libcairo2 libcairo2-dev -y
sudo apt-get install libwebkit2gtk-4.0 -y
sudo npm install -g markdown-math-editor
  • sur d'autres platformes

    jetez notammen un oeil à node-gtk install

    Pour le moment, cela peut ne pas bien fonctionner sur d'autres platformes que Debian/linux, notamment à cause des dépendances. C'est au programme de se séparer des dépendances les plus restrictives.

Usage

Exécutez simplement :

markdown-math-editor file.md

Vous pouvez configurer votre gestionnaire de bureau pour ouvrir tous les fichier .md avec cet éditeur :)

Je vous conseille également de tester le convertisseur de fichier .odt vers markdown , il est complémentaire à l'utilisation de l'éditeur si comme moi vos sources sont des odt (ou des fichiers word que vous convertissez en odt avec libreoffice) :)

Côté technique

Pour le côté technique, vu le peu de temps que j'avais (~10j avant le début du 2ème semestre, il fallait que ça soit opérationnel avant) j'ai fait avec ce que je connaissais : Node.js.

J'ai utilisé node-gtk (avec son lot de bugs obscurs ralentissant/complexifiant le développement) pour créer une fenêtre qui intègre un terminal virtuel (à gauche) pour Neovim et un moteur de rendu (WebKitGTK, à droite) pour le rendu. Ce n'était pas prévu au départ, mais ça devient un genre d'electron-like :-° .

Pour la conversion markdown -> html je vais bidouiller (salement) et utiliser remarkJS/UnifiedJS dont j'avais entendu parler. J'utiliserais notamment remark-grid-table issus de zmarkdown le convertisseur utilisé par Zeste de savoir :D !

Le code était dégueu, au début de l'été j'ai tout repris.

J'ai finis par intégrer zmarkdown et le customiser pour remplacer la syntaxe de math de LateX, par la syntaxe AsciiMath. Ça m'as permis de pas mal nettoyer le code :) ! J'y ai ajouté quelques customisations :

  • la possibilité de dessiner rapidement des molécules avec la syntaxe SMILES avec €€ et comme délimiteurs
  • Une syntaxe supplémentaire de tableau que je trouve plus simple et plus efficace la plupart du temps
  • la possibilité de définir la largeur des images (en % ou en px) en ajoutant =50% après l'url de l'image :

    ![alt](img.png) => ![alt](img.png =40%)

On rédige donc dans l'éditeur comme sur Zeste de savoir, avec quelques petits trucs en plus :)

Voici un shéma qui explique le fonctionnement actuel du programme : stack technique

Vous pouvez trouver le code source ici

Future du projet

L'éditeur va évidemment continuer à évoluer, en fonction de mes besoins notamment, comme je l'utilise une bonne dizaine d'heures par jour :)

Pour le moment, j'aimerais :

  • Permettre l'utilisation d'autres éditeurs que Neovim, qui peut être déroutant pour les ceux qui ne l'ont jamais utilisé
  • Virer GTK des dépendances (je n'ai pas encore d'idée de comment)
  • Cloisonner la partie qui réalise la conversion du markdown en html dans un package différent de l'éditeur en lui même, pour faciliter sa réutilisation
  • Permettre d'ouvrir directement les fichier odt (= les convertir en markdown à l'ouverture grâce au convertisseur odt vers markdown)

    J'ai présenté brièvement le convertisseur convertisseur de fichier .odt vers markdown , il est également amené à évoluer aussi :)

Des questions ? Un petit commentaire ? Des idées ? N'hésitez pas, je sors du repas donc je ne mords pas :D !

-
Edité par Drulac 31 août 2020 à 15:35:18

  • Partager sur Facebook
  • Partager sur Twitter

https://github.com/Drulac/markdown-math-editor

6 septembre 2020 à 22:54:24

Coucou :D !

Comme il avait été prévu et suggéré, le moteur de rendu est maintenant totalement indépendant de l'éditeur et de l'affichage :) !

Il a du coup son propre package, ce qui permet de le ré-utiliser plus facilement dans d'autres projets !

Cela va également permettre la mise en place de tests unitaires dans le futur ^^

J'en ai profité pour ajouter 2 micro-fonctions (plutôt remettre des fonctions que je n'avais pas recodé depuis le passage à zmarkdown :-°) :

  • ![]() qui permet de d'aller après une image

    Si vous avec une image qui fait 50% de large, et un paragraphe qui suit, le paragraphe va être à droite de l'image. Si vous ne voulez pas ça, en insérant ![]() avant le paragraphe, celui-ci descendra sous l'image

  • <------------> (avec au moins 5 -) affiche une ligne pointillée dans le rendu, et permet d'indiquer où couper à l'impression (pour l'export pdf)

    En fait ça ne coupe pas pour le moment.... :euh: mais je n'ai pas le temps d'investiguer ce soir, donc pour le moment ça fait uniquement une ligne pointillée ;)

Du coup ça modifie (légèrement) le shéma de la stack technique :

stack technique v1.0.1

-
Edité par Drulac 6 septembre 2020 à 22:56:00

  • Partager sur Facebook
  • Partager sur Twitter

https://github.com/Drulac/markdown-math-editor

14 septembre 2020 à 17:18:42

Tu devrais faire une page de démo pour qu'on puisse rapidement se faire une idée. Là je t'avoue que j'ai même pas eu le courage d'ouvrir mon invite de commandes :p
  • Partager sur Facebook
  • Partager sur Twitter