SuivantPrec.Bas prec.BasNiv. sup.

7.4 Modèles 

Les modèles sont utilisés pour dire à MFjob comment construire un nom de fichier (ou comment construire des commandes Metafont) à partir de paramètres donnés, tels que la taille et le nom d'une fonte. Le modèle peut être une constante, lorsque le nom de fichier ne dépend d'aucun des paramètres, ou il peut correspondre à plusieurs noms de fichiers. Dans ce cas, les noms seront utilisés successivement. Le calcul des valeurs d'un modèle est appelé le développement du modèle.

La déclaration fontlib=, par exemple, dit à MFjob de faire des recherches dans toutes les librairies de fontes données par tous les développements du modèle.

Un modèle qui n'est pas constant contiendra un ou plusieurs caractères modèles. Les caractères modèles autorisés sont la virgule (,) les signes dollar ($) et a commercial (@), et les accolades ouvrante et fermante ({}). Un modèle qui contient un signe dollar ou une virgule peut se développer dans plus d'un nom de fichier. Si les caractères modèles doivent apparaître comme des caractères littéraux, alors ils doivent être précédés par le signe @. Par exemple, un signe dollar littéral doit être écrit `@$'.

7.4.1 L'exemple le plus simple de modèle : un modèle constant 

Soit le modèle :

\texfonts\lj
Lorsqu'il est utilisé avec la déclaration fontlib=, ce modèle contient simplement le nom de fichier : le développement ne dépend d'aucun paramètre, et consiste juste en ce nom de fichier (la déclaration fontlib= ajoute automatiquement `.fli' à la fin du nom, si le développement ne contient pas d'extension).

7.4.2 Un exemple simple de modèle 

Soit le modèle :

\texfonts\@f
Lorsqu'il est utilisé avec la déclaration output=, `@f' est remplacé par le nom de la fonte. Si la fonte `cmr10' est calculée, le développement de ce modèle sera \texfonts\cmr10. `.pxl', `.pk', `.gf', `.log' ou `.tfm' (selon les détails de la déclaration output=) sera ajouté si, comme dans cet exemple, aucune extension n'est indiquée.

7.4.3 Paramètres de modèles 

La liste des paramètres de modèles est indiquée dans la table ci-dessous. Lorsqu'un de ces paramètres modèles apparaît dans un modèle, il est remplacé par la valeur donnée dans cette table.

@dnom de pilote, cf. la déclaration driver=.
@f nom de fonte, cf. les déclarations font= et name=
@p magstep (0..9, h, u1 ), cf. la déclaration mag=
@m mode Metafont, cf. la déclaration mode=
@b résolution de base, cf. la déclaration mode= (entier, arrondi)
@r résolution de la fonte (nombre décimal), calculée à partir des déclarations mode= et mag=.
@s taille de la fonte (design size) en points (pt), cf. la déclaration size=.
@g agrandissement (nombre décimal), cf. la déclaration mag=

Ces paramètres peuvent être modifiés en insérant un ou plusieurs caractères entre le `@' et la lettre du paramètre. Les modificateurs et les paramètres avec lesquels ils peuvent être utilisés, sont décrits plus loin. Les anciennes versions de MFjob utilisaient `$' au lieu de `@' pour insérer des paramètres : `$r' doit être remplacépar `@Rr', `$s' doit être remplacé par `@RVr'.

7.4.4 Former des développements multiples avec une liste 

Certaines déclarations requièrent une liste de fichiers. Par exemple, la déclaration fontlib= requiert une liste de librairies de fontes. La façon la plus simple de réaliser une telle liste est d'entrer la liste des noms séparés par une virgule. Mais ce n'est pas toujours très commode, parce que cela nécessite beaucoup de frappes, et la longueur d'un modèle est limitée à 127 caractères. À cause de cette limitation, l'exemple ci-dessous ne contient pas l'ensemble habituel des librairies de fontes :

 fontlib=[c:\texfonts\fx_base,c:\texfonts\fx_more]
Les espaces ne sont pas autorisés dans les modèles.

7.4.5 Former des développements multiples avec des alternatives 

Il est clair à partir de l'exemple précédent que les développements ont toute une partie de texte en commun. Les modèles permettent d'extraire les parties communes, en écrivant simplement les parties qui diffèrent comme une suite d'alternatives placées entre accolades. L'exemple ci-dessus peut ainsi être réécrit de la manière suivante :

 fontlib=[c:\texfonts\fx_{base,more,other}]
Lors du développement de ce modèle, les alternatives sont sélectionnées les unes à la suite des autres, en commençant par celle qui suit l'accolade ouvrante. Le modèle est calculé avec ce choix et le résultat utilisé par MFjob; si MFjob demande un autre candidat, le modèle est évalué une seconde fois en utilisant la seconde alternative qui se trouve (dans cet exemple) entre la première et la seconde virgule. Un troisième développement serait ensuite construit en utilisant la troisième alternative, qui apparaît entre la seconde virgule et l'accolade fermante.

Un nombre quelconque d'alternatives peuvent apparaître entre les accolades ouvrante et fermante. Le texte d'une alternative peut aussi être vide, comme dans `' ou ,a': dans le premier cas, le développement est vide, dans le second il consiste simplement en la lettre `a'. Il est aussi possible de n'avoir qu'un seul choix ,comme dans `{abc}' qui donne toujours la valeur `{abc}'. Dans ce cas, les accolades ne sont pas requises.

