Profitez des offres Memoirevive.ch!
LaTeX à l’ère Unicode : XeLaTeX

Tout utilisateur de LaTeX, ainsi que nous l'avons rappelé Fabien Conus et moi-même lors de notre cours sur LaTeX (très beau, pas cher) aura été confronté à deux handicaps gênants de ce formidable formateur de texte, hérités de son moteur TeX :

  • Il faut utiliser des « paquets » spéciaux pour qu'il accepte de gérer les caractères accentués et les langues non latines ;
  • Il ne peut pas utiliser directement les polices de votre système d'exploitation.

Mais depuis 2005, est sortie une version du moteur TeX, appelée XeTeX, créée par Jonathan Kew, qui résoud directement ces deux problèmes. Il est basé sur l'encodage de caractères Unicode, qui accepte à peu près tous les caractères et les langues de la création, permet d'utiliser les polices basées sur ce codage, et surtout les polices figurant sur votre système d'exploitation. Avec XeLaTeX, c'est-à-dire la version du langage LaTeX basée sur XeTeX, les connaisseurs du langage LaTeX ont pu quasi immédiatement après la sortie de XeTeX avoir accès à tous ces avantages.

J'ai déjà présenté brièvement XeLaTeX dans la sixième partie de notre cours sur LaTeX, dont je suppose que vous l'avez lue (ou bien que vous vous êtes « débrouillé » en LaTeX), et vais approfondir un peu le sujet dans l'article d'aujourd'hui.

Utiliser XeLaTeX depuis TeXShop

Pour rappel donc, un préambule minimal typique d'un programme XeLaTeX ressemble à ceci si on utilise TeXShop comme interface graphique :

%!TEX encoding = UTF-8 Unicode
%!TEX TS-program = xelatex
\documentclass{article}
\usepackage{xltxtra}
\usepackage[frenchb]{babel}
\setmainfont{Zapfino}
\begin{document}
Zapfino, c'est chouette !
\end{document}

Ce qui donne ceci après composition :

image

La première ligne du programme spécifie l'encodage source du texte à TeXShop : il n'y en a que deux possibles avec XeTeX, UTF-8 Unicode et UTF-16 Unicode. C'est le premier le plus largement utilisé, parce qu'il est compatible avec l'ancien standard, ASCII.

Il n'y a guère intérêt à utiliser XeLaTeX avec un autre encodage qu'Unicode. C'est même théoriquement impossible, mais on peut demander au moteur XeTeX de convertir en Unicode un texte avec un ancien encodage, au moyen de la commande \XeTeXinputencoding. Par exemple, si votre programme est en Latin 1, tapez

\XeTeXinputencoding{iso-8859-1}

en préambule. Si vous voulez entrer un texte en Mac OS Roman, alors remplacez iso-8859-1 par mac.

La deuxième ligne du programme indique à TeXShop de compiler avec le moteur XeLaTeX. On peut également se servir du menu « Composition » ou configurer les Préférences de TeXShop pour que ce choix soit systématique, mais l'emploi de cette ligne de commande est plus souple, et je le recommande.

On voit également qu'on a chargé le paquet xltxtra : c'est un paquet « magique » fournissant plusieurs commandes, notamment \XeTeX et \XeLaTeX pour imprimer correctement les logos de ces deux programmes, mais son rôle principal est de faire appel à deux autres programmes qu'on peut charger également à part : xunicode qui fournit quelques caractères Unicode supplémentaires (voir ici), et surtout fontspec, de Will Robertson !

Utiliser les polices du système : fontspec

Disons-le tout de suite : utiliser XeLaTeX sans fontspec ne présente aucun intérêt. C'est en effet ce paquet qui permet l'utilisation des polices du système d'exploitation. On en voit un exemple dans notre programme : la commande \setmainfont{Zapfino} permet de charger la fonte Zapfino qui sera la principale fonte du programme.

Mais on peut raffiner ces appels de fontes, par exemple en chargeant distinctement une fonte romane, une fonte sans serif et une fonte à chasse fixe. Supposons que nous voulons utiliser la fonte romane Times New Roman avec la fonte sans serif Helvetica Neue et la fonte à chasse fixe Courier, nous le ferons avec les commandes \setromanfont{Times New Roman}, \setsansfont{Helvetica Neue} et \setmonofont{Courier} à placer en préambule.

Pour que ça marche, il suffit que ces fontes soient installées dans votre système d'exploitation, sous les noms donnés en argument des commandes, dans les arborescences prévues par Mac OS X pour elles (i.e. les différents dossiers « Fonts » de vos « Bibliothèques »). À vérifier si nécessaire !

Pour plus de détails sur les nombreuses commandes fournies par fontspec, je vous renvoie à son excellente documentation, en anglais.

