Robitex's Blog

Ideas in the web

Righe e quadretti


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.

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.

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:

% linea sbordante di metà spessore agli estremi
draw (0,100mm) -- (210mm,100mm);

% linea entro i margini di pagina
% assumendo che lo spessore della penna sia 1pt
draw (0.5pt,100mm) -- (210mm-0.5pt,100mm);

La griglia a quadretti sarà poi ottenuta con due cicli for, le cui variabili intere determineranno la posizione della linea sul foglio.

% 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 := 210mm;
   pageheight:= 297mm;
   
   % dimensione del quadretto
   q := 5mm;
   
   % 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
   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.32pt, 0.7white);
   endfor;
   
   % loop di disegno righe orizzontali
   for i=0 upto ny:
      hline(q/2+i*q, 0.32pt, 0.7white);
   endfor;
endfig;
end

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.

Quaderno a righe (click to download the PDF file)

Quaderno a righe (click to download the PDF file)

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).

outputtemplate :="%j.mps";

% Quaderno a righe
beginfig(1)
   pagewidth := 210mm;
   pageheight:= 297mm;
   
   h1 := 7mm;
   h2 := 5mm;
   hb := 27.5mm;
   
   x1 := 18mm;
   x2 := x1 + 170mm;
   col := 28mm;
   
   % 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.28pt, 0.7white);
      hline(y-h1-h2, 0.28pt, 0.7white);
      hline(y-2*h1-h2, 0.28pt, 0.7white);
   enddef;
   
   vline(x1, 0.32pt, 0.8red);
   vline(x2, 0.32pt, 0.8red);
   
   hline(-hb, 0.28pt, 0.7white);
   
   for i=0 upto 12:
      row(-hb-i*(2*h1+h2));
   endfor;
   
   for i=0 upto 4:
      vline(x1+col+1mm+i*col, 0.28pt, 0.7white);
   endfor;
endfig;
end

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.

Carta millimetrata (click to download)

Carta millimetrata (click to download)

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.

outputtemplate :="%j.mps";

% Foglio di carta millimetrata
%   Origine sistema di riferimento:
%   in alto a sinistra del foglio
beginfig(1)
   u := 1mm;
   pagewidth := 210;
   pageheight:= 297;
      
   % funzione di disegno riga verticale
   def vline(expr x)=
      draw (x*u, -sp/2)--(x*u, -pageheight*u+sp/2);
   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.15pt;
   drawoptions(withpen pencircle scaled sp
               withcolor 0.70white);
   
   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.30pt;
   drawoptions(withpen pencircle scaled sp
               withcolor 0.55white);
   
   for i=5 step 10 until pageheight-1:
      hline( -i );
   endfor;
   
   for i=5 step 10 until pagewidth-1:
      vline( i );
    endfor;
   
   % linee pesanti ad 1 centimetro
   sp:= 0.42pt;
   drawoptions(withpen pencircle scaled sp
               withcolor 0.45white);
   
   for i=10 step 10 until pageheight-1:
      hline( -i );
   endfor;
   
   for i=10 step 10 until pagewidth-1:
      vline( i );
    endfor;
endfig;
end

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.

outputtemplate :="%j.mps";

% Foglio di carta millimetrata
%   Origine sistema di riferimento:
%   in alto a sinistra del foglio
beginfig(1)
   u := 1mm;
   pagewidth := 210;
   pageheight:= 297;
   
   % funzione di definizione dello spessore
   def importance(expr n)=
      if n mod 10 = 0:
         sp := 0.42pt;
         drawoptions(withcolor 0.425white);
      elseif n mod 5 = 0:
         sp := 0.30pt;
         drawoptions(withcolor 0.550white);
      else:
         sp := 0.15pt;
         drawoptions(withcolor 0.700white);
      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;
   
   for i=1 upto pagewidth-1:
      vline( i );
   endfor;
endfig;
end

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):

