Les langagesMETAPOST etMETAFONTont tellement de points communs que les utilisateurs confirmés deMETAFONTvoudront sans doute laisser de côté la plupart des explications de ce document et se concentrer sur les concepts qui sont uniques à METAPOST. Les comparaisons de cet appendice sont prévues pour aider les experts familiers duMETAFONTbookainsi que les autres utilisateurs qui tireront profit des explications plus détaillées de KNUTH[4].
PuisqueMETAFONTest prévu pour construire les fontes de TEX, il possède un certain nombre de primitives permettant de produire des fichierstfmdont TEX a besoin pour connaître les dimensions des caractères, les informations d’espacement, les ligatures et le crénage.METAPOSTpeut également être utilisé pour créer des fontes et il possède également les primitives deMETAFONTpour construire les fichiers tfm. Elles sont résumées dans la table 12. On peut trouver des explications dans la documentation de METAFONT[4, 7].
TAB. 12 – PrimitivesMETAPOSTpour construire des fichierstfm commandes charlist,extensible,fontdimen,headerbyte,
kern,ligtable
opérateurs de ::,= :,=:|,=:|>,=:,|=:>, ligature |=:|,|:=|>,|=:|> >,||: autres opérateurs charexists
Bien queMETAPOSTpossède les primitives permettant de produire des fontes, beau-coup de primitives et de variables internes pour la génération de fontes définies dans PlainMETAFONTne font pas partie de PlainMETAPOST. Pour cela, il y a unpackage séparé de macros, appelémfplain, qui définit les macros requises pour permettre à METAPOSTde compiler les fontesComputer Modernde KNUTHcomme le montre la table 13 [6]10. Pour charger ces macros, il suffit d’écrire&mfplainavant le nom du fichier source. Cela peut être effectué également au niveau de l’invite**après avoir lancé l’interpréteurMETAPOSTsans argument, ou à partir d’une ligne de commande qui pourrait ressembler à
mp ’&mfplain’ cmr10 L’analogue de la commandeMETAFONTsuivante
mf ’\ mode=lowres ; mag=1.2 ; input cmr10’
10 La syntaxe des lignes de commandes dépend du système. Les apostrophes sont nécessaires sur la plupart des systèmes Unix pour protéger des caractères spéciaux tels que&.
est
mp ’&mfplain \ mode=lowres ; mag=1.2 ; input cmr10’
Le résultat est un ensemble de fichiers POSTSCRIPT, un pour chaque caractère de la fonte. Un certain travail sera nécessaire pour pouvoir les incorporer dans des fontes POSTSCRIPTde type 3 [1].
TAB. 13: Macros et variables internes définies uniquement dans le pa-ckagemfplain
Définies dans le packagemfplain
beginchar font_identifier
blacker font_normal_shrink
capsule_def font_normal_space
change_width font_normal_stretch
define_blacker_pixels font_quad
define_corrected_pixels font_size
define_good_x_pixels font_slant
define_good_y_pixels font_x_height define_horizontal_corrected_pixels italcorr
define_pixels labelfont
define_whole_blacker_pixels makebox
define_whole_pixels makegrid
define_whole_vertical_blacker_pixels maketicks define_whole_vertical_pixels mode_def
endchar mode_setup
extra_beginchar o_correction
extra_endchar proofrule
extra_setup proofrulethickness
font_coding_scheme rulepen
font_extra_space smode
Définies comme non-op dans le packagemfplain
cullit proofoffset
currenttransform screenchars
gfcorners screenrule
grayfont screenstrokes
hround showit
imagerules slantfont
lowres_fix titlefont
nodisplays unitpixel
notransforms vround
openit
Une autre limitation du packagemfplainest que certaines variables internes de Plain METAFONTne peuvent pas être traduites de façon sensée enMETAPOST. Ceci inclue displaying,currentwindow,screen_rowsetscreen_colsqui dépendent de la possibilité qu’aMETAFONTd’afficher des images sur un écran d’ordinateur. De plus, pixels_per_inchest irrecevable puisqueMETAPOST fonctionne avec des unités fixées à partir des points POSTSCRIPT.
La raison pour laquelle certaines macros et variables internes n’ont aucun sens avecMETAPOSTest que les commandes primitives deMETAFONTcull,display, openwindow,numspecialettotalweightne sont pas implémentées dans META-POST. Ne sont également pas implémentées un certain nombre de variables internes ainsi que l’<option de tracé>withweight. Voici une liste complète des variables in-ternes dont la signification première dansMETAFONTne peut pas avoir de sens dans METAPOST :
autorounding fillin proofing tracingpens xoffset chardx granularity smoothing turningcheck yoffset chardy hppp tracingeges vppp
Il y a également une primitive deMETAFONTqui a un sens légèrement différent dans METAPOST. Les deux langages permettent des instructions de la forme
special<expression chaîne>;
maisMETAFONTcopie la chaîne dans un fichier de sortie « fonte générique » tandis queMETAPOSTinterprète la chaîne comme une séquence de commandes POSTSCRIPT
qui seront placées au début du prochain fichier de sortie.
Toutes les autres différences entreMETAFONTetMETAPOSTproviennent de fonction-nalités trouvées uniquement dansMETAPOST. Elles sont listées à la table 14. Les seules commandes présentées ici qui n’ont pas été étudiées dans les chapitres précédents sontextra_beginfig,extra_endfigetmpxbreak. Les deux premières sont des chaînes qui contiennent des commandes supplémentaires devant être exécutées par beginfigetendfig exactement comme extra_beginchar etextra_endchar étaient exécutées parbegincharetendchar(le fichierboxes.mputilise cette possi-bilité).
L’autre fonctionnalité listée dans la table 14 non répertoriée dans l’index estmpxbreak. Elle est utilisée pour séparer des blocs traduits en commandes TEX ou troff dans des fichiersmpx. Cette commande ne devrait pas concerner un utilisateur humain puisque les fichiersmpxsont généralement construits de façon automatique.
TAB. 14: Macros et variables internes définies parMETAPOSTet absentes deMETAFONT
PrimitivesMETAPOSTnon trouvées dansMETAFONT
bluepart infont redpart
btex linecap setbounds
clip linejoin tracinglostchars
color llcorner truecorners
dashed lrcorner ulcorner
etex miterlimit urcorner
fontsize mpxbreak verbatimtex
greenpart prologues withcolor
Variables et macros définies uniquement dansMETAPOST
ahangle cutbefore extra_beginfig
ahlength cuttings extra_endfig
background dashpattern green
bbox defaultfont label
bboxmargin defaultpen labeloffset
beginfig defaultscale mitered
beveled dotlabel red
black dotlabels rounded
blue drawarrow squared
buildcycle drawdblarrow thelabel
butt drawoptions white
center endfig
cutafter evenly
Bibliographie
[1] Adobe Systems Inc. POSTSCRIPTLanguage Reference Manual, Addison Wesley, Rea-ding, Massachusets, 1986.
[2] J. D. HOBBY, Smooth, easy to compute interpolating splines,Discrete and Computa-tional Geometry, 1(2), 1986.
[3] Brian W. KERNIGHAN, Pic – a graphics language for typesetting, InUnix Research System Papers, Tenth Edition, pages 53–77, AT&T Bell Laboratories, 1990.
[4] D. E. KNUTH,The METAFONTbook, Addison Wesley, Reading, Massachusets, 1986.
Volume C ofComputers and typesetting.
[5] D. E. KNUTH,The TEXbook, Addison Wesley, Reading, Massachusets, 1986. Volume C ofComputers and Typesetting.
[6] D. E. KNUTH,Computer Modern Typefaces, Addison Wesley, Reading, Massachusets, 1986. Volume A ofComputers and Typesetting.
[7] D. E. KNUTH, The new versions of TEX andMETAFONT,TUGboat, the TEX User’s Group Newsletter, 10(3) : 325 – 328, November 1989.
Index
POSTSCRIPT, 17encapsulé, 21
arclength, 60, 81 arctangente, 39 begingroup, 77, 83, 85, 88 beveled, 67
bounding box, 50, 53, 72 boxes.mp, 94
centimètre, 20 intersection, 52, 55, 57 choix conditionnel, 76
convention z, 29, 40, 42 coordonnées, 19, 29 currentpen, 71, 74
currentpicture, 53, 73, 75, 89 cutafter, 58, 96
cutbefore, 57, 96 cutdraw, 90 cuttings, 58 cycle, 22, 39, 51 dashed, 63, 67, 70, 71 dashpattern, 65, 83 décalage, 34 direction of, 58 directionpoint of , 60 directionpoint of, 88 directiontime of, 58 div, 115
division, 36, 39 dotlabel, 44, 50 dotlabels, 45, 93 drawboxed, 95, 97, 100 drawboxes, 97, 100 drawdblarrow, 69 drawoptions, 70, 88 drawshadowed, 100 drawunboxed, 97, 100 dvips, 18
d’arrondi, 92 etex, 46
étiquette, 44, 46 evenly, 63, 67, 71 exitif, 93 fixsize, 97, 100 flèche, 67, 69 floor, 39 fonction, 76, 85 fonte
POSTSCRIPT, 46 fontsize, 46
Inconsistent equation, 29 incr, 90 intersectiontimes, 56, 58, 59 inverse, 62
lrt, 44 motif de points, 63 mp nullpicture, 37, 66 numeric, 33, 39, 59
pencircle, 20, 35, 72 penoffset, 117 pensquare, 72 pic, 94
pic, 95
pickup, 20, 35, 59, 71 picture, 33, 39, 53, 55 Plain, 19, 43, 67, 76, 105 point
POSTSCRIPT, 19 d’impression, 20 primaire, 27, 34, 36 primary, 89 primarydef, 89 produit scalaire, 36 prologues, 49
pt, 20
Redundant equation, 32 reflectedabout, 61, 62 relation, 35
reverse, 69 right, 25, 59
\rlap, 50
rotated, 47, 61, 62, 72 rotatedaround, 61, 62 rotation, 34
round, 39 rounded, 67 rt, 44, 72 save, 77, 83, 88 scaled, 20, 59–62 secondaire, 36 secondarydef, 89 self, 102
setbounds, 50, 74 shifted, 59, 61, 62
texte de remplacement, 76, 84, 103 thelabel, 45, 53
time, 108
tracingonline, 33, 43, 103 tracingoutput, 104
transform, 33, 39 unitvector, 39, 82 unknown, 39 interne, 33, 43, 78 locale, 42, 76, 77 vecteur
direction, 58 normé, 39 verbatimtex, 48 warningcheck, 33 whatever, 30, 59, 72, 78 white, 34, 53, 70