Si vous chargez fontspec sans utiliser une de ses commandes de chargement de fontes, ce seront les fontes LaTeX classiques Latin Modern qui seront chargées, ou plus précisément les versions Unicode de celles-ci, qui se trouvent dans votre installation LaTeX (je présume qu'il s'agit de MacTeX). Un excellent choix par défaut, qui fournit par ailleurs de très bonnes polices mathématiques en complément.

Cas particulier des polices de caractères mathématiques

Mais nous arrivons ici à une des lacunes de XeLaTeX : son traitement des fontes mathématiques. En chargeant fontspec, je l'ai dit, on se retrouve par défaut avec les fontes mathématiques des fontes Latin Modern. Ce qui sera encore le cas si, par exemple, vous chargez Times New Roman comme fonte de texte de base. Le problème est qu'un texte en Times et des maths en Latin Modern, ça ne « rend » pas très bien. Il faut donc trouver des fontes mathématiques « kivonbien » avec Times. Mais voilà, elles doivent être des fontes Unicode.

À ma connaissance, il n'y a qu'un seul ensemble de fontes Unicode comprenant Times et contenant un ensemble complet de symbole mathématiques : les fontes Stix. Les seuls autres ensembles Unicode (outre Latin Modern bien sûr) fournissant un accompagnement mathématique acceptable sont les fontes Cambria Math (de Microsoft, sous-ensemble des fontes complètes Cambria) et leur alternative libre Asana Math. Je n'ai pu tester aucune de ces fontes moi-même pour le moment. C'est le paquet unicode-math de Will Robertson (encore lui) qui est censé permettre l'utilisation de ces fontes mathématiques. Je serai ravi d'avoir des retours d'expérience sur ce paquet et ces fontes, comme celui-ci !

Bref, pour ceux qui veulent profiter de la richesse des ensembles cohérents de fontes textes+maths existant pour « l'ancien » LaTeX (voir cet article), il vous faudra soit utiliser XeLaTeX sans Fontspec (ce qui n'a rien d'intéressant), soit revenir justement au LaTeX standard, c'est-à-dire pdfLaTeX.

Gestion des langues : polyglossia versus babel

Dans l'échantillon de programme donné plus haut, nous avons également chargé le paquet standard babel avec l'option frenchb pour avoir un traitement cohérent du texte en français. Mais le paquet babel n'a pas du tout été prévu pour XeLaTeX ! D'expérience, cependant, il fonctionne bien avec XeLaTeX pour toute langue utilisant l'alphabet latin. Mais rien ne garantit que ce sera le cas pour une langue utilisant un autre alphabet ou un autre sens d'écriture, tel l'hébreu, le russe, le mandarin ou l'arabe… Dans ce cas il est indiqué d'utiliser le paquet polyglossia, dont voici un lien vers la documentation.

Lacune : microtypographie limitée

Nous arrivons ici à LA lacune de XeLaTeX : l'absence par défaut de traitement de la microtypographie, c'est-à-dire de traitement typographique ultra-précis du texte visant à améliorer son « gris typographique » (en gros, l'occupation optimale de la zone de texte sur la feuille).

Deux exemples de propriétés microtypographiques sont la « protrusion » et « l'expansion » des fontes. La protrusion augmente très légèrement les espaces inter-mots sur une ligne de façon à ce que chaque ponctuation se trouvant en fin de ligne soit légèrement décalée vers la droite et déborde tout aussi légèrement dans la marge. L'expansion de fontes s'occupe d'agrandir ou de rétrécir localement la place en largeur prise par chaque caractère, à une échelle indétectable à l'œil, mais de façon à réduire ou augmenter d'éventuels espaces inter-mots trop grandes ou trop courtes selon les canons typographiques. Ce qui permet également de réduire le nombre de mots coupés en fin de ligne. Ces deux propriétés améliorent considérablement le gris typographique d'un document de texte dense.

La protrusion et l'expansion de fontes (et d'autres propriétés microtypographiques) sont rendues accessibles par le moteur pdfTeX utilisé par pdfLaTeX, et c'est le paquet microtype qui permet à l'utilisateur de pdfLaTeX de les utiliser. Un simple chargement de ce paquet permet d'utiliser la protrusion et l'expansion de fontes dans votre texte. Essayez, simplement en introduisant la ligne

\usepackage{microtype}

dans un de vos programmes pdfLaTeX contenant un texte suffisamment important, et vous verrez la différence… Je vous recommande chaudement de lire la documentation de ce paquet (en anglais), claire et passionnante.

Hélas, XeTeX ne permet pas, par défaut, ces propriétés microtypographiques, et donc microtype, tel quel, ne fonctionnera pas avec XeLaTeX. D'après ce que j'ai pu comprendre (un vrai expert me corrigera si besoin), contrairement à pdfLaTeX où c'est le moteur pdfTeX qui se charge de l'essentiel des propriétés microtypographiques, ce traitement est surtout l'apanage des fontes elles-mêmes avec XeTeX, et jusqu'il y a peu ce dernier ne savait pas les stimuler en ce sens. Il semblerait cependant que la dernière version de XeTeX permette la protrusion de caractères (voyez ce sujet de discussion), mais je n'ai pas encore vérifié où cela en est.

Quel avenir ?

Au moment de sa sortie, XeTeX et XeLaTeX étaient attendus depuis très longtemps par la communauté TeX : enfin une version de (La)TeX permettant d'utiliser n'importe quel caractère et n'importe quelle langue, et toutes les polices du système ! Seule l'absence d'ensembles de fontes Unicode texte+maths cohérents et de traitement microtypographique pouvait représenter un frein à son adoption, mais on l'a vu, cela est en train de changer. Et son utilisation s'est popularisée dernièrement, particulièrement dans le milieu des linguistes et des utilisateurs de langues à alphabet non latin.

Mais un concurrent très sérieux se présente à XeTeX : il s'agit de LuaTeX, un nouveau moteur destiné à remplacer pdfTeX, et déjà utilisable avec MacTeX 2010. LuaTeX utilise également Unicode, permet également l'utilisation des polices du système, et last but not least présente déjà un traitement microtypographique très complet. Ce sera l'objet d'un prochain article…

En attendant, ceux qui veulent tout savoir de XeTeX et XeLaTeX devront se pencher, outre sur le manuel de fontspec déjà évoqué, sur le XeTeX Companion de Michel Goossens, en cours de rédaction, mais déjà très intéressant !

11 commentaires
1)
cerock
, le 05.04.2011 à 09:14
[modifier]

Hello, très intéressant article. Personnellement, je me rend compte que j’écrit de moins en moins de document (et de plus en plus de dokuwiki). Donc les rare lettres que je doit taper, je ne les fait plus sur LaTeX, mais sur pages. Car quand on ne l’utilise pas souvent, on passe énormément de temps a s’y replonger :( Mais j’aime bien suivre sont évolution.

2)
JPO1
, le 05.04.2011 à 09:31
[modifier]

J’ai commencé à utiliser XeLaTeX après avoir lu l’article de Franck Pastor de 2008 cité dans son texte.

Au début j’ai été très gêné par l’absence de la protrusion. Pour certains travaux je revenais à pdfLaTeX. Et puis les avantages et les facilités de XeLaTeX l’ont emporté.

J’espère que XeLaTeX avancera dans le traitement de la microtypographie. De ce coté là la dernière version n’a rien changé. Alors LuaTeX ? j’attends l’article de Franck Pastor sur ce sujet avant d’essayer.

Merci encore pour vos articles éclairants.

4)
Guillôme
, le 05.04.2011 à 09:59
[modifier]

Article très intéressant, merci pour tous les liens :)

c’est le paquet microtype qui permet à l’utilisateur de pdfLaTeX de les utiliser.

Es-tu en train de dire que mes documents LaTeX n’ont pas d’aménagement d’espace intelligent si je ne mets pas \usepackage{microtype) en entête?

Je vais tester mais sur un gros document sans cet entête, je trouvais déjà que la répartition du texte, les coupures de mots, la justification… étaient particulièrement bonne.

C’est en effet ce paquet qui permet l’utilisation des polices du système d’exploitation

Y-a-t-il une différence de rendu des polices systèmes versus les polices prévues pour LaTeX ou aucune différence (aliasing, petites erreurs…)? Genre des différences de traitement de Opentype, Truetype, Postscript…

5)
henrif
, le 05.04.2011 à 10:07
[modifier]

JeTex n’y Texcomprendrai jamaisTex rienTex à LaTex

6)
Joël (exGlimind)
, le 05.04.2011 à 10:17
[modifier]

Merci pour l’article, mais moi, je ne comprends toujours pas ce que c’est XeTeX !

J’ai rédigé avec grande satisfaction ma thèse de doctorat en LaTeX. Vraiment satisfait de mon choix, le rendu est super.

Par contre, tous ces différents “moteurs” ou je ne sais quoi, ça me saoule. En effet, en tant qu’utilisateur, je ne veux pas à avoir à me soucier de ça. Je ne veux pas prendre le temps de lire 1’001 documentations afin de choisir si XeTeX, LuaTex, pdfLaTeX ou je ne sais quoi est meilleur pour mon travail.

C’est à mon avis une faiblesse typique d’un logiciel libre.

Pour l’instant, je ne change rien à mes habitudes. D’ailleurs, je ne sais même pas exactement ce que j’utilise, merci Texshop pour me donner une interface agréable.

7)
Franck Pastor
, le 05.04.2011 à 10:21
[modifier]

