Mais à quoi bon servent les packages ‘fontenc’ et ‘inputenc’ ?

Depuis vos premières heures sous LaTeX, on vous dit de toujours utiliser les packages « fontenc » et « inputenc », au moins jusqu’à ce que vous vous mettiez à la langue de Miley Cyrus. Je vais donc (enfin) vous dévoiler leur utilité.

inputenc

Son nom signifie globalement « encodage d’entrée », c’est-à-dire encodage des caractères utilisés dans le fichier source. Ce package sert à pouvoir taper les accents directement dans le fichier source (par exemple en utilisant « é » au lieu de \'{e}). inputenc se contente en fait de faire lui-même la conversion entre ces caractères accentués et les commandes d’accentuation.

En option de ce package, il est impératif de préciser quel encodage est utilisé pour le fichier source :

\usepackage[utf8]{inputenc}

fontenc

Ce package permet quant à lui d’afficher et de prendre correctement en charge ces caractères accentués (du point de vue du fichier de sortie).

Dans la très grande majorité des cas, on utilisera l’encodage T1 :

\usepackage[T1]{fontenc}

Il est préférable de charger inputenc avant fontenc.

Exemples de rendus

On va donc torturer un peu \LaTeX avec les accents, en essayant de compiler le code suivant :

\documentclass{minimal}
\usepackage[francais]{babel}
 
\begin{document}
	aïoli défaite abrègement désir dessécher dévot anthropoïde archaïque archaïsme aléa allégresse algèbre arachnoïde amèrement après arène amitié assèchement café céder céleri alcaloïde cicérone ambiguë androïde crémerie anéroïde crépi crépu abcès affrètement anthérozoïde
\end{document}

On obtient donc (sans surprise) ceci :

Sans inputenc ni fontenc
Sans inputenc ni fontenc

Aucun des caractères accentués n’est sorti, puisqu’ils ne peuvent même pas être lus par le compilateur !

Si on rajoute inputenc :

inputenc seulement
inputenc seulement

Le rendu est pas mal (tous les caractères sont correctement lus et affichés), mais la césure est catastrophique : le compilateur ne connaît pas les règles de césure pour les mot accentués. Et c’est, vous vous en doutez, fontenc qui va nous sortir de ce mauvais pas :

inputenc et fontenc
inputenc et fontenc

Le résultat semble maintenant parfait… de loin ! Car si on zoome :

Cachez cette police matricielle que je ne saurais voir !
Cachez cette police matricielle que je ne saurais voir !

 

On en revient à mon billet précédent sur les polices \LaTeX : le fait de charger fontenc remplace les polices par défaut par des fontes de type 3, c’est-à-dire non vectorielles.

Rétablissement des polices vectorielles

Pour retourner dans le droit chemin, vous  pouvez passer par le package ae ou bien utiliser les fontes modernes, voire les deux :

\usepackage{ae,lmodern}

Il est conseillé de charger lmodern avant fontenc

Conclusion

Votre préambule doit donc toujours avoir au moins :

\usepackage{ae,lmodern} % ou seulement l'un, ou l'autre, ou times etc.
\usepackage[francais]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
Mais à quoi bon servent les packages ‘fontenc’ et ‘inputenc’  ?
4.5 (90 %) 14 votes
  • iGor

    Merci pour ce billet très didactique. Je comprends mieux ce que je fais désormais. Mais j’utilise le package xunicode en m’inspirant de https://www.zotero.org/igor.m/items/collectionKey/S73WQ7Z8/itemKey/3JIAT9SQ

    Bonne fin de semaine !

  • Yvan

    Bonne explication pour un débutant !
    Cependant une incohérence apparaît dans votre article : vous stipulez  » Il est préférable de charger inputenc avant fontenc. » or dans l’exemple de code en fin d’article c’est l’inverse qui est mentionné….. 😉

    • Exact ! Merci pour cette remarque, c’est maintenant corrigé.
      Toutefois, renseignements pris, il semble que l’ordre n’importe plus beaucoup avec les version actuelles de (pdf)latex et inputenc [1].
      [1] http://tex.stackexchange.com/a/2867