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

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

% comandi per definire come terminano i percorsi
\buttcap      %(default)
\roundcap
\squarecap
\miterjoin
\roundjoin
\beveljoin

% Oggetti posizionabili con put

% segmenti e segmenti con frecce
% put in questo caso seleziona il punto di partenza
% il coefficiente angolare è dato da m = Dy/Dx
\line(Dx,Dy){lunghezza}
\vector(Dx,Dy){lunghezza}
\LIne(Lx,Ly)

% cerchi vuoti e cerchi pieni
% put in questo caso seleziona il centro del cerchio
\circle{diametro}
\circle*{diametro}

% archi vuoti e archi pieni
% put in questo caso seleziona il centro del cerchio
\arc[angolo1,angolo2]{raggio}
\arc*[angolo1,angolo2]{raggio}

% ovale
% put in questo caso ...
\oval[raggio](Lx,Ly)[parte]

% queste altre linee o segmenti non necessitano di put
% perché si danno direttamente i punti di partenza e arrivo
\Line(x1,y1)(x2,y2)
\polyline(x1,y1). . . (xn,yn)
\Dashline(x1,y1)(x2,y2){L trattino} % curva tratteggiata
\Dotline(x1,y1)(x2,y2){spazio tra punti}[?] % curva puntinata
\Vector(x1,y1)(x2,y2)
\VECTOR(x1,y1)(x2,y2)
\VVECTOR(x1,y1)(x2,y2)  %freccia da entrambe le parti
\polyvector(x1,y1). . . (xn,yn)
\polygon(x1,y1). . . (xn,yn)
\polygon*(x1,y1). . . (xn,yn)   % filled polygon
\segment(x1,y1)(x2,y2)
\Arc(center)(starting point){angle}
\VectorArc(center)(starting point){angle}
\VectorARC(center)(starting point){angle}
\bezier{N}(x1,y1)(x2,y2)(x3,y3)
\qbezier[N](x1,y1)(x2,y2)(x3,y3)
\cbezier[N](x1,y1)(x2,y2)(x3,y3)(x4,y4)
\Curve(...)
\Zbox(x,y)[pos]{testo}[?]
\GraphGrid(Lx,Ly)
\AutoGrid(Lx,Ly)


% comandi per...
\makebox(base,altezza)[posizione]{testo}
\framebox(base,altezza)[posizione]{testo}
\dashbox{lung-trattino}(base,altezza)[posizione]{testo}

% 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
\closepath
\strokepath
\fillpath


% 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