Qu’est-ce que MetaFont ?¶
Todo
Finir cette introduction.
Historique¶
MetaFont est un langage de programmation permettant de générer des fontes de caractères. Il fut créé par le mathématicien et informaticien Donald Knuth en 1977 en même temps que TeX, un logiciel de composition de documents depuis utilisé par une majeure partie de la communauté scientifique internationale.
See also
Principe de fonctionnement¶
Jusqu’au XXe siècle, les poinçons des caractères étaient réalisés dans des moules. Les centaines de moules d’une fonte n’étaient toutefois créés qu’après de longues étapes de calculs et dessins.
Qu’elle soit donc réalisée avec ou sans MetaFont, une fonte de caractères doit une grande partie de sa lisibilité à l’uniformisation entre ses caractères. En effet, une fonte dont le « e » n’aurait pas la même taille que le « a » pourrait vite devenir illisible.
Voici quelques uniformisations indispensables :
- forme
- hauteur
- épaisseur
- inclinaison (pour l’italique)
- diamètre des empattements
MetaFont propose une solution simple pour effectuer proprement ces uniformisations. L’idée est de considérer chacune des contraintes citées précédemment comme une variable. Ces variables peuvent être liées entre elles par des équations plus ou moins complexes. Cela permet de générer des fontes de différentes tailles (12, 14, 16, 18 points, etc), différents poids (léger, normal, semi-gras, gras, etc), différentes densités (condensé, normal, etc)...
- Exemple simple :
- Pour plus de lisibilité, on souhaite que les tailles les plus petites de la fonte aient des caractères proportionnellement plus épais. Il faut donc créer une équation qui liera la taille à l’épaisseur, du type :
C’est là la grande force de MetaFont. On ne conserve pas uniquement le rendu final ou même le résultat des nombreux calculs de fonte. On ne conserve que les équations ayant permis de mettre au point la fonte. MetaFont se charge de trouver les solutions des équations puis d’en faire une fonte utilisable.
À tout moment, on dispose donc du code source de la fonte. Ainsi, si on désire réduire l’inclinaison de l’italique, il suffit de changer un seul paramètre pour que le changement s’effectue sur tous les caractères de la fonte.
Forces et faiblesses¶
Forces: |
|
---|---|
Faiblesses: |
|
Exemples de fontes¶
- Computer Modern de TeX
- Feta de LilyPond
Conversions¶
MetaFont → images matricielles¶
La compilation
d’un code source de syntaxe MetaFont à l’aide du programme MetaFont
(dont la commande est mf
) permet d’obtenir une fonte TeX.
Hélas, MetaFont et TeX datent d’une époque où les imprimantes vectorielles
n’existaient pas.
Le format de sortie est donc
matriciel et non
vectoriel.
La fonte TeX obtenue (extension .2602gf
) n’est pas directement lisible.
Pour l’ouvrir, avec evince par exemple, on la convertit avec gftodvi
.
MetaFont → OpenType¶
La création d’une fonte OpenType à l’aide de MetaFont n’est hélas pas simple. Elle comporte de nombreuses étapes intermédiaires. Heureusement, quelques programmes permettent de simplifier ce travail :
- METATYPE1 (documentation), script Perl par l’équipe polonaise JNS
- mf2pt1, script Perl par Scott Pakin
- mftrace, script Python par le créateur de LilyPond, Han-Wen Nienhuys
Le point commun de ces scripts est l’utilisation de MetaPost. MetaPost permet en effet de créer des dessins vectoriels à partir d’un code presque identique à MetaFont.
Le plus simple à utiliser est mf2pt1, c’est pourquoi je l’utiliserai tout au long de cette documentation. De plus, le projet LilyPond, pour lequel fut créé mftrace, utilise désormais ce script. LilyPond étant à ma connaissance le dernier projet utilisant MetaFont, il me paraît d’autant plus utile d’utiliser mf2pt1.
mf2pt1 génère une fonte au format PFB. Elle est directement utilisable sous Linux, mais pour des raisons de compatibilité et de possibilités, une conversion vers OpenType est indispensable. Elle peut être facilement effectuée avec FontForge.
Warning
mf2pt1 ne gère pas toutes les possibilités de MetaFont.
Hélas il gère mal les penstroke
et comporte par ailleurs
quelques bugs.