3 points par GN⁺ 2024-07-21 | 2 commentaires | Partager sur WhatsApp
  • Typst est un système de composition basé sur du markup qui vise la puissance de LaTeX tout en étant plus facile à apprendre et à utiliser ; ce dépôt contient le compilateur et la CLI nécessaires pour compiler des documents en local
  • Il propose un markup intégré pour les tâches de mise en forme courantes, des fonctions flexibles, un système de scripting intégré, la composition de formules, la gestion des bibliographies et des messages d’erreur clairs
  • Grâce à la compilation incrémentale, il vise des temps de compilation rapides ; typst watch surveille les modifications du source et recompile plus vite qu’une compilation depuis zéro à chaque fois
  • La CLI peut être installée via des binaires de release, des gestionnaires de paquets, cargo, Nix ou Docker ; typst compile file.typ génère un PDF et il est possible de spécifier des chemins de polices personnalisés
  • Ses principes de conception sont la simplicité par la cohérence, la puissance par la composabilité et la performance par l’incrémentalité, avec pour objectif une vitesse permettant l’aperçu instantané

Ce que propose Typst

  • Typst est un système de composition basé sur du markup, conçu pour être aussi puissant que LaTeX tout en étant plus facile à apprendre et à utiliser
  • Ses principales fonctionnalités sont les suivantes
    • un markup intégré pour les tâches de mise en forme courantes
    • des fonctions flexibles pour le reste
    • un système de scripting étroitement intégré
    • composition de formules, gestion des bibliographies, etc.
    • temps de compilation rapides grâce à la compilation incrémentale
    • messages d’erreur clairs en cas de problème
  • Ce dépôt contient le compilateur Typst et la CLI nécessaires pour compiler des documents Typst en local
  • Pour une meilleure expérience d’écriture, vous pouvez utiliser l’éditeur collaboratif en ligne gratuit

