Phonokit

Analyse phonologique en Typst

Auteur·rice

Guilherme D. Garcia

Date de publication

25 décembre 2025

DOI Typst Package MIT License GitHub Issues Last Commit

Dans ce qui suit, je suppose que vous connaissez Typst, mais en bref, il s’agit d’un langage de programmation conçu pour la composition de documents. Pour migrer de LATEX en 2025, j’ai dû passer du temps à explorer le langage pour voir si je pourrais y transférer tout mon flux de travail (diapositives, articles, CV, etc.). J’ai rapidement découvert qu’il pouvait faire tout ce que je fais en LATEX et, surtout, bien plus (voir ici). C’est ainsi qu’est née l’idée de cette extension : il s’agit d’une collection de fonctions que j’utilise souvent dans mon enseignement et ma recherche en phonologie. Bien sûr, l’extension ne représente qu’un sous-ensemble de mes propres fonctions, car plusieurs d’entre elles sont trop spécifiques à mes goûts et besoins.

AstuceManuel

Consultez la vignette de l’extension en format PDF ici.


Fonctionnalités

Module API

Contrairement à LATEX, Typst offre une prise en charge native des caractères Unicode tels que les symboles phonétiques. Bien que cela soit formidable, je suis déjà habitué à tipa en LATEX, donc mon premier objectif était d’avoir une fonction qui émule tipa autant que possible : ce serait familier, pratique et rapide. C’est ce que fait la fonction #ipa(). Il n’y a que des différences mineures entre \textipa{} et #ipa() — voir la fiche de référence dans la .

  • Saisie de style tipa : utilisez la notation tipa familière de LATEX au lieu de chercher des symboles Unicode
  • Prise en charge étendue des symboles : la plupart des consonnes, voyelles et autres symboles API du tableau tipa
  • Diacritiques fréquents : nasalisé (\\~), dévoisé (\\r), syllabique (\\v) ; la liaison (\\t) est également disponible
  • Suprasegments : accent primaire ('), accent secondaire (,), longueur (:)
  • Découpage automatique des caractères : tapez SE au lieu de S E pour plus d’efficacité (l’espacement est nécessaire autour des caractères utilisant des barres obliques inverses)
  • La police Charis SIL est requise pour toutes les transcriptions. Si vous n’avez pas encore installé cette police, visitez https://software.sil.org/charis/download/
Figure 1: Fiche de référence (en anglais; voir vignette). Cliquez pour agrandir.

Module de tableaux API

J’ai utilisé l’excellente extension vowel plusieurs fois en LATEX, mais je n’aime pas particulièrement son interface — voir l’exemple dans mon tutoriel LATEX pour phonologues ici. La fonction #vowels() dans phonokit est plus simple : elle prend une chaîne de voyelles et les place sur un trapèze vocalique. Le trapèze de la a été créé avec #vowels("english"), mais la fonction accepte une chaîne de voyelles, vous pouvez donc personnaliser votre trapèze selon vos besoins. Il en va de même pour la fonction #consonants().

Une fonction similaire existe également pour les consonnes : #consonants(). Elle renvoie un tableau API des consonnes pulmonaires à partir d’une entrée (chaîne). Pour #vowels() et #consonants(), vous avez également la possibilité d’utiliser une langue comme entrée (voir la liste des langues disponibles ci-dessous).

  • Tableaux vocaliques : placez les voyelles sur le trapèze vocalique API avec un positionnement précis
  • Tableaux consonantiques : affichez les consonnes dans le tableau API des consonnes pulmonaires
  • Inventaires linguistiques : inventaires prédéfinis pour certaines langues (anglais, espagnol, français, allemand, italien, portugais, japonais, russe, arabe, mandarin)
  • Ensembles de symboles personnalisés : placez n’importe quelle combinaison de symboles API
  • Positionnement automatique : les symboles sont positionnés selon leurs propriétés phonétiques (lieu, mode, voisement, antériorité, hauteur, arrondissement)
  • Formatage API approprié : paires sourdes/sonores, articulations impossibles grisées, points pour les paires minimales de voyelles
  • Tableaux redimensionnables : ajustez la taille pour s’adapter à la mise en page de votre document (le redimensionnement inclut le texte comme prévu)
Figure 2: Trapèze vocalique pour l’anglais (américain standard).

Module prosodique

Les fonctions #syllable(), #foot() et #word() vous aident à créer des représentations prosodiques à partir de chaînes. Elles ajustent automatiquement la taille, mais vous pouvez également utiliser l’argument scale.

  • Visualisation de la structure prosodique : dessinez des structures syllabiques avec attaque, noyau et coda
  • Structure de pied flexible : utilisez des parenthèses pour marquer les frontières de pieds explicites et des marques d’accent pour identifier la tête (iambes, trochées)
  • Marquage de l’accent : marquez les syllabes accentuées avec une apostrophe '
  • Alignement flexible : alignement à gauche ou à droite pour les têtes de mots prosodiques
Figure 3: Une consonne géminée dans une représentation moraïque traditionnelle.

La est le résultat de #foot-mora("'pot.ta", coda: true), où coda: true indique que les codas projettent une more. La fonction détecte les séquences coda-attaque identiques, donc « pot.ta » déclenche la représentation d’une géminée.

Pour créer la représentation des mots prosodiques, la fonction #word() est utilisée. La montre un mot prosodique simple généré avec le code #word("('po.Ra).('ma.pa)", foot: "R"), où foot: "R" indique quel pied est le pied principal dans le mot prosodique (lorsque plus d’un pied est présent). Notez que les pieds sont détectés en fonction de l’utilisation des parenthèses dans l’entrée. Les marques d’accent ' sont utilisées pour déterminer la tête du pied. Toutes les fonctions acceptent la même entrée utilisée dans la fonction #ipa(), ce qui signifie que les symboles phonétiques sont automatiquement détectés.

Figure 4: Un mot prosodique avec des représentations attaque-rime pour les syllabes.

Toutes les fonctions impliquant des représentations prosodiques ont également un argument scale. Ceci est important car nous devons souvent ajuster la taille d’une représentation, mais le texte lui-même peut ne pas se redimensionner correctement (l’épaisseur des lignes peut également être problématique dans ces scénarios). L’argument en question s’occupe de tout.

Module de grammaire de contraintes

L’extension inclut une fonction pour générer des tableaux en TO, mais il va plus loin et produit un tableau MaxEnt Goldwater et Johnson () Hayes et Wilson () avec la fonction #maxent(). La illustre un scénario où tous les candidats ont une probabilité non nulle d’être observés étant donné une entrée spécifique x. La colonne H(y) affiche le score d’Harmonie de chaque candidat y, calculé comme la somme pondérée de toutes les violations de contraintes. Ensuite, la colonne eH(y) fournit la probabilité non normalisée, qui est l’exponentielle du score d’Harmonie négatif (ceci a également été appelé le score MaxEnt). Enfin, la probabilité prédite réelle est affichée dans la colonne P(y|x), obtenue en divisant la valeur non normalisée d’un candidat par Z(x) (la somme de tous les scores non normalisés).

La fonction #maxent() calcule H(y), eH(y) et P(y|x) automatiquement à partir des poids fournis. La liste les poids des contraintes utilisées en haut et affiche des barres de probabilité dans la marge droite. Celles-ci peuvent être désactivées avec visualize: false (voir ), mais elles sont affichées par défaut car cela peut aider les étudiants à visualiser rapidement les probabilités lorsque de nombreux candidats sont évalués.

Figure 5: Tableau MaxEnt avec calcul automatique.
#maxent(
  input: "kraTa",
  candidates: ("[kra.Ta]", "[ka.Ta]", "[ka.ra.Ta]"),
  constraints: ("Max", "Dep", "*Complex"),
  weights: (2.5, 1.8, 1),
  violations: (
    (0, 0, 1),
    (1, 0, 0),
    (0, 1, 0),
  ),
  visualize: true  // Afficher les barres de probabilité (par défaut)
)
Bloc de code 1: Code utilisé pour générer un tableau MaxEnt.

Dépôt de l’extension

Vous pouvez télécharger ou faire un fork de la version la plus récente d’extension (version de développement) dans le dépôt ci-dessous.

  • http://github.com/guilhermegarcia/phonokit

Copyright © 2025 Guilherme Duarte Garcia

Les références

Goldwater, Sharon, et Mark Johnson. 2003. « Learning OT constraint rankings using a Maximum Entropy model ». In Proceedings of the Stockholm Workshop on Variation within Optimality Theory, 111‑20.
Hayes, Bruce, et Colin Wilson. 2008. « A maximum entropy model of phonotactics and phonotactic learning ». Linguistic Inquiry 39 (3): 379‑440. https://doi.org/10.1162/ling.2008.39.3.379.