Naturellement, les différents choix possibles n'ont pas forcément la même longueur, comme par exemple dans :

 fontlib=[c:\texfonts\lj_{base,m1,m2,m3}.flb]
Une simple liste de noms de fichiers séparés par des virgules est un cas particulier d'un ensemble d'alternatives. MFjob encadre automatiquement un modèle dans une paire d'accolades ouvrante et fermante, de sorte que la liste apparaît comme une liste d'alternatives. S'il n'y a qu'un seul nom de fichier comme dans l'exemple ci-dessus avec `{abc}', alors le choix est une constante.

7.4.6 Ensembles multiples d'alternatives 

Parfois, il est utile de pouvoir construire un motif avec plusieurs ensembles d'alternatives. Les modèles permettent ceci. Ils autorisent aussi l'imbrication des alternatives. Le développement d'un tel modèle est constitué de toutes les combinaisons possibles dans l'ordre lexicographique, c'est-à-dire que l'alternative la plus à droite est changée en premier. Un exemple clarifiera ce point. Soit le modèle :

{1,2}{1,a{1,2}}

Il produira la liste suivante de développements :

11
1a1
1a2
21
2a1
2a2
Le développement du modèle :

{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}

donnera tous les nombres à trois chiffres, depuis 000 jusqu'à 999 dans l'ordre numérique croissant.

7.4.7 Variables d'environnement 

La façon la plus commode de transmettre des noms de répertoires est de passer par des variables d'environnement. De la sorte, lorsque le disque est réorganisé, il n'est pas nécessaire d'éditer tous les fichiers de configuration. Pour rendre encore plus commode l'utilisation de ces variables d'environnement, elles peuvent apparaître aussi dans les modèles. Le nom de la variable est mis en sandwich entre un signe dollar ($) et deux points (:), comme dans $DVIDRVFONTS: par exemple. Le nom d'une variable d'environnement à utiliser dans un modèle ne peut contenir aucun des caractères spéciaux des modèles, à savoir @ , { } (a commercial, virgule et accolades ouvrante et fermante - ceci sera peut-être changé dans une prochaine version). La variable d'environnement est traitée comme si elle était une alternative placée entre accolades, les répertoires de la liste contenue dans la variable (séparés ici par des points-virgule, pas par des virgules) sont entrés dans le développement un à la fois, dans l'ordre où ils apparaissent dans la variable. Si un nom de répertoire, dans la variable d'environnement, ne se termine pas par `:' `/' ou `\' alors un `\' est ajouté automatiquement. Les répertoires vides dans la liste, par exemple dans

 SET PATH=C:\DOS;;\D:\BIN;
seront ignorés. Un modèle contenant $PATH: défini comme ci-dessus serait développé exactement de la même façon, si la commande SET était :
 SET PATH=C:\DOS;\D:\BIN
Le contenu de la variable d'environnement peut inclure des paramètres de modèles (@b et @r sont des candidats potentiels) mais les alternatives ne sont pas autorisées.

Exemple d'utilisation d'une variable d'environnement dans un modèle :

 fontlib=[$FONTLIBS:p6m_{base,more}]
Notez que `\' sera ajouté si nécessaire. $env: est traité comme `{,}' en ce qui concerne l'ordre d'évaluation.

Notez aussi que $EMTEX: est un cas spécial, cf. ci-dessous.

7.4.8 Le répertoire emTeX ($EMTEX:) 

EMTEX est une pseudo-variable d'environnement, qui prend pour valeur le nom du répertoire emTeX, dans les développements. Comme avec les variables d'environnement réelles, une barre oblique inverse est ajoutée si nécessaire. Si la variable d'environnement EMTEXDIR est définie, $EMTEX: est traitée comme $EMTEXDIR:. Autrement, la valeur par défaut `\emtex' est utilisée. Ceci implique que $EMTEX: peut être utilisée même si EMTEXDIR n'est pas définie. Il est donc recommandé d'utiliser $EMTEX: au lieu de $EMTEXDIR: dans les modèles.

7.4.9 Macros MFjob 

Les noms de répertoires peuvent aussi être emmagasinés dans des macros MFjob. Pour insérer la valeur d'une macro dans un modèle, utilisez $name>name est le nom de la macro. Si la valeur de la macro ne se termine pas par `:', `/' ou `\', alors un `\' sera automatiquement ajouté. Si la macro n'est pas définie, le développement ne marche pas. Notez que les noms de macros sont sensibles à la casse des caractères.

