Normalisation des caractères unicode et typographie

lundi 29 avril 2013, par Maïeul
Suivre la vie du site RSS 2.0 Forum

La norme unicode permet d’encoder la quasi totalité des caractères existants sur Terre [1]. Elle possède certaines subtilités, qui peuvent être problématique avec certaines polices. Parmi ces subtilités, le fait qu’un même caractère puisse se noter de plusieurs manières... mais que les polices peuvent ne pas comprendre qu’il s’agit du même caractère.

Pour éviter ces problèmes, une solution est de normaliser les caractères. Voici un script permettant de le faire.

Explication et exemple

La norme Unicode, comme tous les jeux de caractères, affecte un numéro à chaque caractère. Cependant il existe des caractères dit « composés » qui peuvent soit avoir un numéro unique, soit s’encoder comme une suite de caractère.

Prenons par exemple le caractère grec « Alpha avec iota souscrit ». Il y a de manière de le noter en unicode :

  1. avec le caractère « GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI », dont le code unicode est U+1FB3, ce qui donne .
  2. avec le caractère « GREEK SMALL LETTER ALPHA », dont le code unicode est U+03B1, suivi du caractère « COMBINING GREEK YPOGEGRAMMENI », dont le code unicode est U+0345, ce qui donne .

Typiquement, si avec votre clavier vous frappez le iota souscrit avant le alpha, vous utilisez la première solution, et si vous le frappez après le alpha, vous utilisez la seconde solution.

En théorie, les polices sont censées rendre la même chose... cependant cela ne fonctionne pas toujours très bien.

Ainsi prenons la police Linux Libertine.

Voici ce qu’elle affiche, pour le moment, selon les deux manières d’encoder.

Deux manières d’encoder un alpha avec iota souscrit ... deux affichages différents
Deux manières d’encoder un alpha avec iota souscrit ... deux affichages différents

Résolution du problème

La norme unicode prévoit des formes normalisées. Les plus courantes sont :

  1. NFC, qui compose les caractères. Ainsi, si on applique cette normalisation, U+03B1 U+0345 devient U+1FB3.
  2. NFD, qui décompose les caractères. Ainsi, si on applique cette normalisation, U+1FB3 devient U+03B1 U+0345.

En général, pour avoir le meilleur rendu typographique, il faut préférer la forme NFC [2].

On peut le faire à deux niveaux :

Si on met en place cette commande, le fichier n’est pas modifié, mais XeTeX fera dynamiquement les modifications.

Ainsi, dans le cas présent, nous pouvons mettre :

\documentclass{article}
 \usepackage{fontspec,polyglossia,xunicode}
 \setmainfont{Linux Libertine O}
\usepackage[margin=0.1cm,a4paper]{geometry} % juste pour l'exemple, histoire de ne pas couper la ligne
\XeTeXinputnormalization 1

\begin{document}
ᾳ GREEK SMALL LETTER ALPHA (U+03B1) + COMBINING GREEK YPOGEGRAMMENI (U+0345)

ᾳ GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI (U+1FB3)

\end{document}
Deux manières d’encoder un alpha avec iota souscrit ... deux affichages identiques
Deux manières d’encoder un alpha avec iota souscrit ... deux affichages identiques

Notes

[1Il reste même en théorie de la place pour les caractère extra-terrestres.

[2En effet, les auteurs de polices de caractères commencent généralement par prévoir les formes unitaire plutôt que composés.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Acheter XeLaTeX appliqué aux sciences humaines

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

J’ai reçu en 2018 le prix DANTE e.V pour mon travail autour de LaTeX, en particulier autour de reledmac et reledpar.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul