Comments
Description
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