Que faire lorsqu'une police ne supporte pas certaines diacritiques en petites majuscules?
Malheureusement, il se peut que certaines fontes ne fournissent pas une version en petites majuscules pour tous les caractères qu'elle supporte en bas de casse et en majuscule. Dans ce cas, la version en bas de casse est utilisée :
\documentclass{article} \usepackage{fontspec} \setmainfont{Libertinus Serif} \begin{document} AḤMAD B. FAŻLĀN B. AL-ʿABBĀS B. RAŠĪD Aḥmad b. Fażlān b. al-ʿAbbās b. Rašīd \textsc{Aḥmad b. Fażlān b. al-ʿAbbās b. Rašīd} \end{document}
ā
en petites majuscules. La version utilisée pour générer ce document est un peu ancienne.
Dans le cas d'une police libre, vous pouvez bien entendu envoyer un rapport de bug. Mais dans l'intervalle, comment obtenir un ḥ
et un ā
en petites majuscules ?
Principes généraux
Le code source des polices OpenType comprend une série de fichiers .fea
, qui définissent différentes fonctionnalités (features) de la fonte. La commande \textsc
active la fonctionnalité smcp
(pour small-caps). Pour obtenir un ḥ
et un ā
en petites capitales, nous allons donc intégrer à notre fichier .tex
des instructions pour compléter le fichier .fea correspondant de Libertinus.
Les caractères dotés de diacritiques peuvent être obtenus de deux manières. Si les concepteurs de la fonte ont dessiné un glyphe correspondant au caractère unicode de ḥ
(i.e. U+1E25), on peut l'obtenir en indiquant que, quand on utilise la fonctionnalité smcp
, il faut remplacer le caractère ḥ
par ḥ.sc
(version en petites majuscules de ḥ
). Comme ce n'est pas le cas ici, on indiquera plutôt qu'il faut remplacer le ḥ
par h.sc
suivi d'un point en-dessous en combinaison (caractère U+1E25). Dans ce cas, le rendu final dépendra du moteur utilisé.
Avec Lua(La)Tex
Jusqu'en 2016, il était possible de charger un fichier .fea
complémentaire avec l'option FeatureFile
de fontspec
. Depuis 2017, cette option n'est plus supportée, et Lua(La)TeX propose à la place un autre mécanisme reposant sur des scripts Lua. Ce nouveau mécanisme est plus rapide que le précédent et utilise moins de mémoire, mais il est malheureusement très mal documenté (voir les sources en bas de la page).
Pour les petites capitales, on s'inspirera du code suivant :
\documentclass{article} \usepackage{fontspec} \setmainfont{Libertinus Serif} \directlua{ fonts.handlers.otf.addfeature { name = "smcp", type = "multiple", data = { ['ḥ'] = { "h.sc", 0x0323 }, ['ā'] = { "a.sc", 0x0304 }, }, } } \begin{document} \textsc{Aḥmad b. Fażlān b. al-ʿAbbās b. Rašīd} \end{document}
Le script Lua interprétée par Lua(La)TeX est inséré grâce à la commande \directlua
.
La commande fonts.handlers.otf.addfeature
utilisée dans ce script est passée à luaotfload
,
appelé automatiquement par Lua(La)TeX pour gérer l'importation des polices.
À l'intérieur de la commande, on ajoute les propriétés de la fonctionnalité que l'on ajoute :
- D'abord le nom de la fonctionnalité que l'on définit dans le fichier
.fea
de la police (introduit dans ce fichier par le mot-cleffeature
, voir ici pour Libertinus) ; - Ensuite, comme argument de
type
, la manière dont il faut interpréter les remplacements que nous allons renseigner (ici,“multiple”
signifie que les caractères qui composent les remplacements doivent être additionnés) ; - Enfin, une table de remplacements donnée comme arguments de
data
, où il faut respecter scrupuleusement l'usage des crochets, des accolades, des guillemets et des virgules. La première ligne peut se lire comme suit : dans le modesmcp
, à chaque fois que l'on rencontre unḥ
, il faut le remplacer par l'addition de la lettreh
en petites majuscules et de la diacritique U+0323.
Pour éviter de surcharger votre préambule et faciliter la réutilisation du code dans plusieurs fichiers, vous pouvez enregistrer le script Lua dans un fichier appelé, par exemple, libertinus-sc.lua
, que vous appellerez avec la commande :
\directlua{ require("libertinus-sc.lua") }
$HOME/texmf/scripts/lua
ou dans /usr/share/texmf/scripts/lua
, conformément à la TDS.
- fontspec ;
- Définition des polices avec les commandes de
fontspec
et chargement du script ; polyglossia
;- Définition des langues du document.
De manière générale, comme le précise le manuel de polyglossia p. 5, « il est conseillé d'activer les langues après avoir chargé toutes les extensions ».
Sources :
- On trouvera des références et des exemples pour Lua(La)TeX dans cette question de StackOverflow.
- La syntaxe des scripts Lua est expliquée dans le manuel sur les polices de ConTeXt, p. 175-188.