Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Fletcher, l'outil de dessin de schémas de Typst

Première rédaction de cet article le 1 décembre 2025


Vous le savez, j'ai expérimenté récemment l'outil de formatage de textes Typst. Un de ses intérêts est de disposer d'un langage pour réaliser des schémas, nommé Fletcher. Voici quelques points intéressants de Fletcher.

Fletcher est sur le même créneau que des systèmes comme Asymptote (que j'utilise jusqu'à présent), Graphviz ou TikZ : un langage pour décrire les schémas techniques, qui évite de passer du temps avec la souris en essayant de placer ses éléments de schémas au bon endroit. Fletcher est écrit avec le langage de programmation de Typst, et s'appuie sur le système CeTZ.

Sans plus tarder, un exemple de code en Fletcher :

#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge

#diagram(
  {
    node([Un], stroke: 1pt)
    node((rel: (1, 1)), [Deux], stroke: 1pt)
    node((rel: (-1, 1)), [Trois], stroke: 1pt)
    edge(auto, auto, [Par ici], "->")
  }
)
  

Compilé avec typst compile --format png simple-fletcher-1.typ, il donne : simple-fletcher-1.png

Voyons les détails :

  • Il faut importer le paquetage Fletcher (il sera téléchargé la première fois qu'on compile).
  • On dessine trois boites ; par défaut, la bordure est de taille nulle donc on demande une bordure d'un point.
  • La première boite est, par défaut, placée à l'origine des coordonnées, les deux suivantes sont placées relativement à la boite précédente (l'axe des X va vers la droite, celui des Y vers le bas, ce qui est un peu déconcertant mais c'est documenté).
  • On termine avec une flèche, sans s'embêter à indiquer où elle s'accroche donc elle est mise sur le dernier élément dessiné. Notez la façon d'indiquer la forme de la flèche, avec un exemple sous forme d'une chaine de caractères.

Maintenant, si on veut davantage de contrôle sur le placement, on va donner des noms aux objets (et puis on met des valeurs par défaut pour les boites) :


#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge

#diagram(
 // Valeurs par défaut pour les nœuds
 node-stroke: 2pt,
 node-shape: fletcher.shapes.house,
 {
    node([Un], name: <un>)
    node((rel: (1, 1)), [Deux], name: <deux>)
    node((rel: (-1, 1), to: <un>), [Trois], name: <trois>)
    node((rel: (3, 4), to: <deux>), [Quatre], name: <quatre>) 
    edge(<un>, <deux>, [Par ici], "->")
  }
  )

  

Et cela donne : simple-fletcher-2.png

Vous noterez, dans le deuxième essai :

  • La boite Trois est désormais relative à la boite Un, pas à la dernière boite placée.
  • L'image s'agrandit automatiquement (regardez la boite Quatre, qui est placée assez loin).
  • La flèche est explicitement accrochée à deux des boites, et placée automatiquement au bon endroit.

Pour un exemple plus réaliste, je vous ai mis un schéma de la résolution DNS et un autre de l'arborescence des noms de domaine, avec le PDF (ce que produit Typst par défaut) et le source : fletcher-resolution-dns.pdf, fletcher-resolution-dns.typ, fletcher-arbre-domaines.pdf et fletcher-arbre-domaines.typ. La combinaison de coordonnées relatives, et de flèches qu'on accroche à des boites, sans se préoccuper de donner des coordonnées, est très agréable.

Voilà, bien sûr, Fletcher est beaucoup plus riche que cela et vous pouvez faire bien d'autres choses, n'hésitez pas à lire la très complète documentation.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)