Syntaxe et modèle de rédaction

  • Typst utilise des set rules comme #set pour définir les propriétés d’éléments, par exemple la taille de page ou la numérotation des titres
    • définir la hauteur de page sur auto ajuste la taille au contenu
    • pour un contrôle plus complet, les show rules permettent de redéfinir entièrement l’apparence d’un élément
  • Les titres s’écrivent avec la syntaxe = Heading
    • un seul = crée un titre de premier niveau, == crée un sous-titre
    • la liste complète du markup léger est disponible dans la documentation syntax
  • Les formules sont entourées de signes dollar
    • en ajoutant des espaces autour du contenu de la formule, elle peut être placée dans un bloc séparé
    • les identifiants de plusieurs lettres sont interprétés comme des définitions et fonctions Typst s’ils ne sont pas entourés de guillemets
    • les éléments comme floor ou sqrt ne nécessitent pas de barre oblique inverse
    • phi.alt applique le modificateur alt à phi pour sélectionner une variante particulière du symbole
  • Le scripting permet d’insérer du code dans le document en écrivant une expression après un dièse (#)
    • l’exemple calcule le n-ième nombre de Fibonacci avec deux variables et une fonction récursive
    • la fonction table reçoit les cellules ligne par ligne
    • l’opérateur d’expansion .. sert à passer les éléments d’un tableau comme arguments individuels

Installation et utilisation de la CLI

  • La CLI Typst peut être installée de plusieurs façons
    • le code source et les binaires précompilés de la dernière release sont disponibles sur la page des releases
    • placez le binaire dans un répertoire inclus dans PATH, puis mettez-le à jour avec typst update
    • les versions des gestionnaires de paquets peuvent être en retard sur la dernière release
  • Exemples d’installation via gestionnaire de paquets
  • Si vous disposez de la toolchain Rust, l’installation est possible avec cargo
    • dernière release : cargo install --locked typst-cli
    • version de développement : cargo install --git https://github.com/typst/typst --locked typst-cli
  • Nix et Docker sont également pris en charge
    • Nix : nix-shell -p typst
    • flake Typst : nix run github:typst/typst-flake -- --version
    • Docker : docker run ghcr.io/typst/typst:latest --help
  • La commande de compilation de base est la suivante
    • typst compile file.typ : crée file.pdf dans le répertoire de travail
    • typst compile path/to/source.typ path/to/output.pdf : crée le PDF à l’emplacement indiqué
  • La surveillance des changements se lance avec typst watch file.typ
    • comme Typst utilise la compilation incrémentale, c’est plus rapide qu’une compilation depuis zéro à chaque fois
  • Des commandes liées aux polices sont aussi proposées
    • typst compile --font-path path/to/fonts file.typ : indique un répertoire de recherche de polices supplémentaire
    • typst fonts --font-path path/to/fonts : affiche la liste des polices trouvées sur le système et dans le répertoire indiqué
    • TYPST_FONT_PATHS=path/to/fonts typst fonts : méthode par variable d’environnement avec la syntaxe Linux
  • Les autres sous-commandes et options sont consultables avec typst help, et l’aide d’une commande précise avec typst help watch

Environnements d’édition et communauté

  • Pour une expérience intégrée de type IDE, avec autocomplétion et aperçu instantané, vous pouvez utiliser l’application web Typst gratuite
  • Le serveur de langage communautaire Tinymist est intégré à plusieurs extensions d’éditeurs
  • Les espaces communautaires principaux sont le Forum et le serveur Discord
    • le Forum convient aux questions, à l’entraide entre utilisateurs et au partage de réalisations faites avec Typst
    • Discord convient davantage aux questions rapides, aux discussions liées aux contributions et au chat
  • Typst Universe est l’espace où la communauté partage des templates et des paquets
  • Les paquets créés par les utilisateurs peuvent être soumis au dépôt de paquets

Contributions et build

  • Si vous rencontrez un bug, vous pouvez ouvrir une issue ; pour implémenter une nouvelle fonctionnalité ou corriger un bug, suivez le guide de contribution
  • Pour compiler vous-même, installez la dernière version stable de Rust puis exécutez les commandes suivantes
  • Le binaire optimisé est stocké dans target/release/
  • Partager un paquet avec la communauté est aussi une façon de contribuer

Prononciation et graphie du nom

  • La prononciation IPA de Typst est /taɪpst/
  • "Ty" se prononce comme le Ty de Typesetting, et "pst" comme le pst de Hipster
  • Quand vous écrivez Typst, considérez-le comme un nom propre et utilisez un T majuscule

Principes de conception

  • Typst est conçu autour de trois objectifs : Power, simplicity, performance
  • L’objectif est d’offrir un système aussi puissant que LaTeX, facile à apprendre et à utiliser, et assez rapide pour permettre un aperçu instantané
  • La simplicité par la cohérence

    • dans Typst, quand on sait faire une chose, on doit pouvoir transférer ce savoir à d’autres tâches
    • s’il existe plusieurs façons de faire la même chose, elles doivent se situer à des niveaux d’abstraction différents
    • = Introduction et #heading[Introduction] sont un exemple autorisé de deux façons de faire la même chose, car la première est du sucre syntaxique pour la seconde
  • La puissance par la composabilité

    • plutôt que de prévoir un réglage pour chaque chose, Typst choisit une conception où un petit nombre de composants peuvent être combinés de multiples façons
    • TeX est lui aussi un système de bas niveau composable, mais les gens utilisent plutôt LaTeX
    • avec LaTeX, Typst considère que l’on finit souvent par dépendre de paquets, par exemple \usepackage{knob}
  • La performance par l’incrémentalité

    • toutes les fonctionnalités du langage Typst doivent être compatibles avec la compilation incrémentale
    • comemo prend en charge en arrière-plan une grande partie du travail lié à la compilation incrémentale

Financement et soutien

  • Les principaux soutiens au travail open source sur Typst listés sont les suivants
  • Cette liste ne comprend que les contributions au travail open source supérieures à 10 000 € ou qui devraient le devenir

2 commentaires

 
sebul 2025-02-28

Le lit-on « Ratekseu » pour LeTeX ? J’aurais plutôt dit « Reitek ».

 
GN⁺ 2024-07-21
Commentaires Hacker News
  • Typst est vraiment excellent, et notre organisation en est très satisfaite
    Nous devons générer plus de 1,5 million de PDF chaque nuit, donc nous avons testé plusieurs solutions, dont Puppeteer pour la conversion HTML→PDF, pdflatex et lualatex, et Typst s’est révélé plus rapide de plusieurs ordres de grandeur tout en consommant moins de ressources
    L’expérience développeur pour créer des modèles PDF en LaTeX n’était pas bonne, mais les modèles Typst étaient assez intuitifs
    J’ai écrit plus en détail sur ce stack de génération de PDF à grande échelle sur le blog : https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes

    • Je n’avais jamais entendu parler d’un cas de génération de documents PDF à une telle vitesse
      Je construis un produit de reporting PDF de masse basé sur Puppeteer, et avec des traitements nocturnes, du cache et du parallélisme, les performances sont plutôt correctes
      https://www.cx-reports.com
    • Je me demande si vous avez aussi essayé ReportLab
      C’était une bonne solution quand j’ai dû traiter un problème similaire il y a longtemps
      Ce n’était pas à cette échelle, mais c’était tout de même utilisable
    • Je me demande si votre organisation a rendu quelque chose au projet en retour, ou au moins l’a soutenu financièrement
    • Je me demande quel est le cas d’usage qui nécessite de générer autant de PDF
  • J’ai rédigé beaucoup de devoirs avec Typst, et l’écriture académique devient plus concise, plus immersive et, j’ose le dire, plus amusante
    Grâce au caractère fonctionnel de la syntaxe Typst, on évite les comportements capricieux qu’on voit aujourd’hui dans Microsoft Word et parfois même dans Google Docs
    Avec un IDE local comme VSCode, on peut aussi obtenir presque toutes les fonctionnalités souhaitées
    Par rapport à LaTeX, la composition globale du document est bien plus intuitive, mais pour rédiger de longues résolutions d’équations sur plusieurs pages, j’ai l’impression que LaTeX est plus facile à saisir
    La syntaxe LaTeX est plus proche de Markdown que d’un langage de programmation fonctionnel, donc on a moins besoin d’anticiper quand on compose des formules avec beaucoup de fonctions, d’exposants et d’indices

    • Ayant déjà pratiqué l’écriture académique, j’aimerais que les revues prennent en charge Typst, ou qu’un plugin ou un pont fiable vers LaTeX/Word s’impose
      En l’état, je n’écrirais probablement pas d’article scientifique en Typst
      Dès qu’on sort du cadre de son institution, il faut presque forcément convertir, et arXiv exige aussi les sources LaTeX
      Aujourd’hui, l’écosystème d’outils autour de LaTeX est plutôt bon, et il existe de nombreux IDE utiles
      Personnellement, j’utilise le mode Org d’Emacs, qui compile vers LaTeX
    • À noter que Typst dispose déjà d’une prise en charge partielle de LaTeX via le package mitex
      https://github.com/mitex-rs/mitex
    • Pour quelqu’un qui n’a presque jamais besoin de formules, je me demande quel avantage cela apporte par rapport à Markdown
  • Il existe plusieurs discussions passées et ressources associées : https://hn.algolia.com/?q=typst
    Il y a 1 an, 146 commentaires : https://news.ycombinator.com/item?id=35250210
    Il y a 8 mois, 34 commentaires : https://news.ycombinator.com/item?id=38354422
    Il y a 2 ans, 53 commentaires : https://news.ycombinator.com/item?id=34423590
    Il y a 2 ans, 30 commentaires : https://news.ycombinator.com/item?id=32209794

  • Je suis surpris que la sortie HTML n’ait pas été une fonctionnalité centrale dès le départ et soit encore en cours de développement
    Le fait que LaTeX entretienne une relation malaisée avec le web me semble justement être un point qu’un nouveau projet concurrent aurait cherché à résoudre correctement dès le début
    [0] https://github.com/typst/typst/issues/721

    • Typst est un outil qui cherche à concurrencer LaTeX
      Les deux se heurtent au même problème : le web et le papier fonctionnent de manière totalement différente, avec des concepts qui ne se traduisent pas les uns dans les autres
      Il faut donc définir une manière pour que le résultat de composition s’insère naturellement dans différents environnements
      Si Typst avait visé HTML dès le départ, le développement aurait été bien plus simple, mais ce n’aurait probablement pas été grand-chose de plus qu’un générateur de sites excessivement complexe
      Le fait d’avoir ciblé d’abord le PDF montre, à mon avis, une volonté réelle de concurrencer LaTeX
    • La sortie HTML de LaTeX est devenue assez correcte aujourd’hui, mais c’est le résultat des efforts héroïques de nombreuses personnes sur un système qui n’avait jamais été pensé pour cela
      Si, en lançant un nouveau système de balisage, on n’avait pas prévu de produire des documents accessibles, ce serait à mon avis un très mauvais choix
      Je ne l’utiliserai pas tant que Typst ne permettra pas de créer des documents accessibles
    • C’est l’un des gros problèmes
      Je n’aime pas les PDF
    • J’ai entendu dire que pandoc fonctionne plutôt bien pour cet usage
    • J’imagine que vous savez que TeX est apparu plusieurs années avant le web
  • J’attends avec impatience que LaTeX disparaisse et soit remplacé par Typst
    L’expérience d’utilisation n’a absolument rien à voir, et les résultats produits sont très impressionnants
    Jusqu’ici, je générais des fichiers TeX avec des modèles Jinja2, mais Typst peut recevoir du JSON en ligne de commande, c’est facile à utiliser et suffisamment puissant pour supprimer complètement l’étape Python
    Sans parler du fait que les temps de compilation se comptent en millisecondes

    • Le scripting est vraiment excellent
      Au début, j’étais habitué à la manière de faire de LaTeX, donc j’ai essayé de générer des modèles Typst avec des templates Go
      Puis j’ai découvert avec plaisir que Typst permet d’utiliser directement du JSON très facilement dans son propre moteur de scripting
  • En 1999, alors que je travaillais comme stagiaire, on m’a confié la rédaction de documents de normalisation pour le groupe de travail sur les standards de téléphonie VoIP de la TIA
    Les organismes de normalisation avaient tous un modèle Word utilisé par tout le monde, mais comme j’étais étudiant en école d’ingénieur et que j’utilisais LaTeX depuis un moment avec plaisir, je me suis dit : « De toute façon, le rendu final sera en PDF, et la mise en forme sera meilleure, alors pourquoi ne pas utiliser LaTeX ? »
    En pratique, le rendu LaTeX était effectivement meilleur, et mon supérieur a adoré le résultat sans jamais se rendre compte que je n’avais pas utilisé Word
    La réaction des membres du groupe de travail a aussi été positive, dans une ambiance du genre : « Ce gamin a vraiment du talent »
    Pour la startup, faire bonne impression sur les grands groupes participant au groupe de travail était très important pour l’avenir de l’entreprise, peut-être même pour sa survie
    Mais un jour, mon supérieur m’a dit : « Tu pourrais envoyer ce document Word à un haut dirigeant d’un grand groupe qui pourrait nous racheter ? Il voudrait s’en servir comme nouveau modèle de document », et j’ai ressenti le même effondrement intérieur que lorsque, à quatre ans, un ami et moi avions fait pipi dans une armoire pour voir ce que ça ferait avant de nous faire attraper par ma mère
    J’ai finalement embauché un ami pour qu’il le ressaisisse péniblement dans Word pendant tout un week-end, et mon supérieur a bien reçu le document
    L’entreprise a été rachetée 18 mois plus tard pour 100 millions de dollars
    Quoi qu’il en soit, LaTeX a toujours l’air 1000 fois mieux que Word

  • Cela ressemble à un concurrent de services comme Overleaf ou CodiMD
    C’est encore une autre syntaxe, mais il semble que pandoc la prenne en charge
    Dernièrement, comme je programme en R, j’utilise de plus en plus Quarto, qui produit notamment des sorties assez bonnes comme du HTML
    Mais ces outils ne résolvent toujours pas deux problèmes essentiels pour les usages académiques : fournir une bonne comparaison des différences aux reviewers, et permettre un partage simple avec des collaborateurs non techniques ainsi que des commentaires faciles
    C’est pourquoi, du moins pour l’écriture scientifique dans mon domaine, Word me semble encore difficile à remplacer pendant plusieurs années
    [1] https://github.com/overleaf/overleaf
    [2] https://github.com/hackmdio/codimd
    [3] https://pandoc.org/typst-property-output.html
    [4] https://quarto.org/

    • J’utilise beaucoup Quarto
      Quand j’utilise GT, le rendu PDF Typst me paraît un peu plus brut que le PDF LaTeX
      J’espère que cela sera corrigé
  • Par rapport à LaTeX, ce qui me gêne le plus dans Typst, c’est qu’il ne semble pas très bien gérer les fonctions de typographie fine les plus élémentaires
    Par exemple, il manque des choses dans la gestion des types d’espacement en mode mathématique (mathop, mathbin, mathrel, etc.) ou de la taille des délimiteurs (big, bigg, etc.)

  • Ça a vraiment l’air bien, et je compte l’essayer
    Mais je continue à me faire cette réflexion
    Probabilité estimée que LaTeX soit encore gratuit et maintenu dans 15 ans : 99,9999 %
    Probabilité estimée qu’un autre nouvel outil soit encore gratuit et maintenu dans 15 ans : 5 %

    • C’est la malédiction des systèmes arrivés tôt et suffisamment bons
      C’est pareil pour bash et quelques autres
      Même s’il existe beaucoup de meilleures alternatives, ils ne sont pas remplacés parce que les points de douleur ne sont pas assez importants
  • J’aime bien Typst
    Surtout quand il s’agit de traiter des entrées générées par programmation, et le flag --input peut recevoir du JSON
    Dans le fichier, on peut récupérer facilement du JSON avec la fonction dédiée json.decode()
    Il est très facile d’obtenir des résultats stables, donc dans mon projet aussi, je suis passé de LaTeX à Typst
    [0] https://typst.app/docs/reference/foundations/sys/
    [1] https://resgen.app