• Aucun résultat trouvé

Punk : de METAFONT à PostScript

N/A
N/A
Protected

Academic year: 2022

Partager "Punk : de METAFONT à PostScript"

Copied!
8
0
0

Texte intégral

(1)

Cahiers

enberg

GUT GUT GUT

m PUNK : DE METAFONT À POSTSCRIPT

P JacquesAndré, VictorOstromoukhov Cahiers GUTenberg, n4 (1989), p. 23-28.

<http://cahiers.gutenberg.eu.org/fitem?id=CG_1989___4_23_0>

© Association GUTenberg, 1989, tous droits réservés.

L’accès aux articles desCahiers GUTenberg (http://cahiers.gutenberg.eu.org/),

implique l’accord avec les conditions générales

d’utilisation (http://cahiers.gutenberg.eu.org/legal.html).

Toute utilisation commerciale ou impression systématique est constitutive d’une infraction pénale. Toute copie ou impression de ce fichier doit contenir la présente mention de copyright.

(2)
(3)

Cahiers GUTenberg n " 4 — Déc. 89

f UNK : De METRFONT à PostScript

Jacques A N D R É^ et Victor O S T R O M O U K H O V Î

f IRISA, Campus de Beaulieu, F-35042 Rennes Cedex, France

| EPFL-INF/LSP, Ecublens, CH-1015 Lausanne, Suisse

R é s u m é La police Pu fj K, définie par D. Knuth en M E T R F O N T , a été traduite automatiquement en PostScript, ce qui lui confère des propriétés encore plus dynamiques grâce au mécanisme de création de fontes en PostScript.

Abstract The Pu NK font, initialy designed by D. Knuth for M E T R F O N T , hat been translated into PostScript. Thanks to the PostScript font machinery, this new font is more dynamic than the genuine one.

Depuis 500 ans environ, on ne connaît plus que deux types de caractères : les ca- ractères manuscrits qui ont encore gardé leur liberté (laquelle, lorsqu'elle est par- ticulièrement mise en valeur, conduit à la calligraphie) et les caractères typogra- phiques ( en plomb, photocomposés ou nu- mérisés) qui sont immuablement figés dans leurs dimensions et leur forme (malgré leur nom de caractères « mobiles » !).

C'est probablement D. Knuth qui, le premier, a proposé la notion de méta-fonte [Knuth 82] puis décrit ce que nous pensons être la première police de caractères dynamique : PUKK- Nous avons porté cette police en PostScript, ce qui permet de la rendre encore plus dynamique.

1. La police

P U K K

La police PUKK a été conçue par Knuth un peu avant 1980 mais n'a été publiée que récemment [Knuth 88]. Il s'agit d'une police de caractères inspirée des graffiti

« punks» que l'on pouvait trouver sur les murs des grandes villes à la fin des années 70, mais aussi dans certaines œuvres de Picasso ou de Dali. Il s'agit d'une écriture formée de bâtons aux extrémités desquels

Knuth met un gros point (comme un gros coup de brosse ronde de peintre en bâtiment). La figure 1 donne quelques exemples de caractères PUNK. L'originalité

f once ffljiK PON KNUTH

F i g u r e 1 : E x e m p l e s d e c a r a c t è r e s PUNK

de cette police vient d'une part de l'aspect irrégulier des tracés comme le fait quelqu'un peignant à la hâte ces caractères sur un mur (mais ceci existe déjà dans certains caractères, par exemple révolution de Lettraset) et d'autre part, et surtout, du fait que ces irrégularités sont produites par des fonctions aléatoires lors de la création d'une occurrence de police PUNK :

La capitale « A » est définie en METR- FONT comme suit :

b e g i n p u n k c h a r( " A ", 1 3 , 1 , 2 ) ; z l - p p ( 1 . 5 u , 0 ) ; z 2 = ( . 5 w , l . l h ) ; z 3 = p p ( w - 1 . 5 u , 0 ) ;

p d z l ; p d z 3 ; d r a w z l — z 2 — z 3 ;

1, l e f t a n d r i g h t d i a g o n a l s z 4 = p p . 3 [ z l , z 2 ] ; z 5 = p p . 3 [ z 3 , z 2 ] ; p d z 4 ; p d z 5 ; d r a w z 4 — z 5 ; '/. c r o s s b a r e n d c h a r ;

où pp est définie par

v a r d e f p p e x p r z = z + ( h d e v * n o r m a l d e v i a t e , v d e v * n o r m a l d e v i a t e ) e n d d e f ;

c'est-à-dire en utilisant la fonction aléatoire normaldeviate.

23

(4)

Jacques A N D R É et Victor OSTROMOUKHOV

A moins d'utiliser toujours le même germe pour la génération des nombres aléatoires, chaque fois que l'on installe une police NNK (pour un corps donné), on crée un nouveau jeu de caractères.

2. Pourquoi utiliser PostScript?

Puisque les fonctions aléatoires sont utili- sées lors de la création de la police, tous les caractères restent, une fois créés, iden- tiques. Ceci se vérifie aisément dans le texte de la figure 1 où les « P » de la première ligne sont semblables et où les

« fi » de la seconde aussi ; par contre le

« 0 » de la première ligne diffère de celui de la seconde car il ne s'agit pas de la même police (la première est en romain normal, la seconde en gras). Grâce à la font machinery de PostScript [Adobe85, p. 85 sqq], on peut utiliser une fonction aléatoire non plus lorsque l'on construit globalement une police pour un corps et des orientations donnés (c'est-à-dire par les instructions scalef ont ou makef ont et setfont), mais lorsque l'on utilise un ca- ractère (instructions show). En effet, cette machinerie dispose de deux modes : un mode accéléré (qui est le mode usuel) et un mode simple (mais pouvant être 1000 fois plus lent que le mode normal !) :

• En mode normal, le processus d'écriture peut être décrit comme suit :

Au premier appel d'un caractère d'une police donnée, par exemple (A) show, on appelle la procédure BuildChar qui doit obligatoirement exister dans le dictionnaire décrivant la police en cours. Cette procédure passe les informations sur la métrique du caractère en utilisant la procédure s e t c a c h e d e v i c e . Puis BuildChar exécute l'algorithme décrivant le caractère, ce qui produit la matrice de points du caractère « A » pour la police en cours et pour l'imprimante utilisée. Cette matrice est alors mise dans la page en cours et (c'est le second

rôle de s e t c a c h e d e v i c e ) une copie est gardée en mémoire cache.

Lors d'un nouvel appel (A) show (ou lors d'une seconde occurrence de ce même caractère « A » dans une chaîne, p.ex. (AA) show), on prend directement la matrice de points en mémoire cache pour la copier dans la page en cours.

• En mode simple :

au premier appel de (A) show, on appelle BuildChar qui passe les informations métriques en utilisant la procédure setcharwidth. La matrice de points est alors calculée et mise dans la page courante. Mais elle n'est pas mise en mémoire cache.

Lors d'un nouvel appel (A) show, on refait tous les calculs comme au premier appel.

Cette seconde méthode est évidemment beaucoup plus longue (les algorithmes de scan conversion sont très coûteux), mais elle permet d'appeler une fonction aléatoire à chaque occurrence du carac- tère « A » et non plus une fois pour toutes.

Diverses polices dynamiques ont été pro- duites ainsi [André & Borghi 89a,b, Pa- ckard 89].

3. De

M E T F L F O N T

à PostScript

H était donc intéressant d'essayer de pro- fiter du dynamisme de PostScript tout en gardant la description METflFONT de

fuNK- Mais il faut souligner, tout d'abord, que la traduction METflFONT—>• PostScript n'est possible en principe que grâce à une

« heureuse coïncidence » : les deux langages manipulent la même classe d'objets, eifec- tuant sur eux les mêmes opérations [Os- tromoukhov88]. Les tableaux 1 et 2 résu- ment la situation.

Objets METflFONT PostScript

point pair moveto

ligne zl- - z2 lineto

Courbe de Bézier zl..z2 curveto plume ronde pencircle setlinewidth transformation transform CTM

(5)

PuwJC : De M E T R F O N T à PostScript

O p é r a t i o n s M E T R F O N T P o s t S c r i p t

R e m p l i s s a g e fill fill

t r a c é de p l u m e d r a w stroke

effacement erase 1 setgray fill

a p p l i q u e r u n e t r a n s f o r m a t i o n

t r a n s f o r m e d t r a n s l a t e , scale, r o t a t e

Il existe néanmoins quelques diffé- rences : par exemple, M E T R F O N T peut ma- nipuler des plumes de forme quelconque, tandis que PostScript ne sait pas le faire. Une autre différence significa- tive consiste en l'impossibilité d'effec- tuer en PostScript l'opération d'efface- ment lors de la construction d'un ca- ractère, après la commande s e t c a c h e - d e v i c e . La technique d'effacement est couramment utilisée par les programmes

M E T R F O N T . Ces différences restent tout de même non-significatives pour la conversion METRFONT—>• PostScript quand les sources

M E T R F O N T sont un peu arrangés.

4. Traduction de

P U K I C

Nous possédons donc une implémentation du programme METRFONT qui effectue une telle conversion METRFONT—»-PostScript automatiquement. Le processus de généra- tion de la police P U N K dynamique est divisé en deux phases :

1. Dans une première phase, nous avons supprimé dans les sources M E T R -

F O N T tout aspect aléatoire : la tâche

de perturbation sera entièrement confiée à PostScript. Nous avons produit ainsi la version « régulière »

d e P U N K -

2. Dans une deuxième phase, nous avons remplacé les primitives l i n e t o et c u r v e t o de PostScript par des expressions plus compliquées conte- nant un élément aléatoire et paramé- tré par les variables dédiées.

Exemple, pour la version régulière :

/ L { l i n e t o } d e f / M { m o v e t o } d e f / C { c u r v e t o } d e f

11.71527 0 M 51 2 7 0 . 6 0 1 5 L

35.43878 6 . 2 9 2 1 4 3 2 . 9 3 9 5 8 12.32655 2 8 . 4 9 0 7 16.77544 C

et pour la version dynamique :

/ H a l f M a x 1 0 7 3 7 4 1 8 2 4 def '/, 2"30 / L i n e t o R a t i o 6 6 0 0 0 0 0 0 def

% v a r i a b l e d e d i e e / S m a l l C u r v e t o R a t i o 5 0 0 0 0 0 0 0 0 def

'/. v a r i a b l e d e d i e e /L{ e x c h r a n d H a l f M a x sub

L i n e t o R a t i o d i v a d d exch r a n d H a l f M a x sub

L i n e t o R a t i o div a d d l i n e t o j d e f /M{ exch r a n d H a l f M a x sub

L i n e t o R a t i o div add e x c h r a n d H a l f M a x sub

L i n e t o R a t i o d i v add m o v e t o } d e f /C{

6 - 1 r o l l r a n d H a l f M a x sub

S m a l l C u r v e t o R a t i o d i v add 6 1 r o l l 5 -1 r o l l r a n d H a l f M a x sub

S m a l l C u r v e t o R a t i o d i v a d d 5 1 r o l l 4 - 1 r o l l r a n d H a l f M a x sub

S m a l l C u r v e t o R a t i o d i v add 4 1 r o l l 3 - 1 r o l l r a n d H a l f M a x sub

S m a l l C u r v e t o R a t i o d i v add 3 1 r o l l e x c h r a n d H a l f M a x sub

S m a l l C u r v e t o R a t i o div a d d e x c h r a n d H a l f M a x sub

S m a l l C u r v e t o R a t i o d i v add curvetojdef

11.71527 0 M 51 2 7 0 . 6 0 1 5 L

3 5 . 4 3 8 7 8 6 . 2 9 2 1 4 3 2 . 9 3 9 5 8 12.32655 2 8 . 4 9 0 7 16.77544 C

Nous avons produit ainsi la version dy- namique de la police P U N K : chaque lettre est différente des autres à chaque occur- rence, puisque chaque caractère est recal- culé à nouveau lors de chaque invocation, avec un élément aléatoire.

Les figures 2 et 3 présentent les mêmes caractères ; mais, dans le premier cas, il 25

(6)

Jacques A N D R É et Victor O S T R O M O U K H O V

AS CPAS CPAS CPAS CPAFCCP

f o R T A S S PS f e l i c e fUNK U f o s T S c R I P T

F O R T A S E P E F O N C É fUNK HN P O S T S C R I P T P O R T A « P E f o n c é P U N K SN P O S T S C R I P T

AAAAABB&FCBCCCCCCDDDDDD

(7)

^UnK •' De METAFONT à PostScript

A f r C P A f c C P A f c C P A & C P A f c C P

P O R T A « pe f o n c e PUNK EN P O S Ï S C R Î F T

îORTASS pe f o n c e mm SN P O S T S C R I P T

P Ô R T A S E DE P o n c e PUNK P O S T S C R I P T A A A A A & f c f c b b C C C C C C p p D P D P

Figure 3 : Caractères P U N K vus par PostScript - version dynamique.

Il y a plus de pertubations sur, par exemple, curveto. Notez que les « A » sont tous différents les uns des autres.

27

(8)

Jacques A N D R É et Victor O S T R O M O U K H O V

s'agit de la version « régulière », tandis que, dans l'autre, il s'agit de la version dynamique.

5. Conclusion

Nous sommes conscients que les pro- grammes PostScript générés par le procé- dé décrit ci-dessus sont assez naïfs. Nous laissons au lecteur le soin de rendre le code plus sophistiqué, s'il le juge nécessaire, notre but ici étant seulement de démon- trer la faisabilité de l'opération.

On trouvera dans [André & Borghi 89a]

d'autres applications de ce dynamisme.

Mais nous sommes conscients aussi que l'intérêt n'est pas évident pour tout le monde. Certains typographes crient au scandale dès que l'on touche à l'immuabi- lité du caractère (voir par exemple les ex- périences de [Laufer 87a et b] à ce sujet).

Pourtant le monde où nous vivons est dé- terministe ; il est donc normal d'accepter, et donc de simuler, sa complexité.

Références

[ A d o b e 8 5 ] A D O B E S Y S T E M S I N C . , PostScript Language Reference Manual, Addison Wes- ley, Reading, Mass., 1985.

[ A n d r é B o r g h i 8 9 a ] , Jacques ANDRÉ and Bruno BORGHI, "Dynamic fonts", in Raster Imaging and Digital Typography (André &

Hersch eds.), Cambridge University Press, 1989, 198-204.

[ A n d r é B o r g h i 8 9 b ] , Jacques ANDRÉ and Bruno BORGHI, "Dynamic fonts", in Post- Script Language Journal, vol.2, No.3, de- cember 1989, 6 - 8 .

[ K n u t h 8 2 ] D. KNUTH, "The concept of a meta- font", Visible Language, vol. XVI, no 1, 1982, 3-27. Traduction française : « Le con- cept d'une meta-fonte », Communications et langages, 1984, 55-132.

[ K n u t h 8 8 ] , Donald E. KNUTH, "A PUNK Meta- Font", TugBoat, voi. 9 (1988), No 2, 152- 168.

[ L a u f e r 8 7 a ] Roger L A U F E R (textes réunis par), Le texte en mouvement, Presses Universi- taires de Vincennes, 1987.

[ L a u f e r 8 7 b ] Roger LAUFER, « Calligraphie syn- thétique animée », culture technique numéro 17, mars 1987, 273-275.

[ O s t r o m o u k h o v 8 8 ] Victor O S T R O M O U K H O V ,

"METAFONT vs. PostScript", Proceedings of EuroTfcX conference - Exeter '88 (à pa- raître).

[ P a c k a r d 89] Ted PACKARD, "Ransom Font", The PostScript Journal, vol. 2, no 2, July 1989, 44-45.

Références

Documents relatifs

Toute manifestation sur le domaine privé au sens de l’article 28 du présent règlement doit être signalée préalablement à la municipalité ou à l’autorité délégataire

Caractère devant apparaître en bleu, Time New Roman et grandeur caractère à 16 à l’exception du texte entre crochet. [ Rouge et Police de caractère Arial

● Ce sac contient tout le matériel portable nécessaire afin que chaque agent soit indépendant et autonome. ● « On en prend soin car ce kit indispensable nous permet de

Les associations sont tenues de faire connaître, dans les trois mois, tous les changements survenus dans leur administration ou leur direction, ainsi que toutes les

Vous devez également déposer votre permis de conduire au greffe dans le même délai si vous êtes condamné(e) à une déchéance du droit de conduire à subir les week-ends ou à

C’est là qu’interviennent les laboratoires plus spécia- lisés en criminalistique avec, dans le service public, deux entités : l’INPS avec ses six laboratoires, et

Il y a plusieurs années, un nouvel instrument de revalorisation du logement a fait son apparition dans le Code wallon de l’habitation durable : il s'agit de la prise en gestion ou

C’est peut-être une erreur d’inattention, mais elle ne s’est pas rendu compte que pour 1 km de marche, 60 minutes n’étaient peut-être pas nécessaires (elle habite un petit