Christophe Jacquet

Polices et pdflatex

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 :

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…

  1. 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}

  2. 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 \mdefault, \\sfdefault et \\ttdefault. Par exemple :

\enewcommand{\mdefault}{ppl}    % texte romain en Palatino
\enewcommand{\\sfdefault}{pag}    % texte sans sérifs en Avant Garde
\enewcommand{\\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 :

Notes

[1] Elles sont également disponibles au format Open Type pour les utiliser directement sous Linux, Windows ou MacOS X.

[2] Ce sont les noms dans le système de sélection PSNFSS.

HTML5 valide ? © . ✍ Contact. Mentions légales.