SuivantPrec.Bas prec.BasNiv. sup.

7.3 Format du fichier mfj 

Ce fichier peut contenir des commentaires commençant par un `%', ce caractère et tous les suivants jusqu'à la fin de la ligne sont ignorés. Cependant, un `%' entre crochets `[' `]' ne commence pas un commentaire.

Voici, comme exemple, un petit fichier mfj:

 %
 % minimal.mfj
 %
 {
 font=cmr10;
 mag=1;
 mode=laserjet[300];
 output=pk[c:\texfonts\pixel.lj\@Rrdpi\@f];
 }
Ce fichier contient un bloc, qui commence par une accolade ouvrante et se termine par l'accolade fermante correspondante. Les déclarations (autres que les définitions de macro) ne peuvent apparaître que dans un bloc. Les blocs peuvent être imbriqués.

Une définition dans un bloc est sans effet en dehors de ce bloc mais est héritée par les blocs imbriqués dans celui-ci.

À la fin de chaque bloc qui ne contient pas de bloc imbriqué, la liste des fontes sélectionnées dans les bases respectives, dans les agrandissements sélectionnés et pour les périphériques sélectionnés, est établie, afin de créer les types de fichiers sélectionnés. La création de ces fontes commence après que le fichier mfj ait été lu. Si l'option /a n'est pas indiquée, seules les fontes qui n'existent pas déjà sont créées. S'il n'y a que le fichier log qui manque, la fonte ne sera pas créée.

Les déclarations possibles sont indiquées ci-dessous :

7.3.1 font= (ou fonts=) 

Donne la liste des noms de fontes qui doivent être calculées. Chaque nom doit être séparé du suivant par un blanc ou une fin de la ligne. Un point-virgule termine la liste. La déclaration font ajoute les fontes listées à l'ensemble des fontes à créer. Les noms de fontes peuvent inclure les caractères spéciaux suivants:

Le masque `cmr#', par exemple, représente les noms de fichiers cmr5.mf, cmr6.mf, cmr7.mf, cmr8.mf, cmr9.mf, cmr10.mf, cmr12.mf et cmr17.mf (et éventuellement d'autres). Le masque `cmr#0' ne correspond à aucun nom de fichier, parce que `#' fait sauter tous les chiffres consécutifs dans les noms de fichiers, et donc un 0 ne peut pas suivre un #.

7.3.2 mag= (ou mags=) 

Cette déclaration donne la liste des agrandissements sous lesquels les fontes doivent être créées. Les nombres doivent se trouver dans les limites 0.1 à 1000 et peuvent contenir un point décimal. Les pas d'agrandissements courants (magsteps) peuvent être abrégés en s0 (1.0), s1 (1.2), s2 (1.44) et ainsi de suite jusqu'à s9 (5.159780352). L'abréviation pour l'agrandissement 0.5 est sh (1.095445115). Chaque agrandissement doit être séparé du suivant par un espace, la liste se termine par un point-virgule. Cette déclaration ajoute la liste des agrandissements à ceux déjà déclarés.

7.3.3 mode= 

Déclare le périphérique auquel les fontes sont destinées. Le nom du mode (comme défini dans local.mf) est suivi de la résolution horizontale (en dpi) entre crochets. Si la résolution verticale diffère de la résolution horizontale, vous devez l'indiquer aussi, en la séparant de la résolution horizontale par un espace. La déclaration se termine par un point-virgule. Chaque bloc ne peut contenir qu'une seule déclaration de mode. Cependant des blocs peuvent être imbriqués.

7.3.4 output= 

Cette déclaration sélectionne les fichiers de sortie à créer et indique comment les nommer. Les types de fichiers de sortie suivants peuvent être créés:

pxlfichier pxl (créé par GFtoPXL).
pk fichier pk (créé par GFtoPK).
gf fichier gf (créé par Metafont).
log fichier log (créé par Metafont).
tfm fichier tfm (créé par Metafont).

Le modèle pour le nom de répertoire est placé entre crochets, et suit le type du fichier. Les séquences spéciales suivantes peuvent être utilisées dans le nom du répertoire:

@Rrla résolution de la fonte, en dpi (arrondie)
@f le nom de la fonte

