...

Righe e quadretti

by user

on
Category: Documents
13

views

Report

Comments

Transcript

Righe e quadretti
Righe e quadretti
Roberto Giacomelli
Articolo sul blog http://robitex.wordpress.com
e-mail: giaconet dot mailbox at gmail dot com
11 gennaio 2010
Sommario
In questo post verrà descritto il codice Metapost per disegnare le pagine a righe ed a quadretti
dei quaderni della scuola elementare, classe prima, ma anche tracciare le quadrettature della carta
millimetrata. Vengono anche definiti i riferimenti per imparare ed installare Metapost.
Indice
1
1 Download per gli impazienti
1
2 Quadretti
1
3 Righe
3
4 Carta millimetrata
4.1 Prima versione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Seconda versione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
6
5 Note pratiche
7
6 Licenza ed informazioni varie
6.1 Distribuzione/Citazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Colophon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
8
Download per gli impazienti
Dai link seguenti potete scaricare i fogli pronti per la stampa in formato PDF. Per le personalizzazioni
ed i perfezionamenti non vi resta che leggere l’intero post dove vi viene illustrato il codice che li realizza.
Pagina a quadretti
Pagina a righe
Carta Millimetrata
La stampa dei file richiede un attimo di attenzione perché il vostro lettore PDF potrebbe adattare la
pagina all’area stampabile che è leggermente più piccola per via dei margini. Meglio allora stampare senza
che siano settati parametri di adattamento. Notate anche che le dimensioni dei due file sono veramente
minuscole perché non contengono nessun font.
Per scaricare l’articolo intero in PDF cliccate questo link.
2
Quadretti
Se siete insegnanti di prima elementare (o genitori), può essere utile poter stampare pagine quadrettate
per la matematica od a righe per l’italiano. Ecco allora un simpatico post per inizio anno, in cui
disegneremo con Metapost i due fogli desiderati.
Ho misurato le dimensioni di un quaderno a quadretti A4 di prima elementare ottenendo che un
quadretto misura 5 mm: cambiando questo parametro all’inizio del sorgente e ricompilando (vedi l’ultimo
paragrafo Note pratiche), potete ottenere la dimensione del quadretto che volete.
1
Figura 1: Quaderno a quadretti
Per prima cosa posizioniamo l’origine del sistema di riferimento della figura in basso a destra. Il
codice Metapost è caratterizzato dalle due funzioni hline() e vline() che disegnano rispettivamente linee
orizzontali e verticali prendendo tre parametri: l’ordinata (o l’ascissa) della linea, lo spessore ed il colore
di penna da usare (le proprietà della penna passate come argomento saranno utili per la stampa della
pagina a righe). Si noti che le coordinate delle linee sono stati corretti di metà dello spessore di linea per
produrre una figura esattamente inclusa in una pagina di formato A4. Infatti, una linea orizzontale larga
quanto il foglio A4 e di ordinata per esempio 100mm si scriverebbe semplicemente come nel frammento di
codice seguente, ma così la linea uscirebbe di metà spessore utilizzando una penna pencircle. Riportiamo
quindi anche il codice per la linea entro pagina:
1
2
3
4
5
6
% linea sbordante di mezzo spessore agli estremi
draw (0 ,100 mm ) -- (210 mm ,100 mm );
% linea entro i margini di pagina
% assumendo che lo spessore della penna sia 1 pt
draw (0.5 pt ,100 mm ) -- (210 mm -0.5 pt ,100 mm );
La griglia a quadretti sarà poi ottenuta con due cicli for, le cui variabili intere determineranno la
posizione della linea sul foglio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
% imposta il nome del file di putput contenente il disegno
% come nomefilesorgente . mps
outputtemplate :="% j. mps ";
% Quaderno a quadretti
beginfig (1)
% dimensione di pagina ( A4 )
pagewidth := 210 mm ;
pageheight := 297 mm ;
% dimensione del quadretto
q := 5 mm ;
% numero colonne e righe
nx := floor ( pagewidth /q ) -1;
ny := floor ( pageheight /q ) -1;
% funzione di disegno riga verticale
def vline ( expr x , sp , col )=
draw (x ,0+ sp /2) - -(x , pageheight - sp /2)
withpen pencircle scaled sp
withcolor col ;
enddef ;
% funzione di disegno riga orizzontale
2
Figura 2: Quaderno a righe (click to download the PDF file)
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def hline ( expr y , sp , col )=
draw (0+ sp /2 , y ) - -( pagewidth - sp /2 , y)
withpen pencircle scaled sp
withcolor col ;
enddef ;
% loop di disegno righe verticali
for i =0 upto nx :
vline (q /2+ i*q , 0.32 pt , 0.7 white );
endfor ;
% loop di disegno righe orizzontali
for i =0 upto ny :
hline (q /2+ i*q , 0.32 pt , 0.7 white );
endfor ;
endfig ;
end
3
Righe
Il quaderno a righe per l’italiano della prima elementare è un po’ più complicato perché le righe
orizzontali sono diversamente spaziate. L’altezza di una riga è di 19mm con due spaziature da 7mm per
avere una riga centrale di 5mm (la figura in alto illustra questo tipo di spaziatura). Inoltre le due righe
verticali esterne sono colorate in rosso cupo.
Nel codice seguente si è assunto un sistema di riferimento con origine nell’angolo in alto a sinistra
(semplicemente perché ho misurato il margine superiore di 27.5mm).
1
2
3
4
5
6
7
8
9
10
11
12
13
outputtemplate :="% j. mps ";
% Quaderno a righe
beginfig (1)
pagewidth := 210 mm ;
pageheight := 297 mm ;
h1 := 7 mm ;
h2 := 5 mm ;
hb := 27.5 mm ;
x1 := 18 mm ;
x2 := x1 + 170 mm ;
3
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
col := 28 mm ;
% funzione di disegno riga verticale
def vline ( expr x , sp , col )=
draw (x , -0 - sp /2) - -(x ,- pageheight + sp /2)
withpen pencircle scaled sp
withcolor col ;
enddef ;
% funzione di disegno riga orizzontale
def hline ( expr y , sp , col )=
draw (0+ sp /2 , y ) - -( pagewidth - sp /2 , y)
withpen pencircle scaled sp
withcolor col ;
enddef ;
def row ( expr y )=
hline (y -h1 , 0.28 pt , 0.7 white );
hline (y -h1 -h2 , 0.28 pt , 0.7 white );
hline (y -2* h1 -h2 , 0.28 pt , 0.7 white );
enddef ;
vline (x1 , 0.32 pt , 0.8 red );
vline (x2 , 0.32 pt , 0.8 red );
hline (-hb , 0.28 pt , 0.7 white );
for i =0 upto 12:
row (-hb -i *(2* h1 + h2 ));
endfor ;
for i =0 upto 4:
vline ( x1 + col +1 mm +i* col , 0.28 pt , 0.7 white );
endfor ;
endfig ;
end
4
Carta millimetrata
Il formato della carta millimetrata prevede una quadrettatura principale ogni centimetro, una secondaria
interna ogni 5mm, e la quadrettatura più sottile ad ogni millimetro. L’origine del sistema di riferimento
della figura è sempre in alto a sinistra.
4.1
Prima versione
Nella prima versione del codice l’idea è quella di disegnare le righe orizzontali e verticali nei tre spessori
della carta millimetrata con 6 cicli for. Si inizia con le linee sottili poi si reimposta spessore e colore
della penna per quelle intermedie e così via. Questo ordine fa in modo che quando le linee verticali ed
orizzontali si sovrappongono quelle più scure non vengano segnate con colore meno intenso. Dal punto di
vista del linguaggio di Metapost nel codice si è utilizzato la funzione mod che restituisce il resto della
divisione tra i due operandi.
1
2
3
4
5
6
7
8
9
10
11
12
13
outputtemplate :="% j. mps ";
% Foglio di carta millimetrata
%
Origine sistema di riferimento :
%
in alto a sinistra del foglio
beginfig (1)
u := 1 mm ;
pagewidth := 210;
pageheight := 297;
% funzione di disegno riga verticale
def vline ( expr x )=
draw (x*u , -sp /2) - -( x*u , - pageheight *u+ sp /2);
4
Figura 3: Carta millimetrata (click to download)
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
enddef ;
% funzione di disegno riga orizzontale
def hline ( expr y )=
draw ( sp /2 , y*u ) - -( pagewidth *u - sp /2 , y*u );
enddef ;
% line sottili
sp := 0.15 pt ;
drawoptions ( withpen pencircle scaled sp
withcolor 0.70 white );
for i =1 upto pageheight -1:
if not (i mod 5 = 0):
hline ( -i );
fi ;
endfor ;
for i =1 upto pagewidth -1:
if not (i mod 5 = 0):
vline ( i );
fi ;
endfor ;
% linee intermedie
sp := 0.30 pt ;
drawoptions ( withpen pencircle scaled sp
withcolor 0.55 white );
for i =5 step 10 until pageheight -1:
hline ( -i );
endfor ;
for i =5 step 10 until pagewidth -1:
vline ( i );
endfor ;
5
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
% linee pesanti ad 1 centimetro
sp := 0.42 pt ;
drawoptions ( withpen pencircle scaled sp
withcolor 0.45 white );
for i =10 step 10 until pageheight -1:
hline ( -i );
endfor ;
for i =10 step 10 until pagewidth -1:
vline ( i );
endfor ;
endfig ;
end
4.2
Seconda versione
La seconda soluzione utilizza due soli cicli for, uno per le linee orizzontali ed uno per le linee verticali,
e lo spessore è di volta in volta regolato da una funzione chiamata importance che in base a quale linea
sta per essere disegnata imposta colore e spessore opportuno. La funzione importance rende la soluzione
più elegante della precedente con il vantaggio che è immediato regolare il suo costrutto if per ottenere
qualsiasi tipo di quadrettatura, per esempio per aggiungere una marcatura ogni 10 centimetri. Tuttavia
tracciando prima tutte le righe in una direzione, le righe più chiare nell’altra si sovrappongono a quelle
più scure già presenti con un risultato in stampa non perfetto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
outputtemplate :="% j. mps ";
% Foglio di carta millimetrata
%
Origine sistema di riferimento :
%
in alto a sinistra del foglio
beginfig (1)
u := 1 mm ;
pagewidth := 210;
pageheight := 297;
% funzione di definizione dello spessore
def importance ( expr n )=
if n mod 10 = 0:
sp := 0.42 pt ;
drawoptions ( withcolor 0.425 white );
elseif n mod 5 = 0:
sp := 0.30 pt ;
drawoptions ( withcolor 0.550 white );
else :
sp := 0.15 pt ;
drawoptions ( withcolor 0.700 white );
fi ;
enddef ;
% funzione di disegno riga verticale
def vline ( expr x )=
importance (x );
draw (x*u , -sp /2) - -( x*u , - pageheight *u+ sp /2)
withpen pencircle scaled sp ;
enddef ;
% funzione di disegno riga orizzontale
def hline ( expr y )=
importance (y );
draw ( sp /2 , y*u ) - -( pagewidth *u - sp /2 , y*u)
withpen pencircle scaled sp ;
enddef ;
for i =1 upto pageheight -1:
hline ( -i );
endfor ;
6
42
43
44
45
46
47
for i =1 upto pagewidth -1:
vline ( i );
endfor ;
endfig ;
end
5
Note pratiche
Per una prima introduzione a Metapost potete leggerla in questo post, mentre per l’installazione è
conveniente installare una distribuzione TeX adatta per il vostro sistema come per esempio TeX Live che
vi rifornirà di splendidi programmi liberi e gratuiti come appunto Metapost. Per installare la TeX Live
vi sono molte guide che trovate pure in questo blog, per esempio questa per Ubuntu Linux e questa per
Windows.
Per la compilazione dei sorgenti occorre aprire una finestra di comando (o terminale) e digitare il
comando mpost nomefile dove nomefile è il file testuale che contiene il codice. La figura generata da
Metapost sarà il file dal nome nomefile.mps che sostanzialmente contiene istruzioni Postscript. Per
tradurle nel formato PDF occorre scrivere un file sorgente LaTeX e compilarlo con pdflatex come il
seguente (modificare opportunamente il nome del file da includere):
1
2
3
4
5
6
7
8
9
10
11
\ documentclass { minimal }
% serve l ’ opzione hiresbb per leggere
% i valori del bounding box di alta
% risoluzione
% l ’ immagine vettoriale da inserire
% e ’ esattamente un rettangolo A4
\ usepackage [ hiresbb ]{ graphicx }
\ usepackage [ margin =0 pt , a4paper ]{ geometry }
\ begin { document }
\ noindent \ includegraphics { quadri . mps }
\ end { document }
In definitiva, la procedura classica per ottenere il PDF comprende due compilazioni la prima con
Metapost e la seconda con pdflatex. Per comodità vi riporto anche uno script in Lua sul cui file basta fare
un doppio click per far eseguire tutte le compilazioni (una sorta di make). Perché funzioni i file contenenti
il codice Metapost delle figure ed i sorgenti LaTeX per la produzione del PDF, devono essere chiamati
come risulta dai commenti iniziali del codice:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/ usr / bin / lua
- -[[
Quaderno a quadretti :
quadri . mp ( codice Metapost )
quadri . tex ( sorgente LaTeX )
Quaderno a righe
righe . mp ( codice Metapost )
righe . tex ( sorgente LaTeX )
- -]]
-- run metapost ( filename without extension ):
os . execute (" mpost righe ")
os . execute (" mpost quadri ")
-- run pdflatex ( filename without extension ):
os . execute (" pdflatex righe ")
os . execute (" pdflatex quadri ")
-- remove temporary file :
os . remove (" righe . log ")
os . remove (" quadri . log ")
os . remove (" righe . aux ")
os . remove (" quadri . aux ")
os . remove (" righe . mps ")
os . remove (" quadri . mps ")
Alla prossima e Buon Anno 2011!!!
7
6
Licenza ed informazioni varie
Questo articolo come tutto il materiale didattico/divulgativo del blog http://robitex.wordpress.com è
rilasciato sotto licenza Creative Commons “Attribuzione-Non commerciale-Non opere derivate” 2.5 Italia,
il cui testo integrale con valore legale è consultabile a questo indirizzo. Ciò significa che:
1. Bisogna sempre attribuire la paternità del materiale a http://robitex.wordpress.com;
2. Non si può usare il materiale per fini commerciali;
3. Non si può alterare o trasformare i contenuti, ne’ usarne stralci per creare altre opere.
Se esplicitamente indicato nei commenti iniziali, il codice relativo a programmi software è rilasciato
nella specifica licenza.
6.1
Distribuzione/Citazioni
Ogni volta che usi o distribuisci parti ridistribuibili quest’opera devi farlo secondo i termini con cui esse
sono state rilasciate e avendo cura di comunicare tali termini con chiarezza. Ricorda di inserire sempre un
hyperlink alla risorsa che ridistribuisci o citi.
Il modo migliore per dimostrarmi il vostro apprezzamento è semplicemente quello di linkare direttamente
le pagine del blog, senza copiare gli articoli in altri siti, oltre naturalmente a lasciare un commento. Ci
sono però casi in cui vorreste poter estrapolare alcune parole dai miei articoli per incuriosire i vostri lettori.
In quel caso la prassi convenuta e che, grazie a tutti i blogger seri, viene coscienziosamente rispettata, è
questa:
• Creare un “blockquote”, ossia un campo in cui è inserita una citazione;
• Inserire nel blockquote solo il primo periodo (le prime poche frasi) di un articolo, diciamo fino ad
arrivare al link “Leggi il resto. . . ”;
• Linkare la rimanente parte dell’articolo all’originale su http://robitex.wordpress.com.
Grazie per la collaborazione.
6.2
Colophon
Questo documento è stato composto con LATEX attraverso uno script in Lua chiamato wp2pdf che
elabora il file originale html del post pubblicato sul blog in WordPress. Si tratta di una versione migliorata
del codice pubblicato sul blog stesso. Per saperne di più contattatemi via posta elettronica all’indirizzo
nel titolo del documento, o lasciate un commento sul blog. Alla prossima!
8
Fly UP