METAFONTMETAFONT è un linguaggio di descrizione di pagina usato per definire tipi di carattere vettoriale e il relativo interprete, che traduce il suo codice per generare caratteri bitmap utilizzabili, ad esempio nei documenti Postscript, entrambi concepiti e realizzati da Donald Knuth per realizzare uno strumento per il sistema di composizione tipografica TEX. Knuth iniziò a lavorare sul programma per la creazione di caratteri nel 1977, e produsse la prima versione di METAFONT nel 1979. A causa di inadeguatezze nel linguaggio METAFONT originale, Knuth sviluppò un nuovo sistema nel 1984, ed è questo sistema aggiornato che è ancora in uso oggi; METAFONT enumera le versioni con un sistema simile a TEX, in cui il numero si avvicina asintoticamente ad e ad ogni revisione. Mentre il METAFONT per definizione genera grafica raster, John Hobby ha reimplementato questo linguaggio per generare codice PostScript. È nato così il MetaPost, che sfrutta la versatilità del linguaggio ideato da Knuth per generare grafica vettoriale. Modalità di funzionamentoMetafont viene spesso eseguito come supporto per i driver dei dispositivi di output (stampante, schermo); in questi casi, il suo compito è generare bitmap per un carattere per una specifica combinazione di dispositivo di output (chiamato modalità in Metafont) e risoluzione(visibile nel nome del file di output, vedi sotto). Queste bitmap sono tipicamente memorizzate per un successivo riutilizzo, in modo che Metafont non debba essere eseguito ogni volta che viene visualizzato un documento, ma d'altra parte le distribuzioni TeX con un componente Metafont non hanno tipicamente incluso alcun carattere bitmap precostruito, poiché sarebbero piuttosto grandi rispetto alle fonti da cui potrebbero essere generati. Poiché i font Metafont erano tradizionalmente l'impostazione predefinita di TeX da cui altri formati di font erano eccezioni, un'installazione incompleta di un font non Metafont a volte può comportare la chiamata di Metafont e l'emissione di un confuso messaggio di errore " somefont.mf not found". Altrettanto importante, ma non così comune, è l'esecuzione di Metafont per generare un file di metrica dei caratteri (TFM); un file TFM viene generato solo se la variabile di creazione del carattere è positiva. Tradizionalmente le distribuzioni TeX sono spesso fornite con tutti i file TFM pre-generati (dato che sono piuttosto piccoli), ma qualcuno che installa un font Metafont dai sorgenti dovrà generare il suo file TFM prima che TeX possa usarlo. Un terzo modo di utilizzare Metafont è la modalità di prova: se la variabile di correzione è positiva, il file del font bitmap contiene anche informazioni aggiuntive fornite tramite comandi Metafont può anche essere eseguito in modo interattivo e dispone di comandi per visualizzare sullo schermo le immagini che produce. Knuth ha affermato di utilizzare Metafont come una sorta di calcolatrice da tavolo per risolvere equazioni complicate, sebbene ora utilizzi MetaPost per le illustrazioni matematiche. Metafont può eseguire il rendering di qualsiasi tipo di output grafico, non solo glifi. Tuttavia, MetaPost e Asymptote sono preferiti per le illustrazioni matematiche. Metafont è più comunemente invocato senza una richiesta diretta da parte dell'utente. I file DVI possono contenere solo riferimenti a caratteri tipografici, piuttosto che i set di glifi raster o vettoriali consentiti da altri formati come PostScript. Di conseguenza, è necessario accedere ai glifi nei caratteri tipografici ogni volta che viene richiesta la visualizzazione, la stampa o la conversione di un file DVI. File di outputMetafont genera diversi tipi di file: per un file chiamato
Dopo aver eseguito Metafont, in genere si utilizza il programma gftopk per convertire i file Nello standard TeX Directory Structure, i nomi dei file sono limitati a 8 + 3 caratteri, quindi i file GF e PK avrebbero solo estensioni LinguaggioIl linguaggio Metafont è un linguaggio interpretato per programmi che sono essenzialmente dichiarativi piuttosto che imperativi[2]. Variabili ed equazioniLe variabili in Metafont possono essere di otto tipi diversi:
Metapost aggiunge il colore (una tripla di valori numerici) come nono carattere e ha un modello completamente diverso (non raster) per le immagini; quest'ultimo è il principale punto di divergenza tra i due programmi. Le macro di Metafont vardef vivono anche nello stesso spazio dei nomi delle variabili e possono in qualche modo essere considerate come un nono tipo di variabile, sebbene le macro non esistano come valori di prima classe in Metafont. Insolitamente, i nomi delle variabili non sono semplici token, ma sequenze di token simbolici e indici numerici; il nome della variabile Una caratteristica molto distintiva di Metafont è l'uso di equazioni per definire le variabili. Una variabile numerica (o componente di una coppia o variabile di trasformazione) può essere nei tre stati noto (insieme), sconosciuto indipendente (non impostato) e sconosciuto dipendente (non impostato, ma dato da un'espressione lineare di uno o più indipendenti). Quando Metafont esegue un'istruzione di equazione, trasforma uno degli indipendenti coinvolti in un dipendente e lo elimina dalle espressioni per tutti gli altri dipendenti; quando non rimangono indipendenti nell'espressione per una variabile dipendente, quella variabile diventa nota. Risoluzione di sistemi di equazioni lineari quindi è una caratteristica incorporata del linguaggio Metafont, e il metodo consigliato per assegnare la maggior parte delle variabili (specialmente quelle i cui valori hanno un significato geometrico) è di indicare le equazioni che determinano i loro valori. I sistemi di equazioni spesso mescolano equazioni numeriche (scalari) con equazioni a coppie (vettoriali). Un'eccezione a quanto sopra è la classe delle variabili di quantità interne. Questi hanno nomi costituiti da un solo segno simbolico, sono sempre numerici e sono sempre noti. Hanno una rappresentazione interna più diretta rispetto alle variabili ordinarie, il che rende conveniente per le operazioni primitive in Metafont (o le sue estensioni) usarle implicitamente. SintassiMetafont ha token numerici e costanti di stringa con sintassi mainstream; le stringhe sono delimitate da Tranne quando i caratteri sono coinvolti in costanti numeriche o stringa, l'estensione del token contenente un particolare carattere dipende dalla classe a cui appartiene il carattere; a differenza di TeX, Metafont ha classi di caratteri fisse. I caratteri Un'applicazione notevole di queste regole è che I delimitatori (come le parentesi) non hanno significati incorporati, invece c'è un comando che trasforma due token simbolici in una coppia di delimitatori corrispondenti, ma normalmente i programmi Metafont usano solo le parentesi ordinarie. Oltre a sovrascrivere le priorità nelle espressioni, sono necessari anche delimitatori per certi tipi di argomenti macro. GraficaLe curve in Metafont sono definite come spline cubiche piuttosto che quadratiche, per una maggiore versatilità a scapito di un'aritmetica più complessa[3]. A differenza dei formati di font outline più comuni (come TrueType o PostScript Type 1), un font Metafont è composto principalmente da tratti con "penne" di larghezza finita, insieme a aree riempite. Pertanto, invece di descrivere direttamente il contorno del glifo, un file Metafont descrive i percorsi della penna. Alcuni caratteri Metafont più semplici, come i caratteri matematici calligrafici della famiglia Computer Modern, utilizzano un singolo tratto di penna con una penna relativamente grande per definire ogni "tratto" visivo dei glifi. Caratteri più complessi come il tondo della famiglia Computer Modern utilizzano una piccola penna per tracciare il contorno dei "tratti" visivi, che vengono poi riempiti; il risultato è molto simile a un carattere di contorno, ma con angoli leggermente ammorbiditi definiti dalla forma della penna. Poiché le forme dei caratteri sono definite da equazioni piuttosto che da numeri codificati direttamente, è possibile trattare parametri come le proporzioni, l'inclinazione del carattere, la larghezza del tratto, la dimensione del serif e così via come parametri di input in ciascuna definizione di glifo (che quindi non definiscono un singolo carattere, ma un meta-font). Pertanto, modificando il valore di uno di questi parametri in una posizione nel file Metafont, è possibile produrre una modifica coerente in tutto il carattere. Computer Modern Roman illustra molti usi di questa funzione; una tipica installazione di TeX include un numero di versioni del font in dimensioni da 5 pt a 17 pt, con le larghezze del tratto uguali in tutte le dimensioni (invece di aumentare quando il carattere viene ridimensionato) e le proporzioni che si allargano nelle dimensioni più piccole per una maggiore leggibilità. Inoltre, la macchina da scrivere Computer Modern e i caratteri sans-serif sono definiti utilizzando essenzialmente lo stesso file Metafont del carattere romano, ma con parametri globali diversi. UsoSebbene noti designer di caratteri, come Hermann Zapf, abbiano collaborato con Knuth per creare nuovi caratteri utilizzando Metafont, il sistema non è stato ampiamente adottato dai progettisti di caratteri professionisti. Knuth attribuisce questo al fatto che "chiedere a un artista di diventare abbastanza matematico per capire come scrivere un font con 60 parametri è troppo"[4]. Jonathan Hoefler ha commentato che il sistema Metafont alla fine è diventato "una tecnologia dietro nessuno dei tuoi caratteri preferiti... L'idea di Knuth che le lettere inizino con forme scheletriche è sbagliata"[5]. Il sistema Metafont consente di elaborare i caratteri in modi insoliti; nel 1982 Knuth ha mostrato come potrebbe essere usato per trasformare i caratteri, con un carattere serif che passa lentamente in un design sans-serif nel corso di un testo[6]. StoriaDonald Knuth ha iniziato a lavorare sul software per la creazione di caratteri nel 1977 e ha prodotto la prima versione di Metafont nel 1979. A causa di carenze nel linguaggio Metafont originale, Knuth ha sviluppato un sistema Metafont completamente nuovo nel 1984, ed è questo sistema rivisto che viene utilizzato oggi; Metafont ha un sistema di versioning simile a quello di TeX, dove il numero si avvicina asintoticamente a e ad ogni revisione[7]. EsempioIl seguente esempio crea una forma simile a un fagiolo chiuso per il carattere "B" di un font: % nome file: beta.mf
% mode_setup;
% Definire una forma a fagiolo per il carattere B
beginchar ( "B", 11 pt #, 11 pt #, 0 );
% Imposta le coordinate come un sistema di equazioni
y1 = y2 = y3 = 0 ;
y4 = y5 = y6 = h ;
x1 = x4 = 0 ;
x2 = x5 = w ;
x3 = x6 = 2 * w ;
% Definisci penna
pickup pencircle xscaled 0.2w yscaled 0.04w rotated 45;
% Disegna la curva dei caratteri
% z1 è uguale a (x1, y1)
draw z1..z3..z6{z2-z6}..z5..{z4-z2}z4..cycle; endchar;
end
Questo produce il seguente glifo: L'esempio precedente verrà elaborato con una riga di comando come[8]: mf '\ mode = ljfour; mode_setup; input beta.mf ' ;
gftopk beta.600gf beta.600pk
Quindi può essere utilizzato in un file LaTeX come (tutti i file dovrebbero risiedere nella stessa directory o il sistema TeX dovrebbe esserne informato usando metodi appropriati): \documentclass { articolo }
\newfont { \letterbeta } { beta }
\newcommand { \otherbeta } {{ \letterbeta B }}
\begin { document }
Proviamo ad avere uno strano \otherbeta \qui.
\end { documento }
Il file PDF risultante dovrebbe essere simile a questo: Produzione di font PostScript Type 1Esistono diversi strumenti per convertire i programmi Metafont in font PostScript Type 1. La maggior parte fa uso della capacità di MetaPost di convertire un sottoinsieme del linguaggio di Metafont in profili EPS, che possono essere successivamente convertiti in font PostScript Type 1. La generazione di contorni vettoriali dei tratti di penna Metafont non è banale, poiché il modello Metafont di un glifo è un'immagine raster e i contorni esatti della maggior parte dei tratti non sono curve di Bézier.
L'approccio comune per generare caratteri di Type 1 con tratti di penna rimane quello di generare una bitmap ad alta risoluzione e quindi utilizzare un autotracer, implementato da pacchetti come mftrace[13] e TeXtrace[14]. Note
Altri progetti
Collegamenti esterni
|
Portal di Ensiklopedia Dunia