Una Chiave per il Desktop Publishing
Corso di PostScript
- Marco A. Calamari
Sesta Puntata
In questa puntata ci occuperemo dell'utilizzo più comune e più importante del PostScript; la stampa dei testi. Per far questo dovremo introdurre pochi nuovi operatori, e rispolverare l'uso di alcuni altri già noti. Tratteremo inoltre alcune problematiche elementari di impaginazione.
L'utilizzo più diffuso del PostScript è senz'altro per la stampa di testi; nelle precedenti puntate abbiamo appena avuto il tempo di stampare qualche stringa isolata, in quanto ci siamo occupati prevalentemente dell'altro utilizzo principale del PostScript, cioè della grafica.
bene, direte voi, è giunto finalmente il momento di vedere all'opera i potenti operatori del PostScript, grazie ai quali è possibile impaginare, incolonnare, sillabare, e fare tutte quelle manipolazioni tipiche dell'elaborazione testi.
Se questo è il vostro pensiero, state per subire una
delusione; infatti questi operatori non esistono; sarebbe come
pretendere di avere, in Basic, gli operatori matematici che
permettono di risolvere un sistema di equazioni differenziali o,
in Cobol, quelli per compilare la dichiarazione dei redditi. Per fare
queste cose è necessario apprendere l'uso di operatori molto
più semplici, come le moltiplicazioni in Basic o i formati di
stampa in Cobol, ed utilizzarli per scrivere programmi che realizzino
queste operazioni più complesse.
Definiamo qualche termine tipografico
Probabilmente molti dei concetti che adesso definiremo sono
noti alla maggior parte dei voi, dato che l'uso dei
word-processor è ormai così diffuso, ma riteniamo vantaggioso
per tutti partire da una base comune di terminologia, che ci
sarà utile anche per precisare alcuni concetti di cui ci siamo
già occupati. Gli esperti di composizione tipografica ci
scuseranno se semplificheremo od approssimeremo alcuni concetti,
al fine di non appesantire troppo l'esposizione. In parecchie situazioni
definiremo un termine utilizzando la lingua italiana oppure
quella inglese, a seconda della consuetudine prevalente; nel caso
esse siano ambedue comunemente utilizzate, ne utilizzeremo abitualmente
solo una, ma forniremo almeno una volta la traduzione fra
parentesi.
- Un font di carattere (in italiano tipo di carattere) è la raccolta ordinata di tutti i caratteri di uso normale (lettere maiuscole e minuscole, numeri, segni di interpunzione, caratteri speciali e lettere accentate), disegnati con certe caratteristiche comuni, che di solito comprende anche segni non presenti nella lingua italiana, ma che sono definiti in altri lingue, come tilde, dieresi, dittonghi, eccetera. Esso viene individuato da tre parametri fondamentali; il font, il corpo e lo stile. Nel campo dell'informatica grafica si distinguono due tipi principali di font: screen font (font di schermo) e outlined font.
- Gli screen font sono font descritti per mezzo della bitmap di ciascun carattere; hanno il vantaggio di poter essere rappresentati direttamente e velocemente su un video, e lo svantaggio di essere meno precisi e più ingombranti in termini di spazio in memoria e su disco.
- Gli outlined font sono font descritti geometricamente fornendo il perimetro (linee, archi e curve) che descrive il carattere, il quale viene poi riempito col colore prescelto (di solito, ma non sempre, nero pieno); hanno il vantaggio di essere estremamente precisi e poco ingombranti, ma lo svantaggio di non poter essere rappresentati direttamente su un device raster (come un video od una stampante laser), ma di richiedere prima un certo numero di operazioni di trasformazione. La descrizione geometrica è di solito molto complessa e dettagliata; un solo carattere può richiedere anche parecchie decine di segmenti ed archi di curva.
- Gli stroked font sono una variazione degli outlined font, in cui il carattere viene descritto sempre in termini di entità geometriche, fornendo, invece del perimetro, l'asse e la larghezza di ciascun segmento del carattere. Per fissare le idee si pensi che più un carattere è formato da segmenti di spessore costante e più è adatto ad essere rappresentato con questo metodo; il tipico font stroked è il Courier, mentre un esempio di font outlined è il Times (si noti che quasi tutti i font PostScript sono outlined).
- Si indica con font (o tipo) di carattere la raccolta di una serie completa di caratteri, aventi a comune certe caratteristiche stilistiche che li rendono simili, piacevoli a guardarsi e di facile lettura, ed indicati di solito con un nome convenzionale o di fantasia; esempi noti sono Times, Courier, Helvetica, ma ne esistono centinaia di meno noti, alcuni dei quali sono copie esatte di altri font più famosi, a cui viene cambiato il nome per problemi di copyright.
- Il corpo di un tipo di caratteri è un numero che indica l'altezza del font di caratteri espressa in punti; tipograficamente un punto corrisponde quasi esattamente ad 1/72 di pollice, ed in PostScript un punto è esattamente 1/72 di pollice.
- Lo stile infine consiste in variazioni dell'aspetto
grafico di un certo font di caratteri, che ne conserva certe
caratteristiche comuni e ne varia altre; alcuni stili sono
grassetto (in inglese bold), corsivo (italic), sottolineato
(underline), ombreggiato (shadow), e così via.
Deve essere chiaro che, nel caso di font outlined o stroked, il file contenente un certo font di caratteri precisa sia il tipo che lo stile, ma lascia indeterminato il corpo, che può essere variato ingrandendo o rimpicciolendo per similitudine la stessa descrizione geometrica; in PostScript per convenzione, le fonti di carattere sono descritte a corpo 1 o 1000, e devono quindi essere comunque scalate per poterle utilizzare.
Gli utenti di software per Macintosh, di MS Windows o di GEM, che utilizzano font di tipo screen, si trovano in una situazione opposta. In questi casi infatti non si usano caratteri descritti geometricamente ma bitmapped. Il file di un certo screen font è descritto direttamente in termini di pixel accesi o spenti, e specifica quindi il font, il corpo e lo stile; in molti casi però esistono algoritmi che permettono di ricavare, dalla descrizione di un certo carattere di font e corpo dati ed in stile normale, una approssimazione accettabile della stessa lettera in grassetto, in corsivo od in altri stili. In pratica quindi il file di uno screen font precisa tipo e corpo, ma lascia libero (nei casi in cui non occorrano qualità elevate) lo stile.
Un modo molto utilizzato per classificare le varie famiglie di font è la suddivisione in caratteri con grazie (Courier, Times, Bookman, ecc.) e caratteri senza grazie, o caratteri bastoni (Helvetica, Geneva, Monaco).
- Le grazie sono quelle piccole sporgenze che si trovano alle estremità dei caratteri, come per esempio alla base e sulle braccia di una T maiuscola scritta in Times; servono, oltre che per un evidente scopo estetico, per facilitare la lettura, guidando l'occhio nel passaggio da una lettera all'altra. I caratteri con grazie sono preferiti per la stampa di libri e lunghi testi, mentre i caratteri bastoni vengono spesso utilizzati nella stampa di cataloghi.
Un'altra suddivisione importante è quella fra caratteri proporzionali (proportional) e non proporzionali (monospaced).
- Un font si dice proporzionale (come Times, Bookman,
Helvetica e Geneva) quando gli spazi che separano una lettera
dall'altra sono tutti uguali; questo significa che i rettangoli
(bounding box) che racchiudono esattamente ogni carattere sono di
dimensioni diverse, od in parole povere che le singole lettere
hanno larghezze diverse. I caratteri non proporzionali
(come Courier e Monaco) invece hanno lettere tutte della stessa
larghezza; questo significa che, data la diversa larghezza di lettere
come la i rispetto ad altre come la m, gli spazi bianchi che
separano le lettere di una parola saranno di dimensione diversa.
I font proporzionali si utilizzano nella maggioranza dei casi,
perché sono di lettura meno affaticante, mentre i non
proporzionali si riservano a quelle situazioni dove è importante
l'incolonnamento, come nel caso della stampa di tabelle o listati
di programmi.
Un testo può essere disposto nella pagina in molti modi diversi, anche limitandosi ai casi più semplici di pagine in cui non sono presenti elementi grafici, come fotografie, disegni o marchi. Innanzitutto il testo può essere disposto su una colonna (è il caso di molti libri) o su più colonne (giornali, riviste, ecc.); la scelta è dettata principalmente da considerazioni di carattere estetico e stilistico che vanno ben oltre gli scopi di questo corso, e che sono l'oggetto di interi trattati dedicati ai metodi per l'ottenimento di una pagina composta in maniera equilibrata.
All'interno di una colonna il testo può essere:
Un'altra distinzione importante per l'aspetto finale del testo è se viene sillabato oppure no.
Un testo sillabato con un programma di impaginazione viene di
solito memorizzato con il carattere ASCII 31 (Hex 1F) inserito
nei punti dove è possibile spezzare una parola. Si noti tuttavia
che, con la maggior parte dei word processor, se si sillaba un
testo e poi se ne varia in qualche modo l'impaginazione è
necessario ripetere l'operazione di sillabazione. Infatti i word
processor (ad esempio Microsoft Word 3.0) di solito non
inseriscono il carattere di sillabazione fra tutte le sillabe del
testo, ma soltanto in quei punti dove, data una certa
impaginazione, è necessario spezzare una parola. Diverso è il
caso dei programmi di sillabazione dedicati (Hypens!, TurboSplit,
ecc.) o dei programmi di impaginazione con sillabazione
automatica (es. Quark XPress); questi infatti, non conoscendo
come il testo è impaginato, inseriscono il carattere di
sillabazione fra tutte le sillabe del testo, oppure sillabano al
volo il testo ogni volta che esso o l'impaginazione vengono
variati. Se quindi ci si trova nella situazione di dover comporre
un testo realizzato con un word processor utilizzando un
programma di Desktop Publishing non dotato di sillabazione
automatica in italiano, conviene trattarlo con un programma di
sillabazione dedicato, in modo da evitare di dover risillabare e
verificare il testo ad ogni modifica dell'impaginazione.
Gli operatori di trattamento testi
Nella terza parte di questo corso abbiamo definito i
principali operatori di trattamento testi, cioè findfont,
scalefont, setfont e show. Ricordiamo brevemente che findfont
pone sullo stack degli operandi una copia del dizionario
contenente il font (nello stile) richiesto, scalefont
scala il font al corpo richiesto, setfont rende il font
sullo stack quello corrente per le successive operazioni di stampa,
ed infine show stampa la stringa fornita come argomento
usando il font corrente ed a partire dal punto corrente. Se,
memori delle passate esperienze con gli operatori grafici, avete pensato
che gli operatori dedicati al testo non fossero solo questi
quattro avete indovinato in pieno! Prima di passare a fare
qualche esempio, dobbiamo quindi introdurre alcuni nuovi
operatori.
Operatori di trattamento delle stringhe
Operatori di conversione
Operatori di trattamento dei font
Operatori di stampa
- stampa il carattere;
- pone il carattere stampato sullo stack;
- pone il carattere successivo sullo stack;
- esegue la procedura proc .
Quest'ultimo operatore è di particolare interesse; viene utilizzato in vari modi, il più comune dei quali è la stampa di un testo eseguendo ciò che viene chiamato kerning. Si chiama kerning l'operazione di modifica della spaziatura fra caratteri nel caso che un dato carattere sia seguito da un certo altro; facciamo un esempio (vedi Figura 1) e supponiamo che in un certo punto di un testo la lettera A sia seguita da una V. Con l'operatore show queste due lettere verrebbero stampate con una spaziatura standard, ma, poiché il lato destro della A ha la stessa inclinazione del lato sinistro della V, la spaziatura apparirebbe all'occhio più grande del normale.
Per fare in modo che questo non avvenga e che le lettere
appaiano uniformemente spaziate, è necessario riconoscere quando
nel testo sono presenti particolari coppie di caratteri, e
diminuire la spaziatura di un valore opportuno, diverso per
ciascuna di esse; questa operazione viene eseguita da una
procedura scritta dall'utente, che viene fornita come procedura
all'operatore kshow.
Qualche esempio
Un esempio elementare di impaginazione di un brevissimo testo è riportato nel programma del Listato 1, il cui output è mostrato in Figura 2. Si noti che questo programma non esegue nessun calcolo di impaginazione, cioè non sillaba le parole del testo, e non le distribuisce in righe, colonne e pagine; la realizzazione di queste funzioni più avanzate (ed anche più complesse) sarà oggetto di futuri esempi.
Il secondo esempio riguarda l'operatore kshow, utilizzato in maniera non standard, (cioè non per fare il kerning); esso viene infatti impiegato per stampare una parola con le lettere separate dal simbolo - (vedi Listato 2 e Figura 3).
Il terzo, e per questa volta ultimo, esempio (vedi Listato 3 e
Figura 4) produce la stampa dell'elenco dei font posseduti da una
stampante PostScript, sia inclusi nelle ROM che caricati temporaneamente
nella memoria. Si noti, nel loop ottenuto con l'operatore forall,
l'utilizzo dell'operatore pop per scartare il font vero e
proprio, posto sullo stack insieme al suo nome (è quest'ultimo
ovviamente che deve essere stampato).
To be continued .....
Per questa volta niente esercizi (siamo in attesa di vostre
soluzioni per quelli delle precedenti puntate). Ci risentiremo la
prossima volta per un approfondimento delle problematiche di
stampa di testi, dedicato all'ottenimento di effetti speciali di
stampa ed all'impaginazione di testi non formattati.
Copyright © 1985: Marco A. Calamari