Metafont

Från Wikipedia
Hoppa till: navigering, sök

Metafont är ett vektorbaserat beskrivningsspråk för teckensnitt skapat av Donald Ervin Knuth i slutet av 1970-talet. Knuth utvecklade Metafont parallellt med TeX, och det finns klara likheter mellan syntaxen i de båda språken och sättet som programmen fungerar på.

Beskrivning av teckenglyferna[redigera | redigera wikitext]

Till skillnad från andra metoder att beskriva teckensnitt så baserar sig Metafont på ett speciellt anpassat programspråk med ändamålsenliga konstruktioner för geometri. Språket är delvis deklarativt, vilket används för att beskriva relationer mellan till exempel punkter med linjära ekvationssystem som Metafont löser efter behov vid kompileringen.

Exempel. Med

z2 = z0 + (2u,0);
z1 = 0.5[z2,z3];

uttrycker vi att punkten z1 ska ligga mittemellan punkter z2 och z3, och att z2 i sin tur ligger två längdenheter till höger om z0. Vi behöver aldrig beräkna z1 manuellt, och värdet på z0 behöver inte vara känt när ekvationerna definieras.

Detta sätt att uttrycka punkter och deras relationer används för att parametrisera egenskaperna hos teckensnittet. Avsikten med Metafont är att programkoden ska beskriva designerns intentioner med teckensnittsfamiljen och inte en beskrivning av de enskilda teckenformerna. Knuth beskriver det så här i Digital Typography:

"In this sense a 'meta-font' is a schematic description of how to draw a family of fonts, not simply the drawings themselves."

En av få existerande teckensnittsfamiljer som utvecklats med Metafont är Knuths egna Computer Modern, som han utvecklade parallellt med Metafont och TeX. Den har ett stort antal parametrar som bestämmer teckenformerna, och samtliga varianter av familjen kan renderas utifrån i grunden samma källkod. Här är några exempel:

Computer modern variants.png

Det kanske tydligaste släktskapet här är det mellan Computer Modern Roman och Compter Modern Dunhill. Man ser tydligt att den senare har fått lägre x-höjd och är något smalare, men att det i övrigt är i stort sett samma teckensnitt. Concrete Roman utvecklades för att tillsammans med matematikteckensnittet Euler användas i Knuths lärobok Concrete Mathematics.

Ett annat sätt på vilket parametriseringen av teckensnittets egenskaper utnyttjas är den optiska skalningen, dvs. att en skalning av texten inte medför en proportionerlig skalning utan att bredden ökas för att anpassa sig till hur ögat upplever texten. Exemplet nedan visar hur varianter av Computer Modern anpassade till allt från 5 till 17 punkters storlek ser ut när de renderas i 12 punkters grad.

Computer modern roman optical scaling.png

En annan viktig del av Metafont är dess hantering av s.k. pennor. I andra skalbara format för teckensnitt beskrivs glyfernas konturer, vilka bildar en sluten geometrisk form som fylls med svart. I Metafont väljer man i stället en penna med en viss form och storlek för att åstadkomma streck. Figuren nedan visar hur detta kan användas för att åstadkomma effekter som är användbara för design av teckensnitt. Figurerna till vänster använder exakt samma ritinstruktioner som de till höger, men har ritats med pennor med kraftigt elliptiska spetsar.

Metafont pens.png

Som dokumentation till Metafont har Knuth skrivit boken The METAFONTbook som beskriver programmet och språket, samt METAFONT: The Program som är den typsatta källkoden till programmet, skrivet i WEB med litterat programmering.

Rasterisering[redigera | redigera wikitext]

Till skillnad från andra sätt att beskriva teckensnitt så sker rastreringen innan renderingen på skärm eller skrivare påbörjas. Programmet Metafont används för att kompilera källkoden och generera en svart-vit bitmap för varje tecken, i rätt storlek och upplösning för det valda presentationsmediet. I praktiken lagras dessa bitmappar vanligen på värddatorns hårddisk i form av .pk-filer, vilket är komprimerade varianter av de .gf-filer som Metafont producerar.

Detta förfarande kan te sig märkligt, men det finns åtminstone ett par anledningar. Metafont utvecklades i slutet av 1970-talet, och då fanns det inte möjlighet för en skrivare att direkt tyda Beziérkurvor o dyl som i dag används för att beskriva teckenglyferna. Vidare ger den här metoden möjlighet till total kontroll över rasteriseringen, och Metafont använder sig av skrivarspecifika drivrutiner (s.k. modes, lägen) som påverkar hur Metafont utför rasteriseringen, så att anpassning för fysiska skillnader vad gäller till exempel svärta och rastertäthet kan göras.

Övrigt[redigera | redigera wikitext]

En välkänd modifiering av Metafont är MetaPost som i stället för bitmapfonter producerar PostScript-figurer från källkoden.