[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Benché il linguaggio PostScript sia nato per le stampanti, disponendo di Ghostscript potrebbe essere usato anche per scrivere direttamente. Lo scopo di questo capitolo è quello di introdurre all'uso diretto del linguaggio PostScript, in modo molto semplice, facendo riferimento prevalentemente al livello 1, eventualmente con qualche annotazione sul livello 2, mentre il livello 3 diventa troppo complesso e non più utile per un utilizzo diretto.
A ogni modo, gli esempi che si fanno sono stati verificati con Ghostscript e non con una vera stampante PostScript.
Un file PostScript è un file di testo, in cui le righe sono terminate indifferentemente con <LF> oppure con <CR><LF>, che inizia con una riga simile al modello seguente:
%!PS-Adobe-livello_ps [EPSF-livello_eps]
Il livello è in pratica il numero di versione del linguaggio; per quanto riguarda il livello PostScript, si fa riferimento generalmente ai valori 1.0, 2.0 e 3.0. Il modello sintattico mostra la possibilità di aggiungere la stringa EPSF-livello_eps, con la quale si vuole specificare che si tratta di un file PostScript incapsulato. In altri termini, un file PostScript normale inizia più o meno come nell'esempio seguente, dove si fa riferimento al livello 2:
%!PS-Adobe-2.0
In tal caso si intende lavorare su una serie di pagine; al contrario, se si sta realizzando una sola immagine nell'ambito di uno spazio determinato, si aggiunge la dichiarazione del tipo incapsulato:
%!PS-Adobe-2.0 EPSF-1.2
In generale, il simbolo di percentuale (%) serve a introdurre dei commenti che non generano un risultato nella stampa; tuttavia, una sequenza di due simboli di percentuale ha un ruolo speciale per la dichiarazione di direttive importanti; inoltre, la stessa dichiarazione iniziale del tipo di file è preceduta da un simbolo percentuale. In generale, onde evitare equivoci, si indica un commento con un solo simbolo di percentuale seguito da almeno uno spazio:
% testo_commentato
Il commento può essere piazzato ovunque, tenendo presente che vale dal punto in cui appare, fino alla fine della riga.
Le direttive particolari che iniziano con due simboli di percentuale hanno la forma seguente:
%%direttiva[: argomenti]
In pratica, il nome delle direttive deve essere attaccato ai segni di percentuale; inoltre, se è prevista l'aggiunta di argomenti alla direttiva, dopo il nome della stessa appaiono due punti, seguiti da almeno uno spazio e dopo dagli argomenti previsti. Quello che segue è l'esempio di una struttura possibile per un file PostScript articolato su più pagine:
%!PS-Adobe-2.0
%%Creator: nome_del_redattore_del_file
%%DocumentPaperSizes: formato
%%EndComments
[%%BeginProlog
prologo]
%%EndProlog
%%Page: numero_mostrato pagina_reale
istruzioni_ps
showpage
[%%Page: numero_mostrato pagina_reale
istruzioni_ps
showpage]...
%%Trailer
%%EOF
Il tutto dovrebbe essere abbastanza intuitivo: le prime istruzioni speciali, fino a %%EndComments, descrivono il documento specificando in particolare le dimensioni della pagina; le istruzioni racchiuse tra %%BeginProlog e %%EndProlog possono servire per dichiarare delle funzioni utilizzate nel documento; le istruzioni relative a ogni singola pagina sono introdotte da %%Page: m n; la visualizzazione della pagina, dopo la sua costruzione, si ottiene con l'istruzione showpage; il file termina con %%Trailer e %%EOF.
A questo punto, conviene vedere subito come si può articolare un file PostScript che non contiene pagine, ma una sola immagine:
%!PS-Adobe-2.0 EPSF-1.2
%%Creator: nome_del_redattore_del_file
%%BoundingBox: 0 0 larghezza_in_punti altezza_in_punti
%%EndComments
[%%BeginProlog
prologo]
%%EndProlog
istruzioni_ps
showpage
%%Trailer
%%EOF
Si può osservare che la direttiva speciale %%BoundingBox va a sostituire %%DocumentPaperSizes, allo scopo di indicare l'area in cui vanno rappresentate le istruzioni.
A ogni modo, la direttiva %%BoundingBox può essere usata anche per un file PostScript diviso in pagine, quando si vuole indicare un formato non standard, oppure se si vuole essere precisi.
Il linguaggio PostScript è predisposto per fare riferimento a oggetti su un piano cartesiano ideale, in cui l'unità di misura normale è il punto tipografico, corrispondente secondo questo linguaggio a 1/72-esimo di pollice, pari a circa 0,352 78 mm. In condizioni normali, la pagina è collocata sul piano cartesiano ideale come si vede nella figura 225.1, dove lo zero per x e y corrispondono esattamente con l'angolo inferiore sinistro; tuttavia, è consentita la definizione di pagine collocate in posizioni differenti, se questo può servire in qualche modo.
|
Gli oggetti grafici vengono disegnati sul piano cartesiano ideale; quello che risulta trovarsi sull'area della pagina potrà essere stampato.
Il PostScript può essere visto come un linguaggio per disegnare (tracciare curve, riempire delle aree e piazzare dei caratteri tipografici). Tutto questo avviene quasi sempre indicando delle coordinate, dove spesso la posizione di partenza ha importanza. Le coordinate iniziali si modificano con l'istruzione moveto:
x y moveto
In pratica, si indicano due numeri, seguiti dalla parola chiave moveto. Il significato è molto semplice: il primo numero esprime la coordinata orizzontale (asse X), il secondo la coordinata verticale (asse Y). I valori si esprimono in punti tipografici.
Le istruzioni più importanti che iniziano con due segni di percentuale sono elencate brevemente nella tabella 225.1. Tuttavia, è il caso di aggiungere qualche piccola indicazione a proposito di alcune di queste.
Tabella 225.1. Alcune istruzioni che iniziano con due segni di percentuale.
Istruzione | Descrizione |
%%Creator: nome | Il nome del programma che ha composto il file. |
%%DocumentPaperSizes: formato | Formato della carta. |
%%BoundingBox: x1 y1 x2 y2 | Collocazione e dimensione della carta: da x1 y1 a x2 y2. |
%%Title: titolo | Titolo del documento. |
%%CreationDate: data | Data e ora di creazione del documento. |
%%Pages: n | Quantità di pagine contenuta. |
%%PageOrder: Ascend|Descend | Ordine di apparizione delle pagine: ascendente o discendente. |
%%EndComments | Fine dell'intestazione con le informazioni generali. |
%%BeginProlog | Inizia un'area di definizione delle funzioni. |
%%EndProlog | Termina l'area di definizione delle funzioni. |
%%BeginSetup | Inizia un'area per l'inserimento di istruzioni di stampa. |
%%EndSetup | Termina l'area delle di istruzioni di stampa. |
%%Page: x n | Inizia la pagina n-esima, rappresentata come x. |
%%Trailer | Conclude la serie delle pagine. |
%%EOF | Conclude definitivamente il file. |
L'istruzione %%DocumentPaperSizes serve intuitivamente per elencare le dimensioni possibili delle pagine. In generale si indica una sola parola chiave che esprime sinteticamente la dimensione della pagina, come si vede nella tabella 225.2. Probabilmente non conviene andare al di fuori di pochi standard; eventualmente è preferibile indicare le coordinate esatte attraverso l'istruzione %%BoundingBox.
Tabella 225.2. Formati di stampa comuni, indicabili come argomento dell'istruzione %%DocumentPaperSizes. Le dimensioni non sono necessariamente quelle reali, ma quelle conosciute dal linguaggio PostScript.
formato | larghezza | altezza | larghezza | altezza | larghezza | altezza |
punti | punti | pollici | pollici | cm | cm | |
letter | 612 | 792 | 8,50 | 11,00 | 21,59 | 27,94 |
legal | 612 | 1 008 | 8,50 | 14,00 | 21,59 | 35,56 |
a3 | 842 | 1 190 | 11,694 4 | 16,527 8 | 29,7 | 42 |
a4 | 595 | 842 | 8,263 89 | 11,694 4 | 21 | 29,7 |
a5 | 421 | 595 | 5,847 22 | 8,263 89 | 14,85 | 21 |
b4 | 709 | 1 002 | 9,847 22 | 13,916 7 | 25,011 9 | 35,348 3 |
b5 | 501 | 709 | 6,958 33 | 9,847 22 | 17,674 2 | 25,011 9 |
%%BoundingBox consente di indicare la posizione dell'angolo inferiore sinistro e di quello superiore destro della pagina. Di solito, le prime due coordinate che esprimono proprio la posizione dell'angolo inferiore sinistro, sono azzerate, a indicare che si parte dallo zero degli assi cartesiani ideali della superficie.
Le istruzioni PostScript sembrano non avere inizio e fine, perché si possono collocare su una o più righe indifferentemente, senza alcun segno di separazione. Per esempio, si può scrivere
newpath 100 100 moveto 100 431 lineto 350 431 lineto 350 100 lineto closepath
oppure, indifferentemente
newpath 100 100 moveto 100 431 lineto 350 431 lineto 350 100 lineto closepath
e in tanti altri modi intermedi. È evidente che se si vuole scrivere del codice intelligibile occorre uno stile (come in tutti i linguaggi di programmazione).
la cosa che può apparire strana inizialmente è il fatto che i comandi che prevedono l'uso di argomenti, ricevono questi dati prima del nome del comando stesso. Per esempio, è già stata mostrata l'istruzione moveto, che riceve l'indicazione delle coordinate prima del suo nome.
La cosa più semplice che si può fare per cominciare a comprendere il linguaggio è quella di disegnare delle linee. In generale, il disegno avviene partendo dalle coordinate correnti, per cui questa indicazione non appare in modo esplicito, ma se necessario si definisce con uno spostamento attraverso l'istruzione moveto. Per le linee rette si possono usano le istruzioni lineto e rlineto, dove la prima rappresenta un movimento con coordinate di destinazione assolute, mentre la seconda fa riferimento a coordinate di destinazione relative a quelle di partenza. Si osservino gli esempi seguenti, con cui si disegna lo stesso rettangolo largo 20 punti e alto 10 punti, a partire dalla coordinata x,y=0,0:
0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto 0 0 lineto
0 0 moveto 0 10 rlineto 20 0 rlineto 0 -10 rlineto -20 0 rlineto
In pratica, l'istruzione lineto vuole l'indicazione del punto finale espresso come coordinata assoluta, mentre rlineto vuole una coordinata relativa alla posizione corrente.
|
Il disegno non viene tracciato se alla fine non si aggiunge un'istruzione stroke, che non richiede argomenti. Dopo un'istruzione stroke viene perduto il riferimento alle coordinate correnti, per cui, se necessario, si deve ricominciare con un'istruzione moveto. Si osservi l'esempio seguente, in cui lo stesso rettangolo viene disegnato un segmento alla volta, riposizionando sempre le coordinate iniziali:
0 0 moveto 0 10 lineto stroke 0 10 moveto 20 10 lineto stroke 20 10 moveto 20 0 lineto stroke 20 0 moveto 0 0 lineto stroke
Naturalmente, se si preferisce questo modo di utilizzo dell'istruzione stroke, si può anche cambiare un po' lo stile di scrittura:
0 0 moveto 0 10 lineto stroke 0 10 moveto 20 10 lineto stroke 20 10 moveto 20 0 lineto stroke 20 0 moveto 0 0 lineto stroke
Le linee, oltre alla collocazione, hanno due caratteristiche importanti: lo spessore e il colore. Lo spessore predefinito dovrebbe essere di un punto, mentre il colore predefinito è il nero. Si modifica lo spessore delle linee con l'istruzione setlinewidth e la colorazione (grigia) con l'istruzione setgray. Entrambi ricevono un solo argomento numerico, che nel primo caso esprime lo spessore della linea e nel secondo rappresenta la luminosità, con un valore che va da zero a uno (zero rappresenta il nero e uno rappresenta il bianco).
Le istruzioni che alterano le caratteristiche delle linee, hanno effetto solo nel momento in cui appare l'istruzione stroke. In questo modo, si possono indicare le linee desiderate, quindi si possono cambiare le loro caratteristiche e infine si possono tracciare. |
L'esempio seguente disegna lo stesso rettangolo già presentato, specificando un tratto di due punti tipografici di colore grigio (esattamente a metà tra il bianco e il nero). Si può osservare che le istruzioni setlinewidth e setgray sono state collocate subito prima dell'istruzione stroke:
0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto 0 0 lineto 2 setlinewidth 0 setgray stroke
Si possono tracciare delle linee per disegnare un poligono. L'esempio già visto rappresenta proprio un rettangolo, ma non è stato dichiarato esplicitamente il fatto che le linee devono congiungersi. Per farlo occorre dichiarare un percorso, con l'istruzione newpath, che si conclude con closepath. Si osservi la variante seguente al disegno del rettangolo:
newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath 2 setlinewidth 0 setgray stroke
In pratica, si tracciano le prime tre linee, mentre l'ultima viene indicata implicitamente con la richiesta di chiudere il percorso con l'istruzione closepath.
Il fatto di avere realizzato un poligono, consente di definire il colore di riempimento. In condizioni normali, quando non è stato fissato alcunché, il poligono è trasparente, mentre se si fissa un riempimento diventa opaco e il colore ricopre anche il bordo tracciato con le linee.(1) Il colore di riempimento si definisce con l'istruzione fill e il colore usato è quello già fissato con l'istruzione setgray.
newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath % 2 setlinewidth 0.5 setgray fill stroke
L'esempio mostra l'utilizzo dell'istruzione fill per colorare il rettangolo di grigio. Dal momento che lo spessore delle linee non serve più, l'istruzione relativa è stata commentata. Volendo mettere un bordo a questo rettangolo, occorre ridisegnarne sopra un altro trasparente, con il tratto desiderato:
newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath 0.5 setgray fill stroke newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath 2 setlinewidth 0 setgray stroke
Per completare l'argomento sulle linee e sui poligoni, conviene mostrare un esempio completo, che poi viene mostrato nella figura 225.3. Si osservi che l'area in cui viene disegnato è lo stretto indispensabile per contenerlo: si estende da -1,-1 a 21,11, per dare lo spazio allo spessore della riga che è di due punti.
%!PS-Adobe-2.0 EPSF-1.2 %%Creator: Daniele Giacomini %%BoundingBox: -1 -1 21 11 %%EndComments % Disegna un rettangolo newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath 0.5 setgray fill stroke newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath 2 setlinewidth 0 setgray stroke showpage %%Trailer %%EOF
|
Si può disegnare un arco o un cerchio completo con l'istruzione arc. In questo caso, non c'è bisogno di fare riferimento a una posizione corrente; anzi, è meglio eliminare tale informazione con un'istruzione stroke preventiva. L'istruzione arc richiede l'indicazione delle coordinate del centro del cerchio, la lunghezza del raggio, l'angolo di partenza e l'angolo di destinazione in direzione antioraria. L'esempio seguente disegna un arco con centro nella posizione x,y=100,150, con raggio di 50 punti, da 0 a 90 gradi:
100 150 50 0 90 arc
In pratica, si tratta di quanto si vede nella figura 225.4.
|
Se prima di disegnare il cerchio o l'arco di cerchio si tracciano altre linee, è conveniente chiudere i disegni precedenti con l'istruzione stroke, per evitare di avere delle coordinate correnti attive nel momento in cui si usa l'istruzione arc. Diversamente, si otterrebbe una linea che collega le coordinate iniziali con il punto di partenza dell'arco disegnato. |
Per disegnare un cerchio completo, basta indicare l'intervallo di angoli da 0 a 360 gradi. Se si vuole riempire il cerchio, non è necessario utilizzare le istruzioni newpath e closepath, perché si ottiene sempre un riempimento, anche quando il cerchio non è completo.
Il disegno di una curva è invece più complicato: si usa l'istruzione curveto, ma oltre alle coordinate di destinazione, bisogna indicare la tangente del punto di inizio e del punto di destinazione. Prima di dare altre spiegazioni, conviene partire da un esempio visivo, come si vede nella figura 225.5. La curva da prendere in considerazione è rappresentata con un tratto più scuro. Si possono vedere due linee oblique, che partono rispettivamente dal punto di inizio e dal punto di arrivo della curva: si tratta delle tangenti che stabiliscono la curvatura di partenza e di arrivo della linea disegnata. L'istruzione necessaria a disegnare questa curva è la seguente:
0 50 moveto 200 100 0 0 200 50 curveto
|
In pratica:
le coordinate di partenza sono x,y=0,50;
la prima tangente è la linea che va da x,y=0,50 (le coordinate di partenza) a x,y=200,100;
la seconda tangente è la linea che va da x,y=200,50 (le coordinate di arrivo) a x,y=0,0;
le coordinate di arrivo sono x,y=200,50.
Naturalmente, la lunghezza delle linee indicate come tangenti rendono più o meno importante la curvatura relativa. Si osservi, nella figura 225.6, come si trasforma il disegno se si accorcia la linea tangente di arrivo come nell'esempio seguente:
0 50 moveto 200 100 100 25 200 50 curveto
|
Il modello sintattico per l'utilizzo dell'istruzione curveto è quindi il seguente:
x_tangente_inizio y_tangente_inizio x_tangente_fine y_tangente_fine x_fine_curva y_fine_curva curveto
Le impostazioni grafiche, come quelle che si possono fissare con le istruzioni setlinewidth e setgray, possono essere salvate e recuperate da una pila apposita. Si utilizza l'istruzione gsave per salvare l'impostazione corrente e grestore per recuperare le ultime impostazioni salvate. Si osservi l'esempio seguente:
1 setlinewidth gsave 2 setlinewidth gsave 4 setlinewidth 50 120 moveto 200 120 lineto stroke grestore 50 125 moveto 200 125 lineto stroke grestore 50 130 moveto 200 130 lineto stroke
Vengono accumulate tre spessori differenti per le linee, quindi si procede disegnando tre linee, dopo ognuna delle quali viene recuperata l'ultima impostazione grafica. In pratica, la linea da 50,120 a 200,120 viene disegnata con un tratto di quattro punti; la linea da 50,125 a 200,125 viene disegnata con un tratto di tre punti; la linea da 50,130 a 200,130 viene disegnata con un tratto di un punto di spessore.
Quando si disegna qualcosa, può essere opportuno racchiudere le modifiche alle caratteristiche entro una coppia gsave-grestore, onde evitare di coinvolgere le impostazioni precedenti, che potrebbero riguardare il resto del file:
gsave 4 setlinewidth 50 120 moveto 200 120 lineto stroke grestore
Nell'esempio che appare sopra, si inizia salvando le impostazioni e impostando uno spessore di quattro punti. Viene quindi indicata la linea e fissata con l'istruzione stroke. Al termine si recuperano le impostazioni grafiche. Nello stesso modo, si potevano salvare e modificare le impostazioni grafiche subito prima dell'istruzione stroke:
50 120 moveto 200 120 lineto gsave 4 setlinewidth stroke grestore
Attraverso la tecnica del salvataggio e del recupero delle caratteristiche grafiche, è possibile disegnare un poligono bordato senza dover ripetere due volte il tratto del contorno. In pratica, il comando di riempimento viene dato entro un ambiente protetto da gsave e grestore, come si vede nell'esempio seguente:
%!PS-Adobe-2.0 EPSF-1.2 %%Creator: Daniele Giacomini %%BoundingBox: -1 -1 21 11 %%EndComments % Disegna un rettangolo newpath 0 0 moveto 0 10 lineto 20 10 lineto 20 0 lineto closepath gsave 0.5 setgray fill grestore 2 setlinewidth 0 setgray stroke showpage %%Trailer %%EOF
Il risultato è identico a quanto già visto nella figura 225.3.
È possibile spostare la posizione della superficie prima di dare altre istruzioni di scrittura di qualunque tipo. Si tratta in particolare delle istruzioni translate e di rotate. La prima di queste due sposta le coordinate 0,0 in una posizione nuova, prendendo come riferimento le coordinate precedenti; la seconda ruota gli assi attorno alle coordinate 0,0. Per esempio, con le istruzioni
50 100 translate 50 50 moveto 100 50 lineto stroke
si ottiene una linea orizzontale dalla posizione 100,150 alla posizione 150,150. Infatti, l'istruzione translate sposta le coordinate 0,0 verso 50,100, secondo la collocazione precedente. La figura 225.7 mostra la collocazione iniziale e lo spostamento; la linea disegnata è quella che appare con tratto più scuro.
|
L'istruzione rotate fa ruotare il piano cartesiano sul centro delle coordinate 0,0. La figura 225.8 mostra cosa accade se si sposta lo zero nella posizione 0,0 e poi si ruota di 30 gradi, con le istruzioni seguenti:
50 50 translate 30 rotate 50 50 moveto 100 50 lineto stroke
|
Lo spostamento e la rotazione del piano sono informazioni che possono essere salvate e recuperate con le istruzioni gsave e grestore. Pertanto, prima di uno spostamento o di una rotazione, conviene salvare la situazione, per recuperarla quando questi cambiamenti non servono più.
gsave 50 50 translate 30 rotate 50 50 moveto 100 50 lineto stroke grestore
Oltre allo spostamento e alla rotazione del piano, si può modificare la scala, con l'istruzione scale. Gli argomenti dell'istruzione sono due valori, che esprimono il rapporto nei confronti dell'asse X e nei confronti dell'asse Y. Dopo la modifica della scala, le coordinate 0,0 rimangono centrate sulla stessa posizione iniziale. Per esempio,
1 0.5 scale
serve a fare in modo che la scala dell'asse Y risulti schiacciata alla metà del valore precedente, mentre l'asse X non viene modificato. Anche le alterazioni della scala possono essere recuperate da un'istruzione grestore.
Un gruppo di istruzioni, racchiuso tra parentesi graffe, può essere ripetuto più volte con l'istruzione repeat:
n {istruzioni} repeat
Evidentemente, perché ciò abbia un senso, è necessario che le istruzioni da ripetere creino ogni volta un cambiamento, come una rotazione o uno spostamento di assi. Per esempio,
36 {10 rotate 10 10 moveto 30 30 lineto} repeat stroke
Disegna una stellina attorno alle coordinate 0,0, con un diametro di 80 punti. In questo caso, la rotazione riporta alla fine gli assi nella posizione di partenza, ma in generale conviene salvare e ripristinare la situazione:
gsave 36 {10 rotate 10 10 moveto 30 30 lineto} repeat stroke grestore
|
Per poter scrivere sulla superficie del foglio, è necessario selezionare il tipo di carattere e la dimensione prima di tutto. Questo si ottiene con alcune istruzioni, che in pratica conviene usare assieme:
/carattere findfont dimensione scalefont setfont
Per esempio, per usare il carattere Helvetica alto 12 punti, si usa l'istruzione seguente:
/Helvetica findfont 12 scalefont setfont
La scrittura vera e propria avviene con l'istruzione show, con la quale si colloca il testo a partire dalle coordinate correnti, per cui si fa precedere normalmente da un'istruzione moveto:
(testo) show
Come si vede dal modello sintattico, il testo deve essere scritto tra parentesi tonde e collocato prima della parola chiave show.
Dovendo usare le parentesi tonde per delimitare il testo da visualizzare, deve esserci un modo per poter togliere a queste il valore sintattico normale, quando c'è la necessità di rappresentarle nel testo. In pratica si usano le sequenze \( e \) per rappresentarle; inoltre, dal momento che la barra obliqua inversa ha un significato speciale, per rappresentare questa si usa la sequenza \\. La tabella 225.3 riepiloga le sequenze speciali più importanti per il testo delimitato tra parentesi tonde.
Tabella 225.3. Alcune sequenze speciali per la scrittura di testo delimitato da parentesi tonde, con l'istruzione show.
Sequenza | Descrizione |
\\ | Barra obliqua inversa. |
\( | Parentesi tonda aperta. |
\) | Parentesi tonda chiusa. |
\nnn | Simbolo corrispondente al numero, in ottale, secondo la codifica attuale. |
Se si seleziona un carattere non disponibile, viene utilizzato il Courier. La tabella 225.4 elenca i nomi standard dei tipi di carattere fondamentali che si possono utilizzare con il linguaggio PostScript.
Tabella 225.4. Nomi dei tipi di carattere comuni che possono essere utilizzati con il linguaggio PostScript.
Un'istruzione simile a show, si occupa di visualizzare il testo, controllandone lo spostamento in corrispondenza di un simbolo particolare:
x y n (testo) widthshow
L'istruzione widthshow serve a fissare uno spostamento orizzontale (x) e uno spostamento verticale (y), subito dopo il simbolo corrispondente al numero n. In pratica, se alla fine di ogni spazio si vuole aggiungere uno spazio orizzontale di due punti, si usa la forma seguente:
2 0 32 (testo) widthshow
Questa è anche la situazione tipica, in cui si vuole allargare lo spazio tra le parole, per adattare la riga scritta alla larghezza disponibile. Naturalmente, lo spazio normale può anche essere ridotto, se lo si desidera, utilizzando valori orizzontali negativi, come nell'esempio seguente:
-1 0 32 (testo) widthshow
Se si attribuisce un valore anche al secondo argomento numerico, si ottiene uno spostamento verticale, come nell'esempio seguente, in cui ogni parola viene alzata di due punti rispetto alla precedente:
0 2 32 (testo) widthshow
Quando si scrive un documento composto da diverse pagine, diventa utile la possibilità di recuperare le impostazioni precedenti, prima di passare alla pagina successiva. È già stata presentata la coppia di istruzioni gsave e grestore, specifica per le impostazioni grafiche. Per tutto, si può usare invece la coppia save e restore. Di solito si inizia una pagina con save e si conclude con restore, in modo da garantire il recupero di tutto, senza dimenticare qualcosa.
%!PS-Adobe-2.0
%%Creator: nome_del_redattore_del_file
%%DocumentPaperSizes: formato
%%EndComments
[%%BeginProlog
prologo]
%%EndProlog
%%Page: numero_mostrato pagina_reale
save
istruzioni_ps
showpage
restore
[%%Page: numero_mostrato pagina_reale
save
istruzioni_ps
showpage
restore]...
%%Trailer
%%EOF
Le istruzioni save e restore dovrebbero essere sempre annidate correttamente, nel senso che ogni istruzione restore va a recuperare l'ultima istruzione save che non sia già stata presa in considerazione da un altro restore. Se viene eseguito un restore che non risulta abbinato a un'istruzione save, si genera un errore irreversibile.
Per ovviare all'inconveniente di dover seguire attentamente l'uso delle istruzioni save e restore, si può attribuire un «nome» a un'istruzione save, richiamando lo stesso nome nel momento del restore:
/nome save def
...
...
...
nome restore
La cosa non è molto intuitiva, ma funziona così: il nome che viene dichiarato nel momento dell'uso dell'istruzione save, viene posto davanti all'istruzione restore. Se nello spazio tra queste due istruzioni apparivano altre istruzioni save, queste sono tutte annullate. Segue un esempio:
/Mia_Configurazione_Predefinita save def ... ... ... Mia_Configurazione_Predefinita restore
Tabella 225.5. Tabella riassuntiva delle istruzioni più semplici del linguaggio PostScript.
Istruzione | Descrizione |
x y moveto | Cambia le coordinate correnti senza disegnare. |
x y rmoveto | Cambia le coordinate correnti in modo relativo. |
x y lineto | Traccia una linea fino alle coordinate assolute indicate. |
x y rlineto | Traccia una linea fino alle coordinate relative indicate. |
x y m n o arc | Arco con centro in x,y, raggio m, da n a o gradi, in senso antiorario. |
x y m n o arcn | Arco con centro in x,y, raggio m, da n a o gradi, in senso orario. |
x y x y x y curveto | Curva indicando le coordinate di arrivo delle tangenti e infine della curva. |
x y translate | Fa sì che x,y corrispondano alle nuove coordinate 0,0. |
n rotate | Ruota di n il fondo, con centro sulle coordinate 0,0. |
n {istruzioni} repeat | Ripete n volte le istruzioni tra parentesi graffe. |
n setlinewidth | Spessore delle linee. |
n setgray | Colorazione grigia: 0=nero; 1=bianco. |
fill | Riempie i poligoni e le aree racchiuse entro le curve. |
newpath | Inizia a disegnare un oggetto nuovo. |
closepath | Unisce l'ultimo punto disegnato con il punto di partenza. |
stroke | Fissa le linee tracciate. |
gsave | Accumula le impostazioni grafiche. |
grestore | Recupera le impostazioni. |
save | Accumula tutte le impostazioni della pagina. |
restore | Recupera le impostazioni della pagina. |
/nome save def | Accumula tutte le impostazioni dichiarando un nome. |
nome restore | Recupera le impostazioni riferite a quel nome. |
/nome findfont dim scalefont setfont | Seleziona il carattere e la dimensione indicata. |
(testo) show | Scrive il testo indicato usando il carattere già stabilito. |
x y n (testo) widthshow | Scrive il testo indicato con uno spostamento x,y alla fine del simbolo n. |
x 0 32 (testo) widthshow | Scrive il testo indicato con l'aggiunta di uno spazio di x tra le parole. |
Cappella Archive
David Byram-Wigfield, Practical PostScript
David Byram-Wigfield, Making an electronic book
Paul Bourke, PostScript Tutorial
<http://astronomy.swin.edu.au/pbourke/dataformats/postscript/>
First Guide to PostScript
<http://www.cs.indiana.edu/docproject/programming/postscript/postscript.html>
Portable Document Format Reference Manual, 1999
<http://partners.adobe.com/asn/developer/acrosdk/docs/pdfspec.pdf>
daniele @ swlibero.org
1) Il bordo ha lo stesso colore fissato con l'istruzione setgray, per cui tutto diventa dello stesso colore.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome linguaggio_postscript_introduzione.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]