Polices et pdflatex
Le vendredi 3 novembre 2006 à 22:52 - Lien permanent
PDF est le nouveau standard de diffusion de documents : il n'est plus vraiment d'actualité de générer des fichiers Postscript à partir de documents LaTeX. Cependant, ce n'est pas toujours évident de générer des documents PDF bien codés avec des jolies polices. Cet article donne une méthode pour éviter ces écueils.
D'où vient le problème ?
Les lecteurs intéressés uniquement par les recettes peuvent sauter cette section.
Par défaut, LaTeX utilise un codage des caractères appelé OT1, qui conduit à l'inclusion de polices de type 1 dans les fichiers PDF. Le problème posé par le codage OT1 est double :
- d'une part, dans les fichiers PDF, les caractères accentués ne sont pas codés tels quels, mais par deux caractères superposés, car les accents n'existent pas en Computer Modern. Donc les outils d'indexation type Google lisent des textes « 'etranges... »
- d'autre part, LaTeX est incapable dans ces conditions d'effectuer des césures dans les mots accentués.
Solution ? Passer à un codage moderne, appelé T1 (\usepackage[T1]{fontenc}
), ce qui résout les deux problèmes ci-dessus... Mais en pose un nouveau, et non des moindres !
En effet, lorsqu'on utilise le codage T1, pdflatex remplace dans les PDF les polices de la smala Computer Modern par des European Computer Modern, certes avec accents, mais qui sont au format type 3, et non type 1. Le type 3 donne des résultats vraiment hideux à l'écran. Il est donc nécessaire d'utiliser d'autres polices... Ainsi, depuis quelques mois existent les polices Latin Modern en version finale, et au format type 1[1], destinées à remplacer les Computer Modern tout en gardant la même apparence.
Solution
Dans ce paragraphe, je donne donc une recette qui devrait permettre d'éviter tout ennui lié aux polices.
1) Toujours utiliser le codage T1 : \usepackage[T1]{fontenc}
2) Pour un look identique aux polices Computer Modern, utiliser systématiquement les polices Latin Modern, et donc charger le package lmodern
: \usepackage{lmodern}
. Les autres packages de polices, comme palatino
fonctionnent très bien également (ils conduisent à l'inclusion dans les PDF de polices de type 1)
Les deux autres points ne sont pas directement liés aux polices, mais un petit rappel ne fait pas de mal...
3) Si possible, utiliser un éditeur qui sait travailler en UTF-8, et rédiger les fichiers dans ce format (cela évite les soucis liés aux « œ » par exemple) : \usepackage[utf8]{inputenc}
4) Toujours charger Babel avec la bonne langue : \usepackage[francais]{babel}
par exemple
Pour aller plus loin
On peut avoir envie de changer sélectivement certaines familles de polices (parmi romain (rm), sans sérifs (sf) et machine à écrire (tt)). Par exemple, j'aime bien Palatino pour le texte en romain, mais je n'apprécie pas que le package palatino
me mette du Courier en police sans sérifs (je préfère le Computer/Latin Modern Sans Serif)...
Tout simplement, il suffit de redéfinir les macros \rmdefault
, \sfdefault
et \ttdefault
. Par exemple :
\renewcommand{\rmdefault}{ppl} % texte romain en Palatino \renewcommand{\sfdefault}{pag} % texte sans sérifs en Avant Garde \renewcommand{\ttdefault}{lmvtt} % texte « machine » en Latin Modern Typewriter à espacement proportionnel
Les packages tout prêts du type lmodern
ou utopia
se contentent de définir trois lignes de ce type ! C'est donc aussi facile de le régler à la main, et on peut ainsi définir ce qu'on veut ! Il suffit de connaître les noms de polices à utiliser[2] :
lmr Latin Modern Roman lmss Latin Modern Sans Serif lmssq Latin Modern Sans Serif expansé lmtt Latin Modern Typewriter lmvtt Latin Modern Typewriter à espacement proportionnel ptm Times ppl Palatino pnc New Century Schoolbook pbk Bookman phv Helvetica pag Avant Garde pcr Courier pzc Zapf Chancery put Utopia bch Charter
À noter :
- il est possible de changer temporairement de police avec un
\fontfamily{nom}\selectfont
; - avec quelques bidouilles, on peut utiliser des polices True/Open Type dans ces commandes, mais je vous expliquerai une autre fois...
Commentaires
Merci pour les astuces. Moi plus j'utilise LaTeX, plus j'ai envie de tout foutre au feu. Et je génère toujours prioritairement du PS.
À noter que pdfTeX (donc pdfLaTeX) a des capacités en plus par rapport au TeX standard: la microtypographie.
pdfTeX peut décider de redimensionner trèèès légèrement et horizontalement les lettres de la police, si ça permet d'avoir un meilleur point de césure de ligne; les quantités maximales de déformations sont autour de 2%, et dépendent de la police et même du caractère il me semble.
D'autre part, et encore plus puissant, chaque caractère de chaque police se voit associé deux grandeurs de dépassement (gauche et droite), et un caractère a alors le droit de dépasser de la ligne d'autant. Ça permet d'une part de compenser l'illusion d'optique de non alignement d'un texte pourtant bien justifié (à cause des lettres très vides à droite par exemple), et aussi de faire des effets du genre ponctuation en équilibre dans la marge.
À noter que ces deux améliorations fonctionnent aussi en mode DVI (pdfTeX sait sortir du DVI) mais que la déformation de police est une douleur dans le cul (sic) à mettre en place avec TeX+dvips.
Entre parenthèses, plus j'utilise (La)TeX, plus je trouve que c'est vraiment bien foutu, moi. Enfin, plus TeX que LaTeX, parce que LaTeX c'est quand même un paquet de macros écrit à la va-vite au départ, et ils ont du mal à le maintenir. Les prémices de LaTeX3 sont très prometteurs, mais à quand la naissance ?
Petit message trèèèèèèès longtemps après la publication de ce billet.
Je n'ai jamais rencontré le problème T3. En fait, il suffit de s'assurer de la présence de la police CM-super qui est une version vectorialisée de computer modern et qui la remplace automatiquement lors de la création du PDF, quel que soit le chemin de compilation. De plus, même si latin modern est dédié aux alphabets diacritiques (comme le français), elle n'est pas complète (il manque par exemple les smallcaps grasses...).