Comme promis....
2 parties : les polices sous LaTeX de manière générale et le cas des polices TrueType.
Il serait peut-être bien de faire un lien sur ce post dès la 1ère page, non ?
Les polices sous LaTeX
Il faut savoir qu'une distribution LaTeX propose de base un certain nombre de polices. Pour conserver une homogénéité dans l’allure des caractères dans un document LaTeX, sont définies trois familles :
1. la famille roman
2. la famille sans sérif
3. et la famille machine à écrire, également appellée "typewriter".
Ainsi la célèbre police Computer Modern se décline dans ces 3 familles.
Dans toutes les distributions qui se respectent, vous trouverez le package "times" qui utilise :
1. Times pour la famille roman
2. Helvetica la famille sans sérif
3. et Courier pour la famille machine à écrire.
et vous aurez aussi le package "newcent" qui lui utilise :
1. NewCentury pour la famille roman
2. AvantGarde la famille sans sérif
3. et Courier pour la famille machine à écrire.
Il existe aussi les packages "mathptmx", "mathpazo"...
Ces polices, ainsi qu'un grand nombre d'autres, peuvent être appelées ponctuellement sans charger les packages. Voici une petite liste :
- cmr : computer modern roman
- cmss : computer modern sans sérif
- cmtt : coputer modern typewriter
- cmfib : computer modern fibonacci
- cmfr : computer modern funny roman
- cmdh : computer modern dunhil
- ccr : concrete fonts
- ygoth : gothique
- yfrak : fraktur
- yswab : schwabacher
- ptm : times
- ppl : palatino
- bch : charter
- pnc : new century
- pbk : bookman
- phv : helvetica
- pag : avantgarde
- pcr : courier
- pzc : zapf chancery
Pour les appeler sans charger les pakcages, il y a 2 méthodes. La 1ère est celle qu'utilise justement les packages. Il s'agit de remplacer les polices roman et/ou sans sérif et/ou typewriter pour tout le document en tapant par exemple :
- pour choisir New Century comme police roman
\renewcommand{\rmdefault}{pnc} |
- pour choisir AvantGarde comme police sans sérif
\renewcommand{\sfdefault}{pag} |
- pour choisir Courier comme police typewriter
\renewcommand{\ttdefault}{pcr} |
Cet exemple est ce que fait le package "newcent". Il vous suffit de placer ce genre de commande dans le préambule de votre document avec la police de votre choix, sachant que par défaut, ce sont les variantes Computer Modern qui sont logiquement chargées.
La 2e méthode consite à appliquer la police uniquement pour un passage de votre document. La syntaxe est la suivante :
{\fontfamily{ppl}\selectfont mon texte en Palatino} |
, sachant qu'on peut utiliser plus d'options que le simple changement de police dans ce cas (
pour le codage,
avec comme argument la famille,
pour préciser la graisse,
pour l’allure de la police,
pour la taille...)
Ces polices utilisent :
– un codage qui sera à quelques exceptions près le codage T1
– une série de caractères identifiant la famille : cmr pour "computer modern roman", ptm pour "PostScript times", etc.
– une série de caractères désignant la "graisse" de la police, m pour "médium", b pour "bold" (gras), bx pour "bold extended" (gras étendu, c’est-à-dire gras avec des caractères plus larges), etc.
– une série de caractères définissant l’allure (shape en anglais) de la fonte : n pour "normal", it pour "italique", sl pour "slanted" (penché), etc.
Vous trouverez les fichiers de ces polices dans
et les packages associés dans
. Les types de fichiers que pouvez observer sont :
- afm : métriques Adobe de la police
- enc : fichier décrivant le codage d'une police
- gf : police au format bitmap non compressé
- mf : fichier source d'une police vectorielle au format Metafont
- pfa : police PostScript (ou Adobe) Type1 au format ASCII
- pfb : police PostScript (ou Adobe) Type1 au format binaire
- pfm : métiques PostScript de la police
- pk : police au format bitmap compressé
- tfm : métriques de la police (métriques les plus utilisées)
- ttf : police TrueType
- vf : police virtuelle
- vpl : "virtual property list" (version lisible de vf)
Les polices déjà intégrées à LaTeX ont des éléments dans tous ces formats. Les appels sont gérés par des fichiers *.fd dans
Les polices TrueType :
On a déjà pas mal de polices à notre disposition, mais que puis-je faire si je veux la police Arial dans mon document ? Il existe un package "uarial" dispo sur le CTAN ou directement intégré à la distribution MiKTeX (la seule je crois qui l'a de base).
Une solution est de "bricoler" la police Arial disponible au format TrueType dans Windows par exemple pour pouvoir l'utiliser dans LaTeX.
Il existe quelques tutoriels sur la toile comme http://www.radamir.com/tex/ttf-tex.htm ou encore http://zoonek.free.fr/LaTeX/Fontes/fontes.html#8. Ils sont relativement bien décrits, mais le gros reproche est que nous sommes bien souvent dans l'obligation de choisir entre des compilations dvips ou pdflatex. De plus, le résultat en terme de crénage par exemple est assez difficile à obtenir de manière clair... Quels sont les problèmes que l'on peut rencontrer en utilisant ces méthodes ?
- à la compilation dvips, les problèmes de crénages sont résolus, mais quand on fait un ps2pdf, on se retrouve avec des polices PK (bitmap donc) ce qui enlève tout l'intérêt du PDF car elles sont pixélisées.
- à la compilation pdflatex directe, ce sont les polices TrueType qui sont directement intégrées dans le fichier PDF (à observer dans les propriétes du fichier, ce sont les fontes "embedded" ), mais la version TrueType n'autorise pas dans ce cas les caractères spéciaux et surtout ne corrige pas le problème de crénage (voir http://zoonek.free.fr/LaTeX/Fontes/fontes.html pour l'explication du crénage; en 2 mots, c'est la gestion élégante des caractères, comme pour les suites de caractères fi, fl, ff, ffl, ffi ou encore les barres du V et des A dans AVAL).
L'idéal serait de pouvoir avoir des polices jolies que ce soit via dvips/ps2pdf ou pdflatex. Quand vous observez les polices "embarquées" dans les fichiers PDF avec les polices Computer Modern, vous constatez qu'elles sont au format Type1, que l'on passe par dvips/ps2pdf ou pdflatex. L'idée est donc de trouver un processus permettant de construire toute l'arborescence de fichiers autorisant ça.
Je vous propose une technique qui marche pas mal chez moi. Je prends pour exemple la police Arial, mais vous pouvez décliner à toutes les polices TrueTYpe de Windows (je l'ai fait pour la Times New Roman, la Courier New, la Verdana...). A une exception près, votre distribution LaTeX doit disposer de tous les binaires nécessaires (sauf peut-être TeTeX qui est assez light comme distribution)
1. Récupération des polices TrueTupe :
On les trouves dans
sous WinXP,
sous Win2k ou encore quelquechose comme
sous Linux (mais il y a moins de choix sous Linux). Pour mon exemple, je prends :
- arial.ttf : Arial droite
- ariali.ttf : Arial italique
- arialbd.ttf : Arial grasse
- arialbi.ttf : Arial grasse italique
2. L'identifiant et la copie des TrueType :
Je choisis un nom de 3 lettres qui sera la nom d'appel et la base des noms de tous les fichiers. Attention aux noms déjà existants !!! Ici, je prends par exemple "arl". Et je renomme mes fichiers ttf (étape pas forcément nécessaire, mais au moins on ne se perd pas) :
- arial.ttf --> arlr8a.ttf
- ariali.ttf --> arlri8a.ttf
- arialbd.ttf --> arlb8a.ttf
- arialbi.ttf --> arlbi8a.ttf
Notez bien la construction de ces noms : ***r8a.ttf, ***ri8a.ttf, ***b8a.ttf, ***bi8a.ttf, on gardera la même logique jusqu'à bout (le "a" pour changer).
3. Transformation au format Type1 :
Je transforme les fichiers ttf en polices Type1 (pfa et pfb). Pour cela j'utilise le binaire "ttf2pt1", le seul non disponible dans les distributions. Vous le trouverez ici http://ttf2pt1.sourceforge.net/. Il suffit de placer correctement le binaire et ses fichiers associés dans l'arborescence de votre distribution (pas dans le texmf local!!). Ca marche très bien avec MiKTeX sous Windows, et sous mon openSUSE 10.2, un package Linux le propose directement... Ceci fait, on tape les commandes :
Citation :
ttf2pt1 -p ft -a -e arlr8a.ttf arlr8a (pour créer le fichier arlr8a.pfa)
ttf2pt1 -p ft -a -b arlr8a.ttf arlr8a (pour créer le fichier arlr8a.pfb)
|
Il faut faire de même avec arlri8a.ttf, arlb8a.ttf et arlbi8a.ttf en respectant les noms, soit :
Citation :
ttf2pt1 -p ft -a -e arlri8a.ttf arlri8a
ttf2pt1 -p ft -a -b arlri8a.ttf arlri8a
ttf2pt1 -p ft -a -e arlb8a.ttf arlb8a
ttf2pt1 -p ft -a -b arlb8a.ttf arlb8a
ttf2pt1 -p ft -a -e arlbi8a.ttf arlbi8a
ttf2pt1 -p ft -a -b arlbi8a.ttf arlbi8a
|
4. utilisation du package "fontinst" :
On utilise ici le package "fontinst.sty" directment en ligne de commande. C'est cette étape qui va créer automatiquement l'essentiel des fichiers nécessaires. Tapez la commande dans une invite de commande DOS ou dans un Terminal sous Linux:
Citation :
latex fontinst.sty
|
LaTeX va lancer une compilation en invite de commandes. Dès que le prompt s'affiche, cela signifie que LaTeX attent une instruction. Tapez alors dans ce prompt:
Citation :
\latinfamily{arl}{}\bye
|
et laisser tourner. Ici j'ai pris "arl" comme argument, car c'est l'identifiant que j'ai choisi, à vous d'adapter selon votre choix, mais vous devez être cohérents, sinon plantage. Une grosse quantité de fichiers seront créés dans votre répertoire de travail, ne vous perdez pas et surtout n'effacez rien ici. Vous allez avoir des fichiers *.pl, *.vpl, *.mtx, *.afm et *.fd. Les fichiers *.fd consituent la gestion des appels que vous pourrez faire dans votre document LaTeX, mais on y reviendra plus tard. Sachez aussi que vous n'êtes pas obligés de disposer de toutes les déclinaisons de la police (droite, italique, grasse et grasse itlaique). "fontinst" fera avec ce qu'il trouvera et c'est dans les fichiers *.fd que seront gérés les appels de remplacement (cf plus loin).
5. Métriques et polices virtuelles :
Maintenant, il vous faut créer les métriques tfm et les polices virtuelles vf. Pour cela et pour chaque fichier *.pl, tapez:
Citation :
pltotf nom_fichier.pl nom_fichier.tfm
|
en respectant les noms!! Seuls les extensions doivent changer. Pour les fichiers *.vpl, tapez:
Citation :
vptovf nom_fichier.vpl nom_fichier.vf
|
C'est long car les fichiers sont très très nombreux. Je ne saurais trop vous conseiller d'écrire des scripts en shell (pour Linux) ou batch (pour Windows), sinon, vous allez vite en avoir marre, et vous risquez d'oublier l'un ou l'autre fichier.
6. Arborescence :
Ici, on trie les fichiers. Tout d'abord, on efface les fichiers *.vpl, *.pl et *.mtx. On n'en a plus besoin. Ensuite, on va tout placer dans le localtexmf (pour Windows), ou
(pour Linux). Vous pouvez aussi tout placer dans l'arborescence de la distribtion, mais je ne le conseille pas, c'est un tel bordel de fichiers que je ne m'y retouve pas avec mes propres créations. Dans mon exemple, je place (le "ms" est pour Microsoft, mais c'est un choix perso):
- les fichiers afm dans
~/texmf/fonts/afm/ms/arial |
- les fichiers tfm dans
~/texmf/fonts/tfm/ms/arial |
- les fichiers ttf dans
~/texmf/fonts/truetype/ms/arial |
- les fichiers pfa et pfb dans
~/texmf/fonts/type1/ms/arial |
- les fichiers vf dans
~/texmf/fonts/vf/ms/arial |
- les fichiers fd dans
~/texmf/tex/latex/ms/arial |
7. Mapping :
Il faut encore compléter le mapping des polices. Depuis qques temps maintenant, c'est l'outil updmap qui gère ça. Il vous faut créer un fichier de mapping, par exemple "winfonts.map". Personnelement, je le place dans
~/texmf/fonts/map/dvips/ms/ |
. Ce fichier contient le mapping suivant pour mon exemple:
Citation :
arlr8r ArialMT " TeXBase1Encoding ReEncodeFont " <8r.enc <arlr8a.pfb
arlri8r Arial-ItalicMT " TeXBase1Encoding ReEncodeFont " <8r.enc <arlri8a.pfb
arlb8r Arial-BoldMT " TeXBase1Encoding ReEncodeFont " <8r.enc <arlb8a.pfb
arlbi8r Arial-BoldItalicMT " TeXBase1Encoding ReEncodeFont " <8r.enc <arlbi8a.pfb
|
Vous constatez ici la correspondance de nom. Pour créer ces lignes, vous pouvez le faire à la main, mais sinon, il est bon de s'aider des binaires ttf2afm et afm2tfm. Ces binaires sont prévus pour faire des conversions de polices. On ne les utilise pas pour ça ici puisqu'on a utilisé ttf2pt1 et le package "fontinst.sty". Mais on peut les utiliser pour créer des commandes de mapping. Ainsi:
Citation :
ttf2afm -e 8r.enc -o arlr8a.afm arlr8a.ttf
afm2tfm arlr8a.afm -T 8r.enc arlr8r.tfm >> winfonts.map
|
qui donne la ligne:
Citation :
arlr8r ArialMT " TeXBase1Encoding ReEncodeFont " <8r.enc
|
Il suffit de compléter la ligne dans winfonts.map pour obtenir:
Citation :
arlr8r ArialMT " TeXBase1Encoding ReEncodeFont " <8r.enc <arlr8a.pfb
|
Attention, le fichier d'encodage 8r.enc, que vous trouverez dans l'arborescence de votre distribution, doit être présent dans votre répertoire de travail. Attention aussi à ne pas pourrir vos autres fichiers de travail. Une possiblité est de faire cette étape pendant l'étape 2 plus haut et de virer les fichiers afm et tfm issus de ces commandes. Ces fichiers seront recréés proprement à l'étape 4.
Pour activer le mapping:
=> avec MiKTeX 2.6: il faut d'apport rafraîchir les paths, puis taper
initexmf --edit-config-file updmap |
pour ouvrir le fichier updmap.cfg. Dans ce fichier, ajoutez la ligne "Map winfonts.map", sauvez et quitez. Puis tapez la commande
pour lancer la mise à jour du mapping.
=> avec TeXlive2007 sous Linux, il suffit de taper
ou
. Ca met à jour les paths, mais aussi le mapping. Attention toutefois à bien gérer les texmf locaux... sinon, ça marche po...
Vous pouvez vérifier le mapping. Pour cela, vous devez retrouver les lignes de winfonts.map dans les fichiers psfonts.map de dvips et pdftex. Si ce n'est pas le cas, le mapping a planté.
8. Personnalisation des fichiers *.fd :
Vous avez 4 fichiers créés. Dans mon exemple on a 8rarl.df, ot1arl.fd, ts1arl.fd et t1arl.fd. C'est ce dernier qui nous intéresse, puisque l'on travaille la plupart du temps en codage T1 (vérifez le préambule de vos documents, vous trouverez sans doute \usepackage[T1]{inputenc}).
Voici ce qu'on a dans t1arl.fd:
Citation :
%Filename: t1arl.fd
%Created by: tex fontinst
%Created using fontinst v1.928
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{t1arl.fd}
[2007/10/22 Fontinst v1.928 font definitions for T1/arl.]
\DeclareFontFamily{T1}{arl}{}
\DeclareFontShape{T1}{arl}{m}{n}{<-> arlr8t}{}
\DeclareFontShape{T1}{arl}{m}{sc}{<-> arlrc8t}{}
\DeclareFontShape{T1}{arl}{m}{sl}{<-> arlro8t}{}
\DeclareFontShape{T1}{arl}{m}{it}{<-> arlri8t}{}
\DeclareFontShape{T1}{arl}{b}{n}{<-> arlb8t}{}
\DeclareFontShape{T1}{arl}{b}{sc}{<-> arlbc8t}{}
\DeclareFontShape{T1}{arl}{b}{sl}{<-> arlbo8t}{}
\DeclareFontShape{T1}{arl}{b}{it}{<-> arlbi8t}{}
\DeclareFontShape{T1}{arl}{bx}{n}{<->ssub * arl/b/n}{}
\DeclareFontShape{T1}{arl}{bx}{sc}{<->ssub * arl/b/sc}{}
\DeclareFontShape{T1}{arl}{bx}{sl}{<->ssub * arl/b/sl}{}
\DeclareFontShape{T1}{arl}{bx}{it}{<->ssub * arl/b/it}{}
\endinput
|
Cela indique comment seront gérés les appels de la polices (droite, grasse, italique, small caps, slanted....). Cela gère aussi les cas qui n'existent pas par remplacement comme ici les cas "bx" remplacés par les cas "b". Il vous faut savoir que vous pouvez créer des polices mêmes sans avoir toutes les déclinaisons en TrueType. Ainsi l'Arial Black n'existe que droite et italique et on a (selon ma création):
Citation :
%Filename: t1ark.fd
%Created by: tex fontinst
%Created using fontinst v1.928
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{t1ark.fd}
[2007/10/22 Fontinst v1.928 font definitions for T1/ark.]
\DeclareFontFamily{T1}{ark}{}
\DeclareFontShape{T1}{ark}{m}{n}{<-> arkr8t}{}
\DeclareFontShape{T1}{ark}{m}{sc}{<-> arkrc8t}{}
\DeclareFontShape{T1}{ark}{m}{sl}{<-> arkro8t}{}
\DeclareFontShape{T1}{ark}{m}{it}{<-> arkri8t}{}
\DeclareFontShape{T1}{ark}{b}{n}{<->ssub * ark/m/n}{}
\DeclareFontShape{T1}{ark}{b}{sc}{<->ssub * ark/m/sc}{}
\DeclareFontShape{T1}{ark}{b}{sl}{<->ssub * ark/m/sl}{}
\DeclareFontShape{T1}{ark}{b}{it}{<->ssub * ark/m/it}{}
\DeclareFontShape{T1}{ark}{bx}{n}{<->ssub * ark/m/n}{}
\DeclareFontShape{T1}{ark}{bx}{sc}{<->ssub * ark/m/sc}{}
\DeclareFontShape{T1}{ark}{bx}{sl}{<->ssub * ark/m/sl}{}
\DeclareFontShape{T1}{ark}{bx}{it}{<->ssub * ark/m/it}{}
\endinput
|
Vous constatez que la version grasse n'est donc pas explicitement créée. Elle est remplacée ici par la version droite. Vous avez toute liberté dans ces appels.
Aisni, vous aurez sans doutes des problèmes avec les polices "slanted" (penchées), il est intéressant de les remplacer par la version italique de la police :
Citation :
\DeclareFontShape{T1}{arl}{m}{sl}{<-> arlri8t}{}
\DeclareFontShape{T1}{arl}{b}{sl}{<-> arlbi8t}{}
|
Vous pouvez faire le même genre de manipulations dans les autres fichiers *.fd
9. Utilisation :
- pour choisir Arial comme police roman
\renewcommand{\rmdefault}{arl} |
- pour choisir Arial comme police sans sérif
\renewcommand{\sfdefault}{arl} |
- pour choisir Arial comme police typewriter
\renewcommand{\ttdefault}{arl} |
- ou encore
{\fontfamily{arl}\selectfont mon texte en Arial} |
10. Redimensionnement (optionnel) :
Vous constaterez sans doute que les nouvelles polices issues du format TrueType sont un poil plus grandes que les autres polices de LaTeX. Une technique consiste à créer un package de redimensionnement. Pour cela, je me suis inspiré du package "uarial". Par exemple vous pouvez créer dans le même répertoire de vos fichiers *.fd, le package "msarial.sty":
Citation :
\ProvidesPackage{msarial}
\RequirePackage{keyval}
\define@key{ArL}{scaled}[.95]{%
\expandafter\def\csname arl@Scale\endcsname{#1}}
\def\ProcessOptionsWithKV#1{%
\let\@tempc\relax
\let\ArL@tempa\@empty
\ifx\@classoptionslist\relax\else
\@for\CurrentOption:=\@classoptionslist\do{%
\@ifundefined{KV@#1@\CurrentOption}%
{}%
{%
\edef\ArL@tempa{\ArL@tempa,\CurrentOption,}%
\@expandtwoargs\@removeelement\CurrentOption
\@unusedoptionlist\@unusedoptionlist
}%
}%
\fi
\edef\ArL@tempa{%
\noexpand\setkeys{#1}{%
\ArL@tempa\@ptionlist{\@currname.\@currext}%
}%
}%
\ArL@tempa
\let\CurrentOption\@empty
}
\ProcessOptionsWithKV{ArL}
\AtEndOfPackage{%
\let\@unprocessedoptions\relax
}
\endinput
|
et modifier vos fichiers *.fd en conséquence de la manière suivante (par exemple pour t1arl.fd):
Citation :
\ProvidesFile{t1arl.fd}
[2007/10/22 Fontinst v1.928 font definitions for T1/arl.]
\expandafter\ifx\csname arl@Scale\endcsname\relax
\let\arL@@Scale\@empty
\else
\edef\arL@@Scale{s*[\csname arl@Scale\endcsname]}%
\fi
\DeclareFontFamily{T1}{arl}{}
\DeclareFontShape{T1}{arl}{m}{n}{<-> \arL@@Scale arlr8t}{}
\DeclareFontShape{T1}{arl}{m}{sc}{<-> \arL@@Scale arlrc8t}{}
%\DeclareFontShape{T1}{arl}{m}{sl}{<-> \arL@@Scale arlro8t}{}
\DeclareFontShape{T1}{arl}{m}{sl}{<-> \arL@@Scale arlri8t}{}
\DeclareFontShape{T1}{arl}{m}{it}{<-> \arL@@Scale arlri8t}{}
\DeclareFontShape{T1}{arl}{b}{n}{<-> \arL@@Scale arlb8t}{}
\DeclareFontShape{T1}{arl}{b}{sc}{<-> \arL@@Scale arlbc8t}{}
%\DeclareFontShape{T1}{arl}{b}{sl}{<-> \arL@@Scale arlbo8t}{}
\DeclareFontShape{T1}{arl}{b}{sl}{<-> \arL@@Scale arlbi8t}{}
\DeclareFontShape{T1}{arl}{b}{it}{<-> \arL@@Scale arlbi8t}{}
\DeclareFontShape{T1}{arl}{bx}{n}{<->ssub * arl/b/n}{}
\DeclareFontShape{T1}{arl}{bx}{sc}{<->ssub * arl/b/sc}{}
\DeclareFontShape{T1}{arl}{bx}{sl}{<->ssub * arl/b/sl}{}
\DeclareFontShape{T1}{arl}{bx}{it}{<->ssub * arl/b/it}{}
\endinput
|
Pour autoriser le redimensionnement, il vous suffira d'ajouter dans le préambule de votre document avant tout appel de la police "arl" (pour cet exemple):
Citation :
\usepackage[scaled=0.9]{msarial}
|
pour un redimensionnement de facteur 0.9. Des facteurs de 0.9 et 0.95 semblent de bons compromis. Tous les appels "arl" du document seront impactés. L'utilisation d'un tel package n'est pas obligatoire. Et si vous décidez de le créer et donc de modifier les fichiers *.fd, ceux-ci seront fonctionnels même sans l'appel du package.
Vous pouvez intégrer ça dans d'autres packages ou classes par la commande:
Citation :
\RequirePackage[scaled=0.9]{msarial}
|
Voilà, bonne utilisation et désolé pour les fautes de frappes sans doute nombreuses...
Message édité par pulsar68 le 31-10-2007 à 14:14:04