Prec.Bas prec.BasNiv. sup.

3.14 Une introduction aux modèles 

Les versions précédentes des pilotes utilisaient $s et $r pour insérer les valeurs de la résolution de fonte et l'agrandissement PXL dans les noms de fichiers de fontes; cette facilité a été maintenant étendue et les pilotes utilisent des modèles pour construire les noms de fichiers depuis les paramètres qui leur sont donnés, tel que le nom et la résolution d'une fonte. Notez que les $s et $r précédents ne sont plus valides et doivent être remplacés par @RVr et @Rr respectivement. Le modèle peut être une constante, c-à-d. que le nom de fichier ne dépend d'aucun des paramètres, ou il peut s'évaluer à plus d'un seul nom de fichier qui seront alors utilisés en séquence. L'évaluation d'un modèle se nomme son expansion (ou son développement).

Un modèle qui n'est pas une constante contient un ou plusieurs caractères modèles qui sont la virgule (,), le dollar ($), l'arobas (@) et les accolades gauche et droite ({}). Un modèle qui contient le signe dollar ou une virgule peut se développer en plus d'un nom de fichier. Si ces caractères modèles doivent apparaître comme caractères littéraux alors ils doivent être précédés d'une arobas (@) -- un signe dollar littéral doit être écrit @$.

Des expansions multiples sont nécessaires quand une fonte, ou un autre fichier, peuvent être dans un ou plusieurs répertoires différents; chaque expansion est évaluée et le résultat utilisé pour chercher le fichier requis. Si la recherche échoue, la partie suivante du modèle est développée et le processus continue jusqu'à ce que le fichier soit trouvé ou qu'il n'y ait plus d'expansion.

3.14.1 L'exemple le plus simple d'un modèle -- un modèle constant 

Le modèle

dviscr.dlg

qui est destiné à l'option +transcript-file, contient uniquement le nom du fichier: l'expansion ne dépend d'aucun paramètre et est juste ce nom de fichier.

3.14.2 Un exemple simple de modèle 

Dans le modèle

@d.dlg

@d sera remplacé par le nom du pilote; si c'est Dvihplj alors ce modèle sera développé en dvihplj.dlg. Chaque pilote a ce modèle comme paramètre par défaut pour l'option +transcript-file car le nom du pilote est connu au moment du développement du modèle.

3.14.3 Paramètres de modèles 

Voici les paramètres de modèle, chacun de ces paramètres sera remplacé par la valeur donnée dans la table ci-dessous.

@d remplacé par l'un des noms de pilote suivants: Dvihplj, Dviscr, Dvivik, Dvipm, Dvidot.
@f remplacé par le nom d'une fonte ou celui d'un fichier graphique; ce paramètre doit être utilisé en conjonction avec les options +font-files et +graphics-files.
@i remplacé par le nom d'un fichier DVI.
@p magstep: 0 à 9, h pour magstephalf ou u pour inconnu -- à utiliser avec l'option +font-files.
@m mode METAFONT -- voir la description de l'option +metafont-mode.
@b résolution de base des fontes en DPI -- voir la description de l'option +font-resolution.
@r résolution de fonte en DPI, une fraction décimale -- à utiliser avec l'option +font-files.
@g agrandissement, une fraction décimale -- à utiliser avec l'option +font-files, par exemple, 1.2.
@u un nombre pour que le nom de fichier soit unique -- à utiliser avec l'option +mfjob-file seulement.
Ces paramètres peuvent être modifiés en insérant une ou plusieurs lettres entre le @ et la lettre paramètre. Par exemple, le $s précédent, qui a été remplacé par l'agrandissement PXL d'une fonte, doit être écrit maintenant @RVr. Les modificateurs des divers paramètres sont décrits ci-dessous.

3.14.4 Formation d'expansions multiples avec une liste 

Beaucoup des options de pilote requièrent une liste de fichiers, par exemple, l'option +font-libraries prend une liste de noms de fichiers de librairies de fontes. La façon la plus simple de le faire est d'entrer une liste de noms séparés par des virgules mais ce n'est pas toujours très pratique car cela exige beaucoup de frappe et la longueur d'un modèle est limité à 127 caractères.

À cause de cette limitation, cet exemple ne contient pas l'ensemble habituel des librairies de fontes:

 +font-lib:c:\texfonts\fx_base.fli,c:\texfonts\fx_more.fli
Notez qu'une version antérieure des pilotes utilisait des points virgules comme séparateurs, dans cette version les noms sont séparés par des virgules. Des espaces ne sont pas autorisés dans les modèles car ils sont utilisés pour séparer les options sur la ligne de commande.

3.14.5 Formation d'expansions multiples avec des alternatives 

Il est clair d'après l'exemple précédent que les expansions ont beaucoup de texte en commun. Les modèles permettent par conséquent de factoriser le texte commun avec les parties différentes présentés comme une série d'alternatives comprises entre accolades. L'exemple ci-dessus peut alors s'écrire comme ceci:

 +font-libraries:c:\texfonts\fx_{base,more}.fli
En développant ce modèle, les alternatives sont sélectionnées dans l'ordre commençant par la première suivant l'accolade ouvrante. Le modèle est évalué avec ce choix et le résultat utilisé par le pilote; si celui-ci demande un autre candidat, le modèle sera évalué une seconde fois en utilisant la seconde alternative laquelle (dans cet exemple) se trouve entre la première et la seconde virgule. Un troisième développement serait construit avec la troisième alternative qui apparaît après la deuxième virgule et avant l'accolade fermante.

Des alternatives en nombre quelconque peuvent apparaître entre les accolades ouvrante et fermante. Le texte d'une alternative peut aussi être nul comme dans {} ou {,a}: dans le premier cas l'expansion est vide, dans le second le premier choix est vide, le second est fait simplement d'un a. Il est aussi possible de n'avoir qu'un seul choix comme dans {abc} qui s'évalue toujours comme abc -- les accolades ne sont alors pas nécessaires. Naturellement les choix n'ont pas à avoir la même longueur comme, par exemple, dans:

 +font-libraries:c:\texfonts\lj_{base,m1,m2,m3}.fli
Une simple liste de noms de fichiers séparés par des virgules est un cas spécial d'un ensemble d'alternatives. Le pilote automatiquement enferme un modèle entre accolades ouvrante et fermante de sorte que la liste apparaisse comme une liste d'alternatives. Si un seul nom de fichier apparaît alors c'est un choix constant comme dans {abc} ci-dessus.

3.14.6 Ensembles multiples d'alternatives 

Lorsque des fichiers de fontes sont recherchés il est utile de pouvoir construire une configuration contenant plus d'un ensemble d'alternatives. Avec les modèles vous pouvez non seulement le faire mais vous pouvez aussi imbriquer les alternatives. L'expansion d'un tel modèle consiste en toutes les combinations possibles en ordre lexicographique, c-à-d. avec l'alternative la plus à droite dans le modèle changeant le plus rapidement.

Un exemple clarifiera ceci bien mieux: le modèle

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

donnera la séquence suivante d'expansions

11
1a1
1a2
21
2a1
2a2

Le 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}
se développera en tous les nombres à trois chiffres de 000 à 999 en ordre numérique croissant.

Un exemple de l'utilisation de cette possibilité:

 +font-files:c:\texfonts\,d:\myfonts\,.}@f{.pk,.pxl}
Notez l'alternative vide dans la première paire d'accolades, ce qui aura pour effet de chercher les fontes dans le répertoire courant si elles ne sont trouvées ni dans c:\texfonts ni dans d:\myfonts. Ce qui pourrait aussi s'écrire
 +font-files:{c:\texfonts\,d:\myfonts\,.}@f{.pk,.pxl}
Ce n'est pas la meilleure façon de traiter des répertoires alternatifs, dans la section suivantes les avantages de garder les noms de répertoires dans des variables d'environnement plutôt qu'explicitement dans des options seront présentés.

3.14.7 Variables d'environnement 

Les noms de répertoires sont gardés plus commodément dans des variables d'environnement de sorte que, lorsque le disque est réorganisé il ne soit pas nécessaire d'éditer tous les fichiers de configuration. Les avantages de cette utilisation des variables d'environnement apparaissent encore mieux lorsqu'elles sont placées dans des modèles. Le nom de la variable est mise en sandwich entre un signe dollar ($) et un deux-points (:) comme dans $DVIDRVFONTS : par exemple. Le nom d'une variable d'environnement à utiliser dans un modèle ne doit contenir aucun des caractères spéciaux de modèles, c-à-d., @ { , ou } (arobas, virgule et accolades) -- ceci pourra être modifié dans une version future car @d serait très utile dans ce but, $@d : se développerait en une variable d'environnement spéciale du pilote (DVIFX, DVILQL etc). La variable d'environnement est traitée comme si elle était une alternative comprise entre accolades, la liste de répertoires que la variable contient (séparés ici par des points-virgules, pas 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 automatiquement ajouté. Les positions de répertoire vides de la liste, par exemple entre les deux points-virgules dans

 SET PATH=C:\DOS;;\D:\BIN;
seront ignorées -- un modèle contenant $PATH : défini comme ci-dessus sera développé exactement comme 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èle (@b et @r sont des candidats probables) mais les alternatives sont interdites.

Notez je vous prie que $EMTEX : est un cas spécial, qui sera décrit ci-dessous.

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

 +response-files:$PATH:@f
Le fichier réponse @f sera cherché dans tous les répertoires de la variable PATH -- notez que \ sera ajouté chaque fois que nécessaire. Si le fichier doit être recherché d'abord dans le répertoire courant, le modèle devra être étendu en
 +response-files:{,$PATH:}@f
qui est le positionnement par défaut. Si PATH a pour valeur c:\dos;;\;f: et que le nom du fichier réponse (@f) est test.res alors le modèle sera développé en la séquence suivante de noms de chemin:

test.res
c
:\dos\test.res
\test.res
f
:test.res

c-à-d., {,$PATH :}@f est évalué de la même façon que {,c:\dos,,\,f:}@f, la construction $PATH : étant remplacée par la valeur de PATH.

Ajouter ! ou !! à la fin d'un nom de répertoire dans la variable d'environnement permet une recherche dans un sous-répertoire. Si ! est ajouté, ce répertoire et un seul niveau de sous-répertoire sont visités; si !! est ajouté, ce répertoire et tous les niveaux de sous-répertoires sont visités. Les répertoires sont visités avant leurs sous-répertoires; aucun autre ordre de recherche n'est défini.

3.14.8 Le répertoire de emTeX ($EMTEX :) 

EMTEX est une pseudo variable d'environnement, se développant comme le nom du chemin du répertoire emTeX. Comme avec les variables d'environnement réelles, un backslash est ajouté au besoin. Si la variable d'environnement EMTEXDIR est définie, $EMTEX : est traité comme $EMTEXDIR :. Autrement, la valeur par défaut \emtex est utilisée. C'est à dire que $EMTEX : peut être utilisée même si EMTEXDIR n'est pas définie. Par conséquent, il est recommandé d'utiliser $EMTEX : au lieu de $EMTEXDIR : dans les modèles.

3.14.9 Modificateurs de paramètres de modèles 

Les paramètres de modèle peuvent avoir leur développement modifié en insérant un ou plusieurs caractères de l'ensemble ci-dessous entre le @ et la lettre du paramètre. Les modificateurs sont:

0-99 _ Remplissage d'un paramètre sur une largeur donnée avec des 0 ou des _. Un nombre de 0 à 99 remplira le paramètre depuis la gauche avec des 0 ou des _ -- cette valeur sera le nombre de positions à remplir. Un nombre apparaissant avec un paramètre numérique fera un remplissage de zéros mais avec un paramètre non numérique remplira de soulignés. Utilisez le modificateur souligné pour remplir un paramètre numérique de soulignés au lieu de zéros.

Exemples:
@r @4r @4_r @f @5f
1 0001 ___1 a ____a
300 0300 _300 abc __abc
200002000020000abcdefghabcdefgh

F R T
Arrondir et tronquer les nombres réels.
F
prend la partie fractionnaire du nombre (peut être vide)
R
arrondi le nombre pour en obtenir la partie entière
T
tronque le nombre pour en obtenir la partie entière
.0-99
Décimales. Le nombre sera arrondi avec ce nombre de décimales.
Note: le point ne doit pas être mis immédiatement derrière le @, car @. a un sens spécial. Spécifiez plutôt une largeur de champ, par exemple @0.2r.

Exemples:
@r @0.3r @0.2r @0.1r@0.0r@7.1r @R.3r
300.75300.750300.75300.8 301 00300.8301.000
300.74300.740300.74300.7 301 00300.7301.000
300 300.000300.00300.0 300 00300.0300.000

P B E N
Séparer les noms de chemin et de fichiers. Un nom de chemin est fait de trois parties:
le répertoire (y compris l'unité), le nom de base et l'extension;
le nom de base et l'extension sont séparés par un point. Par exemple:
Nom de cheminRépertoireBaseExtension
d:\test\a.dvi d:\test\ a dvi
xxx xxx
xxx.zzz xxx zzz
c:xxx c: xxx
a.b.c a.b c

Sans modificateur, @f et @i seront remplacés par le nom complet (avec son chemin) du fichier; utiliser un modificateur vous permet de remplacer ou d'omettre certaines parties du nom. Les modificateurs ci-dessous remplaceront le nom de chemin complet par:

P
la partie répertoire du nom de chemin
B
le nom de base
E
un point suivi de l'extension
N
le nom de base, un point (seulement s'il y a une extension) et l'extension.

Plus d'un de ces modificateurs peut être utilisé avec un unique paramètre, dans ce cas ils seront appliqués dans l'ordre P, B, E - @BEf sera développé comme s'il était écrit @Bf@Ef. Si aucun de ces modificateurs n'apparaît, le paramètre sera remplacé par le nom de chemin inchangé (PBE se terminera par un point s'il n'y a pas d'extension).

Si un paramètre @f ou @Pf a une partie répertoire non vide lorsqu'il est évalué et qu'il n'est pas au début de l'expansion, c-à-d. qu'il est précédé d'au moins un caractère, alors cette expansion est silencieusement ignorée. Ceci afin d'éviter des expansions undésirables ou n'ayant aucun sens qui autrement pourraient venir de modèles tel que

 {c:\fonts\,}@f

Dans cet exemple, si @f se développe en \ec\emr10 (partie de répertoire non vide) alors l'expansion

 c:\fonts\\ec\emr10

sera écartée et seule l'expansion

 \ec\emr10

sera utilisée. Si, cependant, @f se développe en emr10 (nom de fichier seulement) alors les deux expansions

c:\fonts\emr10
emr10

seront utilisées. Exemples:
@f @Pf@Bf@Ef@BEf@Nf
b b . b. b
b.e b .e b.e b.e
p\b p\ b . b. b
p\b.ep\ b .e b.e b.e

M V
Multiplication par une constante. M multiplie un paramètre numérique par 1000 et V multiplie par 5. Ceci permet la création de noms de répertoire ou de fichier qui dépendent de l'agrandissement de fonte comme le font les noms de fontes PXL, par exemple
@rpxl@RVr
300pxl1500
ou de noms qui dépendent de l'agrandissement:
@g @Mg
1.441440
Si plus d'un modificateur M ou V apparaît dans le même paramètre, tous sauf le plus à droite seront ignorés.

Le résultat n'est pas défini sur un débordement (produit supérieur à 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 seulement @b sélectionneront la valeur définie par l'option +font-resolution-x alors que @Yb sélectionneera celle définie par +font-resolution-y. Si plus d'un modificateur X ou Y sont utilisés dans le même paramètre, tous sauf le plus à droite seront ignorés.

3.14.10 Extension par défaut 

Pour ajouter une extension à un nom de fichier, sauf si le nom du fichier en comporte déjà une, vous pouvez utiliser @.. Par exemple,

@f@.{msp,pcx,bmp}

crée les noms de fichier suivants:
Nom de fichier nom_fichier.grf
nom_fichier.msp nom_fichier.grf
nom_fichier.pcx
nom_fichier.bmp
@. fonctionne de cette façon:

- Si l'expansion produite jusque-là ne contient pas un . derrière le dernier :, \ ou / (ou si l'expansion contient un . mais aucun de ces autres caractères), le nom de fichier n'a pas d'extension. Dans ce cas, @. sera remplacé par un point et le développement se poursuivra (avec l'extension).
- Si le nom de fichier a une extension (chaque . (s'il y en a) est suivi d'un :, \ ou /), le développement s'arrête à @. (en omettant l'extension par défaut).
Actuellement, @. ne fonctionne pas dans {. . . }.

3.14.11 Résumé 

@[0-99][_][FRT][PBEN][MV][XY](dfipmbrsg)

0-99
remplissage par des 0 (nombres) ou _ (autres paramètres).
_
remplissage par des _.
.0-99
décimales (@g et @r).
F
partie fractionnaire.
R
partie entière (arrondie).
T
partie entière (tronquée).
P
chemin: partie du répertoire.
B
nom de base.
E
extension.
N
comme BE mais pas de point s'il n'y a pas d'extension.
M
multiplie par 1000.
V
multiplie par 5.
X
sélectionne la valeur horizontale (par défaut, si Y n'apparaît pas).
Y
sélectionne la valeur verticale.
d
nom du pilote (chaîne).
f
nom de fonte ou de figure (chaîne).
i
nom de fichier DVI (chaîne).
p
magstep (0..9, h, u=inconnu) (chaîne).
m
mode METAFONT (chaîne).
b
résolution de basic d'une fonte (fraction).
r
résolution d'une fonte en DPI (fraction).
g
agrandissement (fraction).
u
nombre pour faire un nom de fichier unique, pour +mfjob-file. (entier)
{a1,a2,a3}
alternatives.
$env:
variables d'environnement.
@@ @, @{ @} @$
]caractères spéciaux dans les modèles.
@.
extension par défaut.

3.14.12 Autres exemples 

Ces exemples montrent quelques utilisations de @g
@gmag@RMgmag@9.3_g
1.2 mag1200 mag____1.200
Prec.Bas prec.HautNiv. sup.