Exemple d'utilisation d'une macro dans un modèle :

 def target=[c:\newfonts];
 def output_lj= [output=pk[$target>pixel.lj\@Rrdpi\@f]];
Notez que `\' sera ajouté si nécessaire.

7.4.10 Modificateurs des paramètres de modèles 

Le développement des paramètres de modèles peut être modifié en insérant un ou plusieurs caractères de l'ensemble indiqué ci-dessous, entre le @ et la lettre du paramètre. Les modificateurs autorisés sont les suivants :

0-99 _

Remplit un paramètre sur une largeur donnée, avec des `0' ou des `_'. Un nombre de 0 à 99 provoquera le remplissage du paramètre à partir de la gauche, avec des `0' ou des `_'. Le nombre de positions à remplir est donné par la valeur du nombre. Un nombre apparaissant avec un paramètre numérique effectuera le remplissage avec des zéros. S'il apparaît avec un paramètre non numérique, le remplisssage se fera avec des caractères de soulignement _. Lorsque le caractère de soulignement est utilisé comme modificateur d'un paramètre numérique, celui-ci sera rempli avec des caractères de soulignement au lieu de zéros.

Exemples:

@r @4r @4_r
1 0001 ___1
300 0300 _300
200002000020000
@f @5f
a ____a
abc __abc
abcdefghabcdefgh
F R T

arrondit et tronque des nombres réels :

Fprend la partie fractionnaire du nombre (elle peut être vide).
R arrondit le nombre à sa partie entière.
T tronque le nombre à sa partie entière. Si le nombre de décimales est spécifié (voir ci-dessous), le nombre sera tout d'abord arrondi au nombre spécifié de décimales, puis la partie entière sera calculée.
.0-99

Décimales. Le nombre sera arrondi au nombre de décimales indiqué. Note: Le point ne doit pas être utilisé immediatement après le @, car `@.' a une signification spéciale. Spécifiez une largeur de champ à la place, par exemple `@0.2r'. Si vous utilisez les modificateurs `T' et `F' sur le même type de paramètre dans différentes suites de paramètres d'un même modèle, vous devriez utiliser le même nombre de décimales pour les deux suites de paramètres, pour que l'arrondi soit correct. Si un modificateur `T' ou `R' est utilisé, le nombre de décimales est utilisé uniquement pour calculer les arrondis, pas pour formater la valeur (en conséquence, `R' est équivalent à `T.0').

Exemples:

@r @0.3r @0.2r @0.1r@0.0r@7.1r @Tr@T.0r
300.75300.750300.75300.8 301 00300.8300301
300.74300.740300.74300.7 301 00300.7300301
300 300.000300.00300.0 300 00300.0300300
M V

Multiplication par une constante. M multiplie un paramètre numerique par 1000 et V le multiplie par 5. Ceci permet de répertoires ou de noms de fichiers qui dépendent de l'agrandissement de la fonte comme c'est le cas pour les noms de fontes pxl. Par exemple :

@rpxl@RVr
300pxl1500

or names which depend in the magnification:

@g @Mg
1.441440

Si plus d'un modificateur M ou V porte sur le même paramètre, ils seront tous ignorés sauf selui qui est le plus à droite.

Le résultat est indéfini dans le cas d'un dépassement de capacité (produit plus grand que 65535.99998).

X Y

Valeur horizontale ou verticale. La résolution peut être différente sur les axes horizontal et vertical, ces modificateurs permettent de sélectionner la valeur correcte avec les paramètres @b ou @r. @Xb ou simplement @b sélectionnera la valeur horizontale, tandis que @Yb sélectionnera la valeur verticale. Si plus d'un modificateur X ou Y apparaît avec le même paramètre, tous seront ignorés sauf celui qui est le plus à droite.

7.4.11 Extension par défaut 

MFjob n'utilise pas `@.' pour ajouter une extension à un nom de fichier. `@.' insère toujours un point `.'.

7.4.12 Résumé 

@[0-99][.0-99][_][FRT][MV][XY](dfmbrsg)

0-99 remplir avec des 0 (nombres) ou des _ (autres paramètres)
_ remplir avec des _
.0-99 décimales (@g and @r)
F partie fractionnaire
R partie entière(arrondie)
T partie entière (tronquée)
M multiplier par 1000
V multiplier par 5
X sélectionner la valeur de la résolution horizontale (défaut, si Y n'apparaît pas)
Y sélectionner la valeur de la résolution verticale
d nom du pilote (chaîne)
f nom de la fonte (chaîne)
p magstep (0...9, h, u u=inconnu) (chaîne)
m Metafont mode (chaîne)
b résolution basique de la fonte (fraction)
r résolution de la fonte en dpi (fraction)
s design size en pt (fraction)
g agrandissement (fraction)
a1,a2,a3 alternatives
$env: variables d'environnement
macro: macro MFjob
@@ @, @ @ @$caractères spéciaux dans les modèles
SuivantPrec.Bas prec.HautNiv. sup.