\documentclass{minimal}
% serve l'opzione hiresbb per leggere
% i valori del bounding box di alta
% risoluzione
% l'immagine vettoriale da inserire
% è esattamente un rettangolo A4
\usepackage[hiresbb]{graphicx}
\usepackage[margin=0pt,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:

#!/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!!!

About these ads

20 risposte a “Righe e quadretti

  1. ansys 14/02/2011 alle 12:01

    Ciao Roberto, belli questi “Righe e quadretti”.
    Ho conosciuto LaTeX proprio perché volevo inserire un grafico con griglia millimetrata. All’epoca lo feci con Matlab, ma Word non permette(va) l’inserimento di grafica vettoriale; così addio griglia.

    Iniziai quindi una serie di ricerche che mi portarono alla parola magica: LaTeX! Nel mio primo post sul GuIT, se non ricordo male, mi hai anche dato qualche dritta su pdfcrop (ero totalmente inesperto).

    Le ricerche nel tempo mi hanno portato poi aTikz quindi ho fatto tutto in LaTeX. Ti allego in basso il codice (sicuramente migliorabile).

    Ciao,
    ansys.


    \documentclass[a4paper]{minimal}

    \usepackage[centering,margin=0.5cm]{geometry}
    \usepackage{tikz}
    \pagestyle{empty}

    \begin{document}
    \noindent\begin{tikzpicture}
    \tikzset{Umm lines/.style={gray, ultra thin}}
    \tikzset{Cmm lines/.style={gray, very thin}}
    \tikzset{Ucm lines/.style={black, thin}}
    \draw[style=Umm lines, step=1.0mm] (0,0) grid +(20cm,28cm);
    \draw[style=Cmm lines, step=5.0mm] (0,0) grid +(20cm,28cm);
    \draw[style=Ucm lines, step=1.0cm] (0,0) grid +(20cm,28cm);
    \end{tikzpicture}

    \end{document}

    • robitex 14/02/2011 alle 12:33

      Mi sbaglio o il tuo codice produce delle linee nascoste invisibili perché più sottili?
      Grazie per avermi fatto (ri)apprezzare l’eleganza di TikZ!!!
      Ciao

      • ansys 14/02/2011 alle 12:46

        Se ho capito bene cosa intendi, si. Nel senso che viene creata una griglia di linee sottili (distanziate appunto di 1mm), poi una seconda griglia si sovrappone alla prima (con le linee ogni 5mm e spessore leggermente aumentato), ed infine la griglia principale con il massimo spessore che si sovrappone alle prime due.

        Lo spessore delle linee è dato da quelli chiavi predefinite (si chiamo cosi, vero?), ma volendo si può regolare anche a proprio piacimento, oppure, qualora esista secondo un preciso uno standard (non so, ISO?)

        Il codice è certamente migliorabile, dal punto di vista dell’efficacia (e questo dipende da ciò che si vuole ottenere), e dal punto di vista dell’efficienza (cioè raggiungere lo scopo con il minor numero possibile di comandi e/o linee di codice).

        Alla prossima,
        ansys.

  2. ansys 14/02/2011 alle 12:48

    EDIT: perdona i refusi nel messaggio: la fretta!! :-)

    • robitex 14/02/2011 alle 13:01

      Certo,
      il fatto che le linee si sovrappongano è un effetto non rilevabile ne in visualizzazione ne in stampa, ed inoltre accettandolo, si scrive un codice molto più semplice grazie al fantastico disegno a grid di TikZ.
      Quindi la tua soluzione è perfetta al 99.999%!!!
      La carta millimetrata naturalmente, si potrebbe ottenere senza linee nascoste anche con TikZ, ma a prezzo di un codice molto più lungo e complicato del tuo.
      Grazie per l’idea che mi hai regalato!!
      Ciao

  3. ansys 14/02/2011 alle 17:39

    Metapost :roll: ? Sto praticamente a zero :( . Non ho mai fatto e letto nulla di MP pur sentendone parlare bene. Purtroppo esistono tanti strumenti belli da imparare (anche PSTricks, Asymptote) ma le giornate di 24 ore sono brevi per fare tutto.
    Hai qualche progetto su Metapost?

  4. ansys 25/02/2011 alle 17:13

    Codice snellito:

    \documentclass[a4paper]{minimal}

    \usepackage[centering,margin=0.5cm]{geometry}
    \usepackage{tikz}
    \pagestyle{empty}

    \begin{document}
    \noindent\begin{tikzpicture}[color=orange]
    \draw[line width=0.10pt, step=1.0mm] (0,0) grid +(20cm,28cm);
    \draw[line width=0.25pt, step=5.0mm] (0,0) grid +(20cm,28cm);
    \draw[line width=0.50pt, step=1.0cm] (0,0) grid +(20cm,28cm);
    \end{tikzpicture}
    \end{document}

    • robitex 25/02/2011 alle 19:47

      Grazie ansys,
      ammiro la sintassi di PGF ed i risultati grafici che produce.
      Il tuo codice conferma entrambe le cose.
      Al prossimo codice allora!
      Ciao

  5. Antonio 29/07/2011 alle 09:47

    Ciao Roberto,
    complimenti per il tuo blog pieno di informazioni e spunti interessanti!
    Grazie per la carta millimetrata, era da tempo che cercavo la ricetta per farla “in casa”.
    Sono riuscito, dopo aver risolto qualche problemino (Fedora 14) a compilare il codice per il foglio a righe e a questo proposito ti pongo questo quesito:
    come si può fare per utilizzare le righe o i quadretti come modello di pagina e “scriverci sopra” con LaTeX?

    • robitex 29/07/2011 alle 19:52

      Ciao Antonio,
      Un caloroso benvenuto!
      rispondo subito alla tua domanda: puoi utilizzare la stessa tecnica spiegata nel post intitolato Watermark di precisione. L’idea è quella di sovrapporre su ogni pagina la griglia voluta memorizzata in un pdf a parte.
      Poi devi regolare gabbia del testo spaziatura ecc nel documento LaTeX principale.
      …ehm, leggo che sei utente Fedora eh, sei forte Antonio!
      Ciao e grazie.

  6. Danela Melotti 30/09/2011 alle 20:52

    Sono un’insegnante di scuola primaria. Ho visitato per la prima volta il tuo sito e ti faccio i miei complimenti. Poichè sono solo una fruitrice delle risorse informatiche e non so modificarle o adattarle, ti chiedo: non ti sarebbe possibile inserire immagini di righe e quadretti delle varie classi (non in formato PDF ma solo come immagini) in modo che le imbranate come me possano scaricarle ed utilizzarle come sfondo per pagine su LIM che supportano Linux? Attualmente sto usando immagini di pagine scannerizzate che inserisco come sfondo ma la nitidezza del tratto lascia a desidarare: le tue invece sarebbero perfette.
    Grazie in anticipo.
    Daniela

    • robitex 01/10/2011 alle 09:53

      Gentilissima Daniela,
      ti aiuto volentieri ma penso che serva un po’ di ottimizzazione e qualche informazione in più per cui passo sul canale della posta elettronica…
      Inoltre non sottovalutarti, imparare ad usare strumenti che adesso ti sembrano irrangiungibili è solo questione di un po’ di concentrazione.
      Mi rendo conto che utilizzare Metapost non è affatto immediato anche solo per installarlo, ma si può sempre trovare il modo per lavorare bene.
      La scuola può avvalersi molto della collaborazione intelligente tra studenti ed insegnanti, tra dirigenti scolastici e genitori.
      Grazie ed alla prossima.

  7. Chiara 03/02/2012 alle 11:47

    Ciao Roberto,
    ottimo lavoro, grazie per le griglie prodotte. Vorrei usarle per scriverci sopra e fare delle schede per gli alunni. Ho scaricato, ad esempio, il foglio a righe e l’ho aperto con PDF Converter Professional 7.2 che permette di aggiungere un testo al documento. Purtroppo, però, applicando la trasparenza alla casella di testo che ho inserito per rendere visibile la griglia, sparisce anche il testo, in altri termini non è possibile rendere trasparente solo il bordo e il riempimento lasciando opaco il testo.
    Hai qualche suggerimento su come posso fare per aggiungere testo alla tua griglia lasciandola visibile?
    Grazie per l’aiuto!
    Chiara

    • robitex 03/02/2012 alle 12:02

      Ciao,
      innanzi tutto, mi complimento per l’impegno che metti nel produrre il materiale didattico e ti do il benvenuto!

      Per produrre pdf con la griglia, direi che le caselle di testo limitano un po’ troppo il risultato.
      L’ideale è produrre il pdf con il testo e/o le immagini e successivamente inserirvi la griglia come una sorta di sfondo.
      Per farlo esistono sicuramente dei programmi adatti. Uno di questi è senz’altro il sistema TeX ma dovresti installarne i programmi ed imparare un discreto numero di nuovi concetti.

      Quindi prova a cercare un software ad interfaccia grafica che permetta l’inserimento di uno sfondo o di un watermark nel pdf oppure puoi utilizzare TeX. La procedura è descritta in questo mio post: http://robitex.wordpress.com/2010/09/13/watermark-di-precisione/ .

      Grazie.

  8. Linda 06/03/2012 alle 00:27

    Grazie mille utilissimo.

  9. Mariarosa 04/04/2012 alle 16:19

    Ciao Roberto, stavo tentando di produrre qualcosa di simile a quello che fai tu in grande stile con openoffice ma ho capito di aver sbagliato strada.
    Ho necessità di creare un foglio con righe di prima elementare con la griglia a quadretti, un incrocio. Servirebbe per un corso di calligrafia che sto frequentando. Questo tipo di quaderno era prodotto solo in Trentino Alto Adige, ma da qualche anno non è più in commercio.
    Secondo te si può fare?

    • robitex 04/04/2012 alle 16:49

      Ciao e benvenuta sul blog!
      Ti dico subito che si può fare qualsiasi cosa.
      Il lavoro è piuttosto semplice perché si tratta di disegnare un insieme di linee parallele di colore e spessore assegnato.
      Basta adattare il codice della pagina a righe con un po’ di concetti di programmazione ed un pc attrezzato con una distribuzione TeX.
      Se non ci riesci da sola cercare di darti una mano.
      Un saluto.
      R.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

%d blogger cliccano Mi Piace per questo: