Typst, une alternative à LaTeX plus facile à apprendre
(github.com/typst)- 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 watchsurveille 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.typgé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
#setpour 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
pagesurautoajuste 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
- définir la hauteur de
- 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
- un seul
- 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
floorousqrtne nécessitent pas de barre oblique inverse phi.altapplique le modificateuraltàphipour 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
tablereç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 avectypst update - les versions des gestionnaires de paquets peuvent être en retard sur la dernière release
- Exemples d’installation via gestionnaire de paquets
- Linux : Typst sur Repology, Snap de Typst
- macOS :
brew install typst - Windows :
winget install --id Typst.Typst
- 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
- dernière release :
- 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
- Nix :
- La commande de compilation de base est la suivante
typst compile file.typ: créefile.pdfdans le répertoire de travailtypst 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émentairetypst 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 avectypst 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
git clone https://github.com/typst/typstcd typstcargo build --release
- 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 leTyde Typesetting, et"pst"comme lepstde Hipster- Quand vous écrivez Typst, considérez-le comme un nom propre et utilisez un
Tmajuscule
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
= Introductionet#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
comemoprend 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
- Posit : financement d’un ingénieur compilateur à temps plein
- NLnet : soutien aux travaux sur Typst via plusieurs subventions du fonds NGI Zero Core
- travail sur l’export HTML
- travail sur l’accessibilité PDF
- Science & Startups : financement du développement de Typst de janvier à juin 2023 via la Berlin Startup Scholarship
- Zerodha : sponsoring ponctuel
- Cette liste ne comprend que les contributions au travail open source supérieures à 10 000 € ou qui devraient le devenir
2 commentaires
Le lit-on « Ratekseu » pour LeTeX ? J’aurais plutôt dit « Reitek ».
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 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
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
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
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
https://github.com/mitex-rs/mitex
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
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
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
Je n’aime pas les PDF
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
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/
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.)L’espacement entre symboles et opérateurs en mode mathématique peut être modifié via https://typst.app/docs/reference/math/class/, et la taille des délimiteurs peut être modifiée ou gérée automatiquement via https://typst.app/docs/reference/math/lr#functions-lr
Cela dit, LaTeX semble être dans le même cas
Ç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 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
--inputpeut recevoir du JSONDans 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