Robitex's Blog

Ideas in the web

Carta millimetrata a volontà


Scarica l’articolo nel formato PDF per la stampa

Sommario

Con il pacchetto rilasciato recentemente su CTAN dal nostro Prof. Enrico Gregorio, siamo in grado di produrre un serie di PDF per fogli a carta millimetrata con una facilità sorprendente, utilizzando il codice già predisposto in un precedente post. Buon divertimento.

Divertimento millimetrato

Bene, bene, partiamo con il creare un foglio di carta millimetrata di formato A4 a toni di grigio, ecco il codice opportunamente adattato dal post precedente da compilare (vedi note tecniche più avanti), con l’opzione –shell-escape:

\documentclass[a4paper]{minimal}
\usepackage[margin=0pt]{geometry}
\usepackage[shellescape]{gmp}

\begin{document}

\noindent
\begin{mpost}
   % Foglio di carta millimetrata
   % Origine sistema di riferimento:
   % in alto a sinistra del foglio
   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;
\end{mpost}
\end{document}

Proseguiamo cambiando le dimensioni di pagina da A4 ad A3 modificando l’opzione A4paper in A3paper ed aggiungendo l’opzione landscape per l’orientamento di pagina orizzontale (non che sia fondamentale), ed aggiornando le variabili nel listato Metapost per la larghezza e l’altezza di pagina:

\documentclass[a3paper,landscape]{minimal}
\usepackage[margin=0pt]{geometry}
\usepackage[shellescape]{gmp}

\begin{document}

\noindent
\begin{mpost}
   % Foglio di carta millimetrata
   % Origine sistema di riferimento:
   % in alto a sinistra del foglio
   u := 1mm;
   pageheight:= 297;
   pagewidth := 420;

   % 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;
\end{mpost}
\end{document}

Possiamo naturalmente produrre anche fogli carta millimetrata con rigature colorate. In Metapost vi sono solo una manciata di colori predefiniti, ma possiamo definirne di nuovi a partire da quelli base o per mezzo di componenti di colore RGB oppure anche CMYK, per coprire così tutte le nostre esigenze.

Nel listato precedente per esempio, sostituite alle righe 29, 46, e 59 al posto del colore white, i colori green, blue, o red. La rigatura presenterà automaticamente intensità diverse del colori di base scelto grazie ai moltiplicatori 0.70, 0.55 e 0.45 già utilizzati.

I colori personalizzati possono essere ottenuti creando un nuovo colore RGB di base che, proprio come una variabile modificabile, basterà editare in un unico luogo del codice per ottenere il colore voluto graduato a seconda dell’importanza delle linee della grigliatura millimetrica.

Un nuovo colore si ottiene istanziando una variabile di tipo color, mettendo i tre numeri variabili tra 0 ed 1 delle componenti rosso, verde e blu in una lista tra parentesi tonde:

% definizione del colore base
color col;
col := (0.3, 0.5, 0.8);

Le proprietà della penna si cambiano poi sempre al solito modo con il comando drawoptions, per esempio per le righe sottili della griglia:

drawoptions(withpen pencircle scaled sp
            withcolor 0.70col);

Lavorare con i colori è quindi del tutto naturale in Metapost, ed ecco quindi il listato per ottenere una pagina nel formato A4 con linee di un particolare colore RGB e sotto forma di file PDF

\documentclass[a4paper]{minimal}
\usepackage[margin=0pt]{geometry}
\usepackage[shellescape]{gmp}

\begin{document}
\noindent
\begin{mpost}
   % Foglio di carta millimetrata
   % Origine sistema di riferimento:
   % in alto a sinistra del foglio
   u := 1mm;
   pagewidth := 210;
   pageheight:= 297;
   
   % definizione del colore base
   color col;
   col := (0.3, 0.5, 0.8);

   % 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.70col);

   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.55col);

   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.45col);

   for i=10 step 10 until pageheight-1:
      hline( -i );
   endfor;

   for i=10 step 10 until pagewidth-1:
      vline( i );
    endfor;
\end{mpost}
\end{document}

Scaricamento

Ok adesso, se volete, cliccate su ciascuna immagine presentata per scaricare il file PDF ottenuto dai listati di codice dell’articolo:

Carta millimetrata A4 colore grigio

Carta millimetrata A4 colore grigio

Carta millimetrata A3 colore grigio

Carta millimetrata A3 colore grigio

Carta millimetrata A4 colore blue

Carta millimetrata A4 colore blue

Carta millimetrata A4 colore rosso

Carta millimetrata A4 colore rosso

Carta millimetrata A4 colore verde

Carta millimetrata A4 colore verde

Carta millimetrata A4 colore definito RGB

Carta millimetrata A4 colore definito RGB

Note tecniche

Per ottenere i miei stessi risultati dovete compilare il codice dei vari esercizi proposti, il che significa che per primo dovete aver installato sul vostro sistema (che sia Linux, Windows o Mac) una distribuzione TeX.

Poi, compito usuale per un utente TeX, dovete compilare il sorgente, ovvero salvate un file di testo con estensione .tex contenente il codice, chiamandolo per esempio A4milli.tex, e compilatelo aprendo una finestra di console e digitando il comando (tranquilli di solito per l’utente LaTeX ci pensa l’editor a far compilare il sorgente):

> pdflatex --shell-escape A4milli

Rigraziamenti

Un grazie a te curioso lettore nella speranza che il post ti abbia fatto divertire oltre che ti abbia aiutato, ed al Prof. Enrico Gregorio che, ancora una volta ci ha sorpreso con il suo nuovo pacchetto gmp.
Un saluto.

10 risposte a “Carta millimetrata a volontà

  1. Michele 07/07/2011 alle 03:18

    Ciao,

    ottimo post.

    Un po’ di temo fa, per calibrae delle fotografie che facevo per un esperimento, ho fatto con TikZ quello che tu fai con il pacchetto gmp. In entrambi i casi il risultato è ottimo, peccato però che quando si va stampare, la stampante lascia un piccolissimo margine bianco facendo intendere che i quadretti sono lievemente più piccoli(righello alla mano).

    Ovviamente dipende dalla stampante e dai suoi driver, nonostante ciò se una persona si reca nella maggior parte delle copisterie(dovevo stampae su un foglio A3), le viene detto che è impossibile non avere i margini.

    Non è assolutamente vero, in una copisteria ho trovato una persona che proficuamente ha messo in dubbio la sue conoscenze ed ha trovato l’opzione da spuntare nell’infinito elenco di opzioni che c’erano.

    Questa è la mia esperienza a Pisa e Bruxelles.

    Mi sono dilungato un po’….

    Saluti

    Michele

    • robitex 07/07/2011 alle 08:00

      Grazie Michele,
      alla fine le cose buone dipendono sempre dall’impegno delle persone e quel che è certo è che le cose da fare oggi come in futuro sono sempre più impegnative ed importanti.
      A presto.
      Ciao.

  2. Alessandro 10/06/2013 alle 15:03

    Complimeti per la spiegazione che sono riuscito a replicare pur non sapendo nulla di latex. Volevo pero’ chiedere se fosse possibile aggiungere una cornice ovvore fare partire la “griglia” da un certo punto in poi…cioe’ bypassare il bordo di stampa. Ho trovato un sito che produce il pdf come lo vorrei, pero’ mi piacerebbe farlo da codice (http://www.incompetech.com/graphpaper/multiwidth/).

    Grazie
    Alex

    • robitex 10/06/2013 alle 16:33

      Grazie Alessandro e benvenuto!
      Dovresti provare a modificare il codice Metapost. Per esempio per disegnare la linea orizzontale con 1centimetro di bordo cambia la definizione della funzione hline() così:

       def hline(expr y)=
            draw (10*u, y*u)--(pagewidth*u-10*u, y*u);
         enddef;
      

      Poi regola la posizione del disegno sulla pagina.
      Complimenti per essere riuscito ad ottenere i pdf.
      Grazie ed alla prossima.
      R.

  3. Alessandro 10/06/2013 alle 17:49

    Grazie 1000. La modifica che mi proponi fa si che sul bordo superiore e inferiore vengano solo delle linee orizzontali e nei bordi laterali solo linee verticali…..

  4. Alessandro 10/06/2013 alle 18:34

    Ah ok, grazie. Intanto cerco di lavorarci anche io🙂

Lascia un commento

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

%d blogger cliccano Mi Piace per questo: