====== 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} \documentclass{article} \usepackage{fontspec} \setmainfont{Libertinus Serif} \pagestyle{empty} \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 principe, la version de Libertinus Serif que vous avez installée sur votre ordinateur doit comprendre le ''ā'' 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 ? Nous traitons ici le cas des fichiers OpenType (OTF). ===== 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 [[https://github.com/alerque/libertinus/blob/master/sources/features/sc.fea|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 [[3_composition:texte:symboles:polices:moteurs_rendu|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} \documentclass{article} \usepackage{fontspec} \setmainfont{Libertinus Serif} \pagestyle{empty} \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-clef ''feature'', voir [[https://github.com/alerque/libertinus/blob/master/sources/features/sc.fea#L231|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 mode ''smcp'', à chaque fois que l'on rencontre un ''ḥ'', il faut le remplacer par l'addition de la lettre ''h'' 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") } Pour que le fichier de script soit trouvé automatiquement depuis n'importe quel document sans que vous n'ayez besoin de spécifier le chemin complet, vous pouvez l'enregistrer dans ''$HOME/texmf/scripts/lua'' ou dans ''/usr/share/texmf/scripts/lua'', conformément à la [[5_fichiers/tds/la_tds|TDS]]. Si vous utilisez [[ctanpkg>polyglossia]], il faut respecter l'ordre suivant dans le préambule, sans quoi votre script sera ignoré : - [[ctanpkg>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 [[texdoc>polyglossia|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 [[https://tex.stackexchange.com/questions/312154/how-to-adjust-font-features-in-luatex|cette question]] de StackOverflow. * La syntaxe des scripts Lua est expliquée dans le [[http://www.pragma-ade.com/general/manuals/fonts-mkiv.pdf|manuel sur les polices de ConTeXt]], p. 175-188. {{htmlmetatags>metatag-keywords=(small-caps, smallcaps, luatex, manque, point, macron, trait, caron, chevron, cédille, accent) metatag-og:title=(Que faire lorsqu'une police ne supporte pas certaines diacritiques en petites majuscules) metatag-og:site_name=(FAQ LaTeX francophone) }}