Comment ajuster la position d'une diacritique sur une lettre donnée ?
Il arrive parfois qu'une diacritique soit mal positionnée. Si la sélection d'un autre moteur de rendu ne suffit pas à résoudre ce problème, il est possible d'ajuster la position manuellement.
Nous prendrons l'exemple des caractères η̣ et ḍ dans la fonte Libertinus Serif.
Avec des commandes de bas niveau (e-)TeX
\documentclass{article} \usepackage{fontspec} \setmainfont{Libertinus Serif} \begin{document} η̣ ḍ \newcommand*{\doteta}{η\llap{ \symbol{"0323}\kern0.1\fontcharwd\font`η}} \catcode`ḍ=13 \newcommand*{ḍ}{d\llap{ \symbol{"0323}}} \doteta{} ḍ \end{document}
Dans les deux cas, nous créons une commande qui affiche le caractère de base (η ou d) ,
puis y superpose (avec \llap) une espace avec laquelle a été combiné
le caractère unicode U+0323 « point en-dessous en combinaison » (combining dot below).
Dans le cas du η̣, il faut en outre déplacer légèrement l'espace pointée vers la gauche grâce à la commande \kern :
plus précisément, on la déplace d'un dixième de la largeur du caractère η dans la fonte courante.
Notez que l'argument de \kern doit être modifié selon la police utilisé.
Dans le cas du η̣, nous avons créé un nom de commande ad hoc
car il n'existe pas en Unicode de caractère simple qui y corresponde :
cette forme est nécessairement composée de l'addition de η (U+03B7) et du caractère U+0323.
En revanche, le caractère simple ḍ existe (U+1E0D),
ce qui permet de l'utiliser directement dans le document
en en faisant un caractère actif
(dont le catcode est 13, comme ~)
que l'on associe à notre commande.
\newcommand*{\dotspace}{\hbox to 0.4em{}\llap{ \symbol{"0323}\kern-0.04em}}
Avec l'extension stackengine
stackengine est une extension dédiée à la superposition de caractères. Il fournit la commande \stackinset qui prend les arguments suivants :
- Alignement horizontal du symbole superposé par rapport au symbole de base ;
- Correction horizontale (longueur positive or negative)
- Alignement vertical ;
- Symbole superposé ;
- Symbole de base.
\documentclass{article} \usepackage{fontspec} \setmainfont{Libertinus Serif} \usepackage{stackengine} \begin{document} η̣ ḍ \newcommand*{\doteta}{\stackinset{c}{0.15\fontcharwd\font`η}% {b}{}% { \symbol{"0323}}% {η}} \catcode`ḍ=13 \newcommand*{ḍ}{\stackinset{c}{0.2\fontcharwd\font`d}% {b}{-0.32\fontcharht\font`d}% { \symbol{"0323}}% {d}} \doteta{} ḍ \end{document}
Sources :