Es-tu en train de dire que mes documents LaTeX n’ont pas d’aménagement d’espace intelligent si je ne mets pas \usepackage{microtype} en entête?Je vais tester mais sur un gros document sans cet entête, je trouvais déjà que la répartition du texte, les coupures de mots, la justification… étaient particulièrement bonne.

Si, si, c’est déjà un traitement de très bonne qualité des espaces typographiques, et mondialement reconnu comme tel depuis que TeX existe. Mais la qualité est encore meilleure avec le traitement microtypographique du texte, voilà tout. Essaie, tu verras. La doc de microtype en propose une illustration animée frappante dans sa page 4 (mais il faut l’ouvrir avec Adobe Reader pour que ça marche).

Y-a-t-il une différence de rendu des polices systèmes versus les polices prévues pour LaTeX ou aucune différence (aliasing, petites erreurs…)? Genre des différences de traitement de Opentype, Truetype, Postscript…

Je ne saurais pas le dire moi-même. Les traitements des fontes par (pdf)TeX et XeTeX sont fondamentalement différents, et je ne suis pas assez calé en fontes pour entrer dans les détails. Ce qui est sûr et reconnu, c’est que tant que l’on ne fait pas intervenir la microtypographie, la qualité de traitement des fontes par XeTeX n’a rien à envier à celle de pdfTeX. Pour des fontes équivalentes s’entend, car XeTeX permet de traiter des fontes beaucoup plus diverses que pdfTeX (Opentype…), ce qui fausse un peu la comparaison. Mais LuaTeX rétablit l’équilibre à ce niveau.

8)
Franck Pastor
, le 05.04.2011 à 10:31
[modifier]

Merci pour l’article, mais moi, je ne comprends toujours pas ce que c’est XeTeX !

Pour faire simple : une version de TeX n’acceptant qu’Unicode comme encodage de caractères (adieu le paquet inputenc avec ses options applemac ou latin1), et qui permet l’utilisation des polices installées dans ton système d’exploitation, outre celles installées dans l’arborescence de MacTeX.

LuaTeX permet cela aussi, mais de manière différente. J’en saurai moi-même plus sur ces différences quand j’aurais étudié LuaTeX de près. Rendez-vous dans un mois ou deux !

Si tu n’as pas l’utilité des polices installées dans les différents dossiers « Fonts » des dossiers « Bibliothèque » de Mac OS X, et si tu es satisfait de l’encodage de texte 8 bits de (pdf)TeX façon « applemac » ou «  iso-latin-1 », alors XeTeX n’a strictement aucun intérêt pour toi, en effet. Pas de complexes, c’est mon cas également, pour 99 % de ma production de documents :-) Mais d’autres ne peuvent s’en passer ! Sans parler de tous ceux qui utilisent LaTeX en arabe, hébreu, cyrillique…

Ce n’est pas un inconvénient des logiciels libres, c’est un avantage : chacun peut y trouver son bonheur.

9)
Franck Pastor
, le 05.04.2011 à 14:49
[modifier]

En typographie, « protrusion » est un terme directement repris de l’anglais. Voir la doc de microtype et la définition anglaise pêchée sur Wikipedia :

Glyphs at the end of a line can be extended beyond the end of the line to create a more even line at the edge of the text. This is called protrusion, margin kerning, or hanging punctuation.

C’est parfaitement analogue au concept médical de protrusion (aussi bien en anglais qu’en français) :  position avancée ou mouvement vers l’avant d’un organe.

La reprise en français du mot anglais désignant ce concept typographique est donc tout à fait justifiée.

10)
flup
, le 06.04.2011 à 09:47
[modifier]

Très intéressant, comme toujours.

Ce qui m’intéresse le plus dans l’accès à l’unicode, c’est la possibilité d’utilisation d’autres alphabets (la coréen, pourtant alphabétique, est un cauchemar à utiliser en “latex normal”). Par contre, il me faudra adapter un package que j’ai développé pour latex; se basant justement sur des polices (fontes musicales), il y a du boulot en perspective.

11)
JPO1
, le 06.04.2011 à 11:22
[modifier]

Chacun des articles de Franck Pastor m’encourage à faire des essais.

À la suite de celui-là j’ai essayé LuaLaTeX sur le corps d’un document que j’avais compilé avec XeLaTeX. L’objectif était d’en comparer les sorties bien sûr.

Je suis déçu par LuaLaTeX : en fait de protrusion les signes de ponctuations se retrouvent en retrait de l’alignement droit, alors qu’avec XeLaTeX il se trouvent en alignement parfait (ce qui est loin d’être parfait justement). À part cela le codage de LuaLaTeX m’a paru plus simple que celui de XeLaTeX—on sait que l’appréciation de simplicité est personnelle.