Journal flatlatex et flatlatex-gui

Posté par  . Licence CC By‑SA.
Étiquettes :
49
4
déc.
2021

Il y a quelques années, j'utilisais intensivement un petit outil que je trouvais merveilleux: latex-to-unicode. Pour faire simple, c'était un outil minimaliste, qui lançait une petite fenêtre, on lui tapait un peu de maths en LaTeX (par exemple \forall\alpha, \exists\beta, 2\beta=\alpha, et on obtenait ∀α, ∃β, 2β=α dans le presse papier. Bref, un petit outil bien pratique pour mettre un peu d'unicode, sans se rappeller de toutes les tables (il faut être inhumain pour cela).

Sauf qu'il se trouve que cet outil était buggé, il suffisait d'imbriquer un \sqrt et une \frac ou ne serait-ce qu'un \mathbb sur la même ligne qu'un \frac et ça déconnait. De plus, le parser n'était pas vraiment conforme au LaTeX (par exemple, il fallait faire un \frac{a}{2} et on ne pouvait pas se contenter d'un \frac a2 comme en LaTeX.

Quand un outil est buggé, il suffit de contribuer me direz-vous. J'ai essayé de rentrer dans le code, mais j'ai échoué. Que faire ? En faire un soi-même.

Après avoir vu plein de trucs marrants au 33C3, (et ayant jeté la première ligne sur une illumination pendant la conf), sur le trajet retour (le train c'est bien, mais long), je me suis attelé à l'écriture d'un convertisseur de maths en LaTeX vers Unicode. flatlatex était né. En quelques centaines de lignes, j'avais un outil fonctionnel pour convertir des maths simples en LaTeX vers de l'unicode:

\because\ X\sim\mathcal P(\lambda),\; \therefore\ \forall k\in\mathbb N, \mathbb P(X=k) = \lambda^kexp(-\lambda)/(k!)

qui donne ∵ X∼𝓟(λ), ∴ ∀k∈ℕ, ℙ(X=k) = λᵏexp(-λ)/(k!), ce qui n'est pas dégueulasse il faut l’admettre.

Cet outil n'était alors qu'un bout de code python, pas forcément très utilisable, mais ça marchait.

Quelques heures plus tard, un ami bien plus compétent en python que moi, (surtout à l'époque où je travaillais plus dans d'autres langages) m'aida à mettre tout en forme pour en faire un module propre, ayant sa place sur pypi.

Et donc, dans les premiers jours de 2017, un outil de conversion confidentiel (bien que public) de maths en LaTeX vers unicode était né. Seulement utilisable en tant que module python certes, mais je l'utilisais, et j'ai abandonné à cet instant latex-to-unicode.

Quelque temps plus tard (je ne me souviens plus des dates exactes), un autre ami bien plus compétent que moi en packaging (et impliqué dans debian) proposa de faire une CLI (à coup d'argparse) et de packager le module et sa CLI dans debian, ce fût chose faîte.

Et cela en resta là, pour quelques années. J'utilisais mon propre outil en CLI, et sous forme de module, et je ne suis pas certain qu'il ait servi à d'autres que moi, sans faire de bruit. J'ai corrigé quelques bugs de temps en temps, mais c'était du détail.

Il y a un peu moins d'un an, j'ai appris que flatlatex était utilisé dans un outil expérimental de génération de rendu de documentation, j'ai une oreille qui a bougé pendant ¼ de secondes, puis c'est tout.

Puis, il y a environ une semaine, je me suis rappelé tout d'un coup, à quel point latex-to-unicode était pratique, c'est qu'il avait une petite interface, et que utiliser flatlatex en CLI n'était vraiment pas pratique (car bon, il faut avouer que escaper tous les \, ça devient vite barbant). Je me suis dit que faire une petite GUI sur le même principe, ça ne devait pas être très dur.

Étant très mauvais en GUI (ce n'est que la seconde GUI que je dev en python, et la troisième GUI de ma vie en tout, pour plus d'une centaine de petits outils en CLI), sachant que je n'aime pas ça, je suis tout de même content du résultat. J'ai obtenu flatlatex-gui, que j'ai aussitôt mis sur pypi.

(Et c'est au passage que j'ai découvert que flatlatex avait une rev-dep sur PyDetex, qui est un outil similaire, mais qui ne vise pas que les maths, et qui est moins simple d'usage que la petite GUI.

En tout, j'aurai donc mis 5 ans à faire un outil qui remplaçait l'outil précédent que j'utilisais. J'ai atteint mon but, et en faire un petit journal sur dlfp m'a paru une bonne idée.

Aller, quelques petits trucs en unicode pour la route:
- ℙ( μ∈[X̅±1.96σ] ) = 1-α, car Φ⁻¹(1-ᵅ⁄₂)=1.96
- 𝕆𝕟 𝕡𝕖𝕦𝕥 𝐮𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝑑𝑒𝑠 𝑐𝑎𝑟𝑎𝑐𝑡𝑒𝑟𝑒𝑠 𝓭𝓮𝓯𝓲𝓷𝓲𝓼 𝓭𝓪𝓷𝓼 𝔩𝔢 𝔰𝔱𝔞𝔫𝔡𝔞𝔯𝔡 𝔘𝔫𝔦𝔠𝔬𝔡𝔢

  • # Coquilles

    Posté par  . Évalué à 3.

    J'ouvre le fil des coquilles: on écrit "compétent". Si on tient au 'a', ça peut le faire, mais alors c'est en deux mots : un con pétant ! Et ça change un peu le sens…

  • # Merci pour le soft

    Posté par  . Évalué à 5. Dernière modification le 06 décembre 2021 à 05:48.

    J'utilise un fichier texte dans lequel j'ai copié tous les caractères unicode qui m'intéresse. Ton logiciel va donc me faciliter la vie et je t'assure que je vais l'utiliser au moins une fois par semaine jusqu'à la fin de ma thèse. =)

    • [^] # Re: Merci pour le soft

      Posté par  . Évalué à 4.

      C'est avec un grand plaisir que je lis cela.

      Quand j'étais moi-même thésard, j'avais certaines pages unicode imprimés, et c'est à cette occasion que j'ai commencé à jouer avec latex-to-unicode, avant de coder mon propre outil. Je comprends bien le besoin.

      Si jamais tu as des symboles qui sont en LaTeX (ou dans des packages classiques type ams*), et qui ne sont pas dans flatlatex, n'hésite pas à ouvrir une issue ou une petite PR.

      • [^] # Re: Merci pour le soft

        Posté par  . Évalué à 3. Dernière modification le 07 décembre 2021 à 08:41.

        Beau boulot, et en plus, c’est dans Debian. Je viens de l’installer, on verra si je me mets à l’utiliser. Pour le moment, j‘utilise fcitx-table-latex pour saisir des caractères mathématiques directement (et j’avais fait mon tout premier journal de mon expérience, moins bonne, avec ibus). Ces approches sont pratiques (pas besoin d’interrompre la frappe) mais beaucoup moins complètes que ce que tu proposes. Je suis donc assez certain de faire usage de ton outil, merci donc pour la découverte et pour ce développement !

        • [^] # Re: Merci pour le soft

          Posté par  . Évalué à 3. Dernière modification le 07 décembre 2021 à 14:46.

          À noter que dans debian, il y a seulement la CLI et le module. La GUI n'est pas dans debian (du moins pour le moment). De plus la version dans debian ne supporte pas l'avancé majeure introduite la semaine dernière : le fait de conserver les espaces non délimitants. LaTeX ne les conserve pas, et flatlatex non plus (mais avec une option, il peut).

          Par exemple, si l'écris [(\forall i\in\mathbb N, v_i\leq u_i\leq w_i) \wedge (v\rightarrow l) \wedge (w\rightarrow l)] \Rightarrow [u\rightarrow l],

          • sans conservation des espaces: [(∀i∈ℕ,vᵢ≤uᵢ≤wᵢ)∧(v→l)∧(w→l)]⇒[u→l]
          • avec conservation des espaces: [(∀i∈ℕ, vᵢ≤uᵢ≤wᵢ) ∧ (v→l) ∧ (w→l)] ⇒ [u→l]

          Pour avoir le moins d'interruptions de frappes possibles, en fait chez moi, flatlatex-gui est un raccourci de mon windows manager, et c'est assez naturel comme cela. Ça l’interrompt un peu il est vrai, mais pas trop.

    • [^] # Re: Merci pour le soft

      Posté par  . Évalué à 3. Dernière modification le 12 décembre 2021 à 02:21.

      Essaye ça :

      $ cat unicode-chars
      ∀ forall math
      ∃ exists math
      α alpha greek
      β beta greek
      
      
      $ cat unicode-chars | rofi -dmenu -p "Select character" -i | cut -d ' ' -f 1
      ...

      Dans rofi tu peux restreindre la recherche en tapant "greek" pour n'avoir que les lettres grecques affichées, ou "math" pour n'avoir que ce qui t'intéresse quand tu tapes des maths.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.