Disegnare con LaTeX

L'ambiente picture

Il nucleo di LaTeX definisce un ambiente apposito per il disegno programmato: l'ambiente picture (nome un po' infelice secondo me!). I comandi che si possono usare in questo ambiente permettono appunto di "programmare" il disegno. L'ambiente è abbastanza semplice ma permette comunque di disegnare cose relativamente complicate con non molta difficoltà. Fino a pochi anni fa aveva qualche problema sulla resa grafica, che sono stati risolti con il pacchetto pict2e. I pacchetti che aumentano il numero di comandi a disposizione all'interno dell'ambiente picture sono curve2e, qtree e altri.

Consiglio, in condizione standard, di caricare sempre il pacchetto curve2eche richiama anche pict2e e color.

Le uniche opzioni di pict2e (che vengono passate direttamente da curve2e) sono ltxarrows (default) e pstarrows, che riguardano il modo in cui vengono disegnate le punte delle frecce. L'unità di misura fondamentale nell'ambiente picture è \unitlength, che di default vale 1 pt.

Ecco uno schema d'uso

...
\usepackage{curve2e}

\begin{document}

\setlength{\unitlength}{...}
\begin{picture}(base,altezza)(x-offset,y-offset)
...
\end{picture}

\end{document}

\unitlength conviene racchiuderla insieme all'ambiente picture, in un gruppo cioè, per esempio, tra parentesi graffe, in modo che ogni ambiente picture possa avere il suo valore senza disturbare quello degli altri.

L'ambiente picture permette di disegnare usando un sistema di riferimento cartesiano ortogonale. L'origine di tali assi è il punto di ancoraggio dell'oggetto picture.

I parametri base e altezza indicano il rettangolo ideale dove è racchiuso il disegno. In realtà si può uscire da questo rettangolo senza problemi. Anzi, molti mettono base e altezza pari a zero!

Come è posizionato il riferimento rispetto a questo rettangolo? Come è facile aspettarsi, di default, il vertice in basso a sinistra coincide con l'origine degli assi del rettangolo. I parametri x-offset e y-offset specificano dove si trova questo vertice rispetto all'origine degli assi.

Per posizionare un oggetto si usano i comandi

\put(x,y){oggetto}
\multiput(x-ini,y-ini)(x-step,y-step){numero}{oggetto}

Quando si mette un oggetto come argomento di put, le sue coordinate diventano relative! Cioè in pratica è come se l'origine degli assi si fosse spostata nel punto specificato con put. Questa caratteristica è fondamentale e di grande aiuto.

Gli oggetti posizionabili sono (consideriamo SEMPRE caricato pict2e):

% Oggetti posizionabili con put
\line(x-pend,y-pend){lunghezza}
\vector(x-pend,y-pend){lunghezza}
\circle{diametro}
\circle*{diametro}
\makebox(base,altezza)[posizione]{testo}
\framebox(base,altezza)[posizione]{testo}
\dashbox{lung-trattino}(base,altezza)[posizione]{testo}
\oval[raggio](base,altezza)[parte]
\arc[hangolo1,angolo2i]{raggio}
\arc*[hangolo1,angolo2i]{raggio}

% Spessori linee
\thinlines
\thicklines
\linethickness{spessore assoluto}

% Oggetti che non necessitano di put per essere posizionati
\qbezier(x1,y1)(x2,y2)(x3,y3)
\cbezier(x1,y1)(x2,y2)(x3,y3)(x4,y4)
\Line(x1,y1)(x2,y2)
\polyline(x1,y1). . . (xn,yn)
\polygon(x1,y1). . . (xn,yn)
\polygon*(x1,y1). . . (xn,yn)

% comandi per definire un percorso (no put)
\moveto(x,y)
\lineto(x,y)
\closepath(x,y)
\curveto(x2,y2)(x3,y3)(x4,y4)
\circlearc[n]{x}{y}{RAD}{ANGLE1}{ANGLE2}
% comandi per disegnare il percorso definito
\strokepath
\fillpath

% comandi per definire come terminano i percorsi
\buttcap
\roundcap
\squarecap
\mitterjoin
\roundjoin
\beveljoin

% Comandi introdotti da curve2e
\LIne(x,y) % con put
\segment(x1,y1)(x2,y2) % senza put
\Dline(first point)(second point)(dash length) % senza put
\GraphGrid(40,40) % con put
\Arc(center)(starting point){angle} % senza put
\VectorArc(center)(starting point){angle} % senza put
\VectorARC(center)(starting point){angle} % senza put
\Curve(node coordinates)<direction vector >.... % con put

% funzioni introdotte da curve2e
% per calcolare sin, cos e tan di un angolo
\SinOfangletocontrol sequence
\CosOfangletocontrol sequence
\TanOfangletocontrol sequence

Gli ambienti picture possono essere messi in linea con il testo oppure possono essere inseriti in un ambiente figure.

Ecco un semplicissimo esempio

\begin{figure}[t]
\centering
\begin{picture}(100,100)(0,0)
\put(0,0){\line(1,0){100}}
\put(0,0){\line(0,1){100}}
\put(0,100){\line(1,0){100}}
\put(100,0){\line(0,1){100}}
\end{picture}
\caption{This is a test of the pict2e package capabilities.}
\end{figure}

TikZ/pgf

PsTricks