S'il n'y a pas d'extension, les extensions usuelles (`pxl', `pk', `@Rrgf', `log', `tfm') seront utilisées. Chaque combinaison type de fichier/répertoire est séparée de la suivante par un espace, et la liste se termine par un point-virgule. Seuls les types de fichiers donnés dans cette déclaration seront créés, ou plus précisement, tous les fichiers tfm, gf et log non donnés dans une déclaration de sortie seront supprimés. La déclaration de sortie remplace les entrées précédentes, pour les types de fichiers séparés.

Exemple: La déclaration

 output=pk[c:\texfonts\pixel.lj\@Rrdpi\@f]
        log[c:\texfonts\log\@f];
avec font=cmr10, mode=laserjet[300] et mag=1.2 provoque la création des fichiers :
 c:\texfonts\pixel.lj\360dpi\cmr10.pk
 c:\texfonts\log\cmr10.log
Seule la première expansion de chaque modèle est utilisée. En conséquence, si vous voulez créer des fontes pk, la première expansion devrait donner un nom de fichier qui se termine par pk.

7.3.5 base= 

Sélectionne la base Metafont à utiliser pour la création des fontes qui la suivent. Les déclarations usuelles sont base=cm ou base=plain; au début du bloc le plus extérieur base=cm a été défini. La déclaration de la base remplace la déclaration précédente. La déclaration est suivie d'un point-virgule.

À la fin de tout bloc ne contenant pas un bloc imbriqué les fontes sélectionnées avec les bases sélectionnées dans les agrandissements sélectionnés pour le pilote sélectionné sont fixées pour créer les types de fichiers sélectionnés. La création de ces fontes commence dès que le fichier mfj a été lu. Si l'option /a n'est pas utilisée, seules les fontes sélectionnées qui n'existent pas déjà seront créées . S'il n'y a que le fichier log qui manque, la fonte ne sera pas créée.

7.3.6 big= 

Sélectionne la version big ou normale de Metafont. Si l'argument est `on', `yes' ou `y', big Metafont est choisi. Si l'argument est `off', `no' ou `n', la version standard est choisie. La valeur initiale est définie par l'option /b de la ligne de commande: la valeur initiale est `big=on' si /b est donnée, `big=off' sinon. Cette déclaration remplace la valeur précédente de `big' pour le bloc courant. La déclaration doit être suivie d'un point-virgule.

7.3.7 driver= 

Cette déclaration permet de choisir le pilote DVI. Cette valeur est utilisée uniquement pour remplacer @d dans les modèles. Elle n'a pas d'autre signification. La valeur initiale est vide. Cette déclaration remplace la valeur précédente de `driver' pour le loc courant. La déclaration doit être suivie par un point-virgule.

7.3.8 fontlib= (ou fontlibs=) 

Indique dans quelles librairies de fontes les recherches doivent être faites. Vous devez fournir un modèle entre crochets. L'extension par défait est `.fli'. Les librairies de fontes sont utilisées seulement pour trouver quelles fontes existent déjà. Aucune fonte ne sera copiée dans les librairies de fontes. La déclaration doit être suivie d'un point-virgule.

Exemple:

 fontlibs=[c:\texfonts\lj_{base,more}];

7.3.9 size= (ou sizes=) 

Cette déclaration liste les tailles (design size en pt) des fontes à créer. Elle est utilisée conjointement avec name= et command= pour les fontes pour lesquelles la design size peut être sélectionnée (voir command=). Les nombres doivent se trouver dans l'intervalle 1 à 10000 et peuvent contenir un point decimal. Chaque taille doit être séparée de la suivante par un espace, et la liste doit se terminer par un point-virgule. Cette déclaration ajoute la liste des tailles à celles qui sont déjà déclarées.

7.3.10 name= (ou names=) 

Cette déclaration définit comment construire le nom d'une fonte à créer, à partir du nom du nom du fichier mf et de la taille. Elle doit être utilisée conjointement avec les déclarations size= et command=pour les fontes qui disposent d'une design size séectionnable (voir command=). Vous devez fournir un modèle entre crochets. La première expansion sera utilisée pour les tailles entières, la seconde pour les tailles non-entières. S'il y a une seule expansion, elle sera utilisée pour toutes les tailles. @f sera remplacé par le nom du fichier mf (sans `.mf').

Exemple:

names=[@f@s,@f@Tsp@Fs]
font=dcr et size=10 fournit le nom `dcr10', font=dcr et size=7.5 fournit le nom `dcr7p5'.

7.3.11 command= (ou commands=) 

Si vous utilisez des fontes avec une design size sélectionnable, un fichier pilote doit être créé pour chaque paire fonte/taille. Celui-ci définit la design size souhaitée et appelle le fichier mf. commands= est utilisé pour spécifier ce qui sera écrit dans le fichier pilote. Vous devez fournir un modèle entre crochets. @f sera remplacé par le nom du fichier mf (sans `.mf').

Utilisez :

 commands=[design_size:=@s; input b-@f];
pour les fontes Sauter, et :
 commands=[gensize:=@s; generate @f];
pour les fontes dc/ec.

7.3.12 Exemple 

L'exemple suivant génère cmr10 et cmbx10 en fichiers pk aux agrandissements 1 et 1.2 pour les imprimantes HP LaserJet+ et Epson FX-80.

 %
 % example.mfj
 %
 {
 fonts=cmr10 cmbx10;
 mags=s0 s1;
   {
     mode=laserjet[300];
     output=pk[c:\texfonts\pixel.lj\@Rrdpi\@f];
   }
   {
     mode=epsonfx[240 216];
     output=pk[c:\texfonts\pixel.fx\@Rrdpi\@f];
   }
 }

7.3.13 Fichiers mfj imbriqués 

Des fichiers contenant des déclarations mfj peuvent être inclus avec la commande input [nom_de_fichier];

L'extension par défaut est .mfj.

7.3.14 Macros 

Des macros peuvent être définies soit sur la ligne de commande (voir ci-dessus) soit dans le fichier mfj avec les commandes

 def macro=[definition];
ou
 redef macro=[definition];
Si une macro est définie plus d'une fois, seule la première définition sera utilisée (celle de la ligne de commande, par exemple). Les macros peuvent être redéfinies avec redef auquel cas l'ancienne définition sera remplacée lorsqu'elle n'est plus utilisée. Par exemple:
 def x=[mag=2;redef x=[mag=4;];mag=3;x;mag=5];
 x;
ce qui se développe en: mag=2;mag=3;mag=4;mag=5

Les macros ne sont développées qu'en dehors des crochets ([...]). Comme celles qui contiennent des blancs ne peuvent être définies sur la ligne de commande, toute virgule dans la définition d'une macro sur la ligne de commande sera remplacée par des espaces.

Exemples:

 %
 % x.mfj
 %
 input [modes];
 def s=[1];
 def f=[cmr10];
   {
     fonts=f; mags=s; m;
   }
Le fichier suivant est fourni avec emTeX :
 %
 % modes.mfj
 %
 def target=[c:\newfonts];
 
 def lj= [mode_lj;  output_lj;  fli_lj;  tfmlog];
 def ljh=[mode_ljh; output_ljh; fli_ljh; tfmlog];
 def dj= [mode_dj;  output_dj;  fli_dj;  tfmlog];
 def fx= [mode_fx;  output_fx;  fli_fx;  tfmlog];
 def mx= [mode_mx;  output_mx;  fli_mx;  tfmlog];
 def sty=[mode_sty; output_sty; fli_sty; tfmlog];
 def lql=[mode_lql; output_lql; fli_lql; tfmlog];
 def lqm=[mode_lqm; output_lqm; fli_lqm; tfmlog];
 def lqh=[mode_lqh; output_lqh; fli_lqh; tfmlog];
 def ito=[mode_ito; output_ito; fli_ito; tfmlog];
 def FAX=[mode_FAX; output_FAX; fli_FAX; tfmlog];
 def qj= [mode_qj;  output_qj;  fli_qj;  tfmlog];
 def tj= [mode_tj;  output_tj;  fli_tj;  tfmlog];
 def bj= [mode_bj;  output_bj;  fli_bj;  tfmlog];
 
 def mode_lj= [mode=laserjet[300]];
 def mode_ljh=[mode=laserjetIV[600]];
 def mode_dj= [mode=deskjet[300]];
 def mode_fx= [mode=epsonfx[240 216]];
 def mode_mx= [mode=epsonmx[120 216]];
 def mode_sty=[mode=epsonsty[360]];
 def mode_lql=[mode=lqlores[180]];
 def mode_lqm=[mode=lqmedres[360 180]];
 def mode_lqh=[mode=lqhires[360]];
 def mode_ito=[mode=itoh[160 144]];
 def mode_FAX=[mode=fax[204 196]];
 def mode_qj= [mode=quietjet[192]];
 def mode_tj= [mode=thinkjet[192 96]];
 def mode_bj= [mode=canonbj[360]];
 
 def output_lj= [output=pk[$target>pixel.lj\@Rrdpi\@f]];
 def output_ljh=[output=pk[$target>pixel.ljh\@Rrdpi\@f]];
 def output_dj= [output=pk[$target>pixel.dj\@Rrdpi\@f]];
 def output_fx= [output=pk[$target>pixel.fx\@Rrdpi\@f]];
 def output_mx= [output=pk[$target>pixel.mx\@Rrdpi\@f]];
 def output_sty=[output=pk[$target>pixel.sty\@Rrdpi\@f]];
 def output_lql=[output=pk[$target>pixel.p6l\@Rrdpi\@f]];
 def output_lqm=[output=pk[$target>pixel.p6m\@Rrdpi\@f]];
 def output_lqh=[output=pk[$target>pixel.p6h\@Rrdpi\@f]];
 def output_ito=[output=pk[$target>pixel.ito\@Rrdpi\@f]];
 def output_FAX=[output=pk[$target>pixel.fax\@Rrdpi\@f]];
 def output_qj= [output=pk[$target>pixel.qj\@Rrdpi\@f]];
 def output_tj= [output=pk[$target>pixel.tj\@Rrdpi\@f]];
 def output_bj= [output=pk[$target>pixel.bj\@Rrdpi\@f]];
 
 def fli_lj= [fontlib=[$DVIDRVFONTS:lj_{base,more}]];
 def fli_ljh=[fontlib=[$DVIDRVFONTS:ljh_{base,more}]];
 def fli_dj= [fontlib=[$DVIDRVFONTS:dj_{base,more}]];
 def fli_fx= [fontlib=[$DVIDRVFONTS:fx_{base,more}]];
 def fli_mx= [fontlib=[$DVIDRVFONTS:mx_{base,more}]];
 def fli_sty=[fontlib=[$DVIDRVFONTS:sty_{base,more}]];
 def fli_lql=[fontlib=[$DVIDRVFONTS:p6l_{base,more}]];
 def fli_lqm=[fontlib=[$DVIDRVFONTS:p6m_{base,more}]];
 def fli_lqh=[fontlib=[$DVIDRVFONTS:p6h_{base,more}]];
 def fli_ito=[fontlib=[$DVIDRVFONTS:ito_{base,more}]];
 def fli_FAX=[fontlib=[$DVIDRVFONTS:fax_{base,more}]];
 def fli_qj= [fontlib=[$DVIDRVFONTS:qj_{base,more}]];
 def fli_tj= [fontlib=[$DVIDRVFONTS:tj_{base,more}]];
 def fli_bj= [fontlib=[$DVIDRVFONTS:bj_{base,more}]];
 
 def tfmlog=[output=tfm[$target>tfm\@f] log[$target>log\@f];];
 
 % Default mode
 def m=[lj];
Appel:
mfjob x s=s0,s1 f=cmbx10,cmti10 m=fx
Note: `fax' n'est pas la même chose que 'FAX'.

7.3.15 Raccourcis pour fonts=, mags= et sizes= 

Souvent, on ne souhaite pas créer toutes les fontes dans tous les agrandissments ou toutes les tailles. Dans ces cas, il faut taper quelque chose comme :

 {
 input [modes];
 mags=1 1.41421;     % 1 and \sqrt{2}
 name=[@f@Ts];
 commands=[gensize:=@s; generate @f];
 m;
     {font=dcr;  {sizes=5 6 7 8 9 10 12 17.28;}}
     {font=dcbx; {sizes=10 12 17.28;}}
     {font=dcsl; {sizes=10 12;}}
 }
Ceci peut être abrégé de la manière suivante :
 {
 input [modes];
 mags=1 1.41421;     % 1 and \sqrt{2}
 name=[@f@Ts];
 commands=[gensize:=@s; generate @f];
 m;
 font(sizes)=dcr  (5 6 7 8 9 10 12 17.28)
             dcbx (10 12 17.28) dcsl (10 12);
 }
La déclaration font(sizes) crée (en interne) exactement les blocs et les déclarations montrés dans le premier exemple. Par analogie, vous pouvez aussi utiliser size(fonts), font(mags), mag(fonts), size(mags), et mag(sizes). Par exemple, sizes(mags) liste les tailles, où chaque taille est suivie par une liste d'agrandissements entre parenthèses. Après une déclaration de ce type, seule une déclaration du même type ou des groupes appropriés peuvent suivre, jusqu'à ce que la fin du groupe soit atteinte.

7.3.16 Déclaration des règles pour des fontes de design size arbitraire 

Au lieu de définir explicitement des règles avec la déclaration size=, vous pouvez définir des règles pour traiter automatiquement des fontes qui ont un design size arbitraire. Ces règles sont appliquées si le fichier source d'une fonte n'est pas trouvé. Dans ce cas, MFjob essaie de découper le nom de fonte selon une règle donnée, dans un nom de base et une design size. S'il réussit, la fonte sera créée en utilisant les valeurs définies dans name= et command=. Chaque règle spécifie un masque pour les noms de fontes. Ces règles seront utilisées uniquement pour les noms de fontes qui correspondent. De plus, chaque règle contient des déclarations name= et command=. Une règle peut éventuellement contenir une déclaration base=.

rule= 

Une déclaration `rule' commence avec rule=, suivie par une liste de masques pour les noms de fontes. Les masques peuvent contenir les caractères spéciaux ?, * et # (voir font= pour les détails). Juste après la liste, vous devez taper une accolade ouvrante, suivie des déclarations name=, command= et base=, ou une déclaration `skip'. La déclaration base= peut être omise. La déclaration rule= doit être terminée par une accolade fermante. Par exemple:

 rule=dc* ec*     % DC and EC fonts
   {
   name = [@f@Ts];
   name_size = [@f17] 17.28;
   commands = [gensize:=@s; generate @f];
   base = dx;
   }
rule= ne peut pas être utilisée à l'intérieur d'un bloc.

name= 

Quand il est utilisé avec rule=, le modèle name= est quelque peu restreint, pour simplifier l'extraction du nom de base et de la design size. Vous pouvez utiliser seulement les paramètres @f et @s, chacun d'entre eux devant être utilisé exactement une fois (exception faite de @Fs et @Ts qui peuvent figurer ensemble dans un modèle). Seuls les caractères F et T sont autorisés, pour modifier un paramètre. Une spécification de largeur (width) est autorisée seulement pour @s. Elle spécifie la largeur exacte, pas une largeur minimum.

Si la déclaration donnée ci-dessus est utilisée simultanément avec

 font=dcr10;
MFjob appliquera la règle, à moins que dcr10.mf soit trouvé. Appliquer la règle a le même effet qu'utiliser d'une part les déclarations name= et command= de la règle, et utiliser d'autre part les déclarations
 base=dx; font=dcr; size=10;
au lieur de font=dcr10.

Un autre exemple : la déclaration

 name=[@f@T2.2s@F.2s];
dans une règle forcera MFjob à traiter
 font=dcr1728;
comme
 font=dcr; size=17.28;
si dcr1728.mf n'est pas trouvé.

name_size= 

Cette déclaration définit les exceptions par rapport aux propriétés définies par name=, et qui sont utilisées dans les règles. Pour certaines fontes, la taille ne peut pas être déduite directement à partir du nom de la fonte. Par exemple, la taille de dcr17 est 17.28, pas 17. Pour indiquer cette exception à MFjob, utilisez :

 name_size=[@f17] 17.28;
La déclaration name_size= prend des paires de modèles et de tailles comme arguments. Vous pouvez donner une ou plusieurs paires. Si un des modèles correspond à un nom de fonte, le caractères qui correspondent à `@f' seront pris comme nom du fichier mf, la taille associée au modèle correspondant sera prise comme taille de la fonte. Seuls les modèles simples peuvent être utilisés avec name_size=. Une seule séquence spéciale, @f, est autorisée. De plus, le premier caractère après `@f' ne doit pas être une lettre.

name_size= peut être utilisé seulement avec des règles. Voir dvidrv.mfj pour un exemple.

name_size= n'est pas utilisé pour construire un nom de fonte à partir du nom d'un fichier mf et d'une taille.

skip 

Si la déclaration `skip' est utilisée, toutes les fontes qui correspondent sont sautées (c'est-à-dire ne sont pas créées) à moins qu'un fichier d'entrée mf soit trouvé (si un fichier d'entrée est trouvé pour une fonte, aucune règle n'est prise en compte). La déclaration `skip' doit être terminée par un point-virgule. Par exemple :

 rule=p* r*   % Skip PostScript fonts
  {skip;}
SuivantPrec.Bas prec.HautNiv. sup.