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 :