% !TEX root =  ./it-lshort.tex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Scritto inizialmente in inglese da Urs Osvald rifacendosi
% ai suoi libri Graphics in LaTeX3 e METAPOST--A tutorial

% Tradotto in italiano da Claudio Beccari 2019-06-10 che l'ha anche
% aggiornato a pict2e, secondo le indicazioni di Leslie Lamport,
% nella seconda edizione del suo libro di base
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{chapter}{4}
\newcommand{\graphicscompanion}{\emph{The \LaTeX\ Graphics Companion}~\cite{graphicscompanion}}
\newcommand{\hobby}{\emph{A User's Manual for \MP}~\cite{metapost}}
\newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}}
\newcommand{\graphicsinlatex}{\emph{Graphics in \LaTeXe}~\cite{ursoswald}}

\chapter[Creare la grafica per la matematica]{Creare la grafica per~la~matematica}
\label{chap:graphics}

\begin{intro}
La maggior parte delle persone usa \LaTeX\ per comporre il testo. Siccome l'approccio di \LaTeX, orientato alla struttura, è così conveniente, esso, nella sua versione di base, offre anche delle funzioni, in verità un po' modeste, per produrre risultati grafici da una descrizione testuale. Tuttavia sono state prodotte alcune estensioni per superare la limitatezza delle funzionalità di base. In questo capitolo si esamineranno alcuni di quegli strumenti.
\end{intro}

\section{Osservazioni introduttive}


\LaTeX\ è stato in grado di produrre output grafico fin dall'inizio. Cominciò con l'ambente \ei{picture} che permette di creare della grafica mettendo in posizione degli elementi predefiniti sulla ‘tela’ del disegno. \LaTeX\ già conteneva  la possibilità di disegnare curve di Bézier quadratiche mediante il comando \ci{qbezier}, dove \texttt{q} richiama la parola “quadratico”. Molte curve usate frequentemente come cerchi, ellissi, o catenarie possono venire approssimate in modo soddisfacente dalle curve di Bézier quadratiche, sebbene per farlo ci vogliano un po' di capacità matematiche. Se, però, si usa un linguaggio di programmazione che sia in grado di generare comandi \LaTeX\ contenenti le macro relative alle curve di Bézier, il tutto diventa piuttosto potente.\footnote{Per esempio, \prog{inkscape} è un programma gratuito con interfaccia grafica che permette di esportare i suoi disegni vettoriali in linguaggio \LaTeX-compatibile e con le etichette e le legende da comporre in \LaTeX. Esistono anche altri programmi in grado di farlo.}

Nonostante programmare dei disegni in linguaggio \LaTeX\ sia molto limitato, spesso faticoso, tuttavia ci sono ancora dei validi motivi per farlo. I documenti prodotti in questo modo sono “piccoli” in termini di byte, e non c'è nessuna necessità di trascinarsi dietro altri file grafici.

Leslie Lamport stesso, nella seconda edizione del suo manuale, risalente al 1994, aveva indicato un certo numero di macro da usare per evitare le limitatezze della versione originale di \ei{picture}. Queste estensioni sono state implementate a cominciare dal 2003, e sono proseguite fino ai nostri giorni. Per compatibilità con il passato, non è stato modificato il nucleo di \LaTeX, ma è stato messo a disposizione il pacchetto di estensione \pai{pict2e}, che qui daremo sempre per caricato mediante l'istruzione
\begin{lscommand}
\ci{usepackage}\Marg{\ei{pict2e}}
\end{lscommand}
\noindent inserita nel preambolo del documento.  Nella descrizione delle funzionalità  svolta nel paragrafo~\ref{sec:picture-env} si esporranno le funzionalità dell'ambiente \ei{picture} così come sono state estese mediante il pacchetto nominato sopra.

%%%%%%%

Merita però segnalare subito un grosso vantaggio: il pacchetto \pai{pict2e} produce grafica vettoriale con i compilatori la cui uscita è in formato PDF: \pdfLaTeX, \LuaLaTeX\ e \XeLaTeX; con il solo \LaTeX\ l'uscita è in formato DVI, ma contiene già tutte le istruzioni necessarie per trasformare detto formato nel formato PDF, passando eventualmente per il formato PostScript, entrambi di natura vettoriale.

Questa era la situazione fino  ad alcuni anni fa, quando Till Tantau, noto anche per il suo pacchetto\footnote{Ricordando l'ambiguità della parola `pacchetto', qui si ricorda che il pacchetto \pai{beamer}, collezione di molti file diversi, contiene la classe \texttt{beamer}.} \pai{beamer} (per produrre presentazioni da proiettare in aula o in una sala per conferenze) creò il \emph{Portable Graphics Format} (sigla: PGF) con il pacchetto \pai{pgf} e i suoi componenti principali \pai{pgfplots} e \pai{TikZ}, che permettono di creare grafica vettoriale con pieno supporto per diversi programmi di composizione del sistema \TeX, compresi i tre programmi basati su \LaTeX: \pdfLaTeX, \XeLaTeX, e \LuaLaTeX.

Su queste basi sono stati creati molti pacchetti di estensione per scopi precisi. Una grande varietà di queste estensioni sono descritte in dettaglio in \graphicscompanion.

Forse lo strumento più avanzato collegato con il sistema \TeX\ è \MP. È un programma a sé stante basato su \MF\ di Donald E.~Knuth. \MP\ usa il linguaggio molto potente e matematicamente sofisticato di \MF, ma contrariamente a questo, produce file in formato \emph{encapsulated} \PSi\ che possono essere importate sia con il programma di composizione \LaTeX, sia con \pdfLaTeX, \XeLaTeX, e \LuaLaTeX. Per una introduzione a \MP\ si veda \hobby, o il testo introduttivo \cite{ursoswald}.

\iffalse
  Un esame molto approfondito sulle strategie grafiche di \LaTeX\ e di
   \TeX\ (e sulla creazione dei font) si trova in
  \hoenig\ (interessante ma datato, 1998).
\fi

%%%%%%%%

\section[L'ambiente \texorpdfstring{\texttt}{}{picture}]{L'ambiente \texttt{picture}\footnote{Sezione originariamente composta da Urs Orwald}}\label{sec:picture-env}
%\secby{Urs Oswald}{osurs@bluewin.ch}
%\vspace{-\baselineskip}
%\secby{Adattamento italiano al 2019: Claudio Beccari}{}



Come ricordato sopra, l'ambiente \ei{picture} fa parte del nucleo di \LaTeX\ è molto adatto per compiti semplici e per controllare con precisione la posizione di ogni elemento sulla pagina. Ma se si deve fare qualunque lavoro serio di disegno, bisogna rivolgersi a \TikZ, presentato nel paragrafo~\ref{sec:tikz} nella pagina~\pageref{sec:tikz}.

\subsection{Comandi di base}

Un ambiente \ei{picture}\footnote{L'ambiente \ei{picture} funziona subito, senza bisogno di caricare nessun pacchetto di estensione. Tuttavia, come anticipato, qui si dà per scontato che si sia caricato nel preambolo il pacchetto \pai{pict2e}, sia perché è utile, sia perché il padre di \LaTeX\ ne ha descritto il funzionamento prima ancora che ne venisse creato il codice. Evidentemente lo considerava necessario.} viene creato con uno dei seguenti due comandi:
\begin{lscommand}
\ci{begin}\Marg{picture}\garg{$x,y$}\ldots\ci{end}\Marg{picture}
\end{lscommand}
\noindent oppure
\begin{lscommand}
\cs{begin}\Marg{picture}\garg{$x,y$}\garg{$x_0,y_0$}\ldots\cs{end}\Marg{picture}
\end{lscommand}

I numeri (decimali fratti\footnote{Attenzione: all'interno dell'ambiente \ei{picture} il separatore decimale \emph{deve essere sempre il punto}, \emph{mai la virgola}, che ha altri significati all'interno di questo ambiente.}) $x,\,y,\,x_0,\,y_0$ sono i moltiplicatori dell'unità di misura grafica \ci{unitlength}, che può venire ridefinita in qualunque momento per scalare un disegno, ma non ne si può cambiare il valore all'interno dell'ambiente stesso; le si può assegnare un valore per esempio con un comando
\begin{lscommand}
\ci{setlength}\ci{unitlength}\Marg{1.2mm}
\end{lscommand}
\noindent prima di aprire l'ambiente. Il valore di default di \ci{unitlength} è \texttt{1pt}. La prima coppia di valori, $(x,y)$, riserva sulla pagina uno spazio rettangolare per il disegno chiamato \emph{\wi{tela}}. La seconda coppia di valori, $(x_0,y_0)$, è facoltativa e specifica le coordinate del vertice inferiore sinistro della tela rispetto all'origine degli assi cartesiani.


La maggior parte dei comandi ha l'una o l'altra di queste forme:
\begin{lscommand}
\ci{put}\garg{$x,y$}\marg{oggetto}
\end{lscommand}
\noindent oppure
\begin{lscommand}
\ci{multiput}\garg{$x,y$}\garg{$\Delta x,\Delta y$}\marg{$n$}\marg{oggetto}
\end{lscommand}
\noindent dove l'\meta{oggetto} è uno dei tanti elementi grafici o testuali che possono venire collocati sulla tela.

Le curve di Bézier sono un'eccezione. Quelle quadratiche sono disegnate con il comando:
\begin{lscommand}
\ci{qbezier}\garg{$x_1,y_1$}\garg{$x_2,y_2$}\garg{$x_3,y_3$}
\end{lscommand}
\noindent e quelle cubiche con il comando:
\begin{lscommand}
\ci{cbezier}\garg{$x_1,y_1$}\garg{$x_2,y_2$}\garg{$x_3,y_3$}\garg{$x_4,y_4$}
\end{lscommand}
Ma non è vietato metterne il codice nel secondo argomento di un comando \ci{put} in modo da regolarne con precisione la posizione senza bisogno di modificare tutte tre le coppie di coordinate per le curve quadratiche e tutte quattro le coppie per le curve cubiche.

\subsection{I segmenti}
I segmenti si tracciano con il comando \ci{line}, di cui si specificano con una coppia di valori i coseni direttori, e con un valore scalare la proiezione della lunghezza sull'asse orizzontale (o, solo per i segmenti perfettamente verticali, sull'asse verticale). Idealmente, il segmento ha un punto iniziale nell'origine degli assi e un punto finale; il comando \ci{put} colloca l'intero segmento muovendo il suo punto iniziale nella posizione specificata con le coordinate inserite nel suo primo argomento. I coseni direttori sono numeri (decimali in generale fratti) che si consiglia di limitare a valori piccoli in modulo, diciamo non superiori a~10, ma specificare \texttt{(0.5,0.866)}  oppure \texttt{(500,866)}  produce lo stesso risultato grafico. Senza usare il pacchetto \pai{pict2e}, i coseni direttori sarebbero limitati ai numeri interi primi fra loro e compresi fra $-6$ e $+6$. Nel primo esempio della pagina~\pageref{pag:lines} sono rappresentati tutti i segmenti del primo quadrante con i coseni direttori interi compresi  nell'intervallo previsto precedentemente alla disponibilità di \pai{pict2e}; si vede che i vari segmenti non sono distribuiti angolarmente in modo uniforme.
\begin{figure}[p]\label{pag:lines}
\begin{example}
\setlength{\unitlength}{5cm}
\begin{picture}(1,1)
  \put(0,0){\line(0,1){1}}
  \put(0,0){\line(1,0){1}}
  \put(0,0){\line(1,1){1}}
  \put(0,0){\line(1,2){.5}}
  \put(0,0){\line(1,3){.3333}}
  \put(0,0){\line(1,4){.25}}
  \put(0,0){\line(1,5){.2}}
  \put(0,0){\line(1,6){.1667}}
  \put(0,0){\line(2,1){1}}
  \put(0,0){\line(2,3){.6667}}
  \put(0,0){\line(2,5){.4}}
  \put(0,0){\line(3,1){1}}
  \put(0,0){\line(3,2){1}}
  \put(0,0){\line(3,4){.75}}
  \put(0,0){\line(3,5){.6}}
  \put(0,0){\line(4,1){1}}
  \put(0,0){\line(4,3){1}}
  \put(0,0){\line(4,5){.8}}
  \put(0,0){\line(5,1){1}}
  \put(0,0){\line(5,2){1}}
  \put(0,0){\line(5,3){1}}
  \put(0,0){\line(5,4){1}}
  \put(0,0){\line(5,6){.8333}}
  \put(0,0){\line(6,1){1}}
  \put(0,0){\line(6,5){1}}
\end{picture}
\end{example}

\begin{example}
\setlength{\unitlength}{5cm}
\begin{picture}(1,1)
\put(0,0){\line(1,0){1}}
\put(0,0){\line(0.996,0.087){0.996}}
\put(0,0){\line(0.984,0.173){0.984}}
\put(0,0){\line(0.965,0.258){0.965}}
\put(0,0){\line(0.939,0.342){0.939}}
\put(0,0){\line(0.906,0.422){0.906}}
\put(0,0){\line(0.866,0.500){0.866}}
\put(0,0){\line(0.819,0.573){0.819}}
\put(0,0){\line(0.766,0.642){0.766}}
\put(0,0){\line(0.707,0.707){0.707}}
\put(0,0){\line(0.642,0.766){0.642}}
\put(0,0){\line(0.573,0.819){0.573}}
\put(0,0){\line(0.500,0.866){0.500}}
\put(0,0){\line(0.422,0.906){0.422}}
\put(0,0){\line(0.342,0.939){0.342}}
\put(0,0){\line(0.258,0.965){0.258}}
\put(0,0){\line(0.173,0.984){0.173}}
\put(0,0){\line(0.087,0.996){0.087}}
\put(0,0){\line(0,1){1}}
\end{picture}
\end{example}
\end{figure}

Nel secondo esempio della pagina~\pageref{pag:lines}, invece, i segmenti sono  creati con i coefficienti di direzione calcolati per gli angoli multipli di $5^\circ$. L'esempio mostra anche il ruolo diverso che ha il punto decimale, rispetto alla virgola che separa le due coordinate di ogni coppia


I segmenti sono tracciati con il comando:
\begin{lscommand}
\ci{put}\garg{$x,y$}\Marg{\ci{line}\garg{$x_1,y_1$}\marg{lunghezza}}
\end{lscommand}
Il comando \ci{line} vuole due argomenti:
\begin{enumerate}
  \item un vettore di direzione, e
  \item una lunghezza.
\end{enumerate}

I realtà con \pai{pict2e} si dispone di altri comandi per tracciare segmenti e insiemi di segmenti, cioè spezzate e poligoni. Basta specificare le coordinate degli estremi di un solo segmento, o gli estremi dei successivi segmenti; per i poligoni si opera nello stesso modo specificandone solo i vertici e ci pensa il comando a chiudere il poligono congiungendo l'ultimo vertice con il primo della lista.

Il comando \ci{Line} vuole due argomenti: il punto di partenza e il punto di arrivo:
\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(6,5)
\Line(0,0)(1,2.5)
\put(2,2){\Line(0,0)(1,2.5)}
\Line(6,0)(0,5)
\end{picture}
\end{example}

Il comando \ci{polyline} genera una spezzata con un numero arbitrario di segmenti consecutivi; se viene specificato solo un segmento, produce lo stesso effetto di \ci{Line}.
\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(6,5)
\polyline(0,0)(1,0)(1,1)(2,1)%
          (2,2)(3,2)(3,3)(4,3)%
          (4,4)(5,4)(5,5)(6,5)
\end{picture}
\end{example}

Il comando \ci{polygon} disegna una spezzata chiusa; il comando \ci{polygon*} definisce il contorno di una spezzata chiusa che riempie con il colore corrente. Il colore può essere specificato con i comandi messi a disposizione dal pacchetto \pai{xcolor} o dal più semplice pacchetto \pai{color}, che devono essere stati caricati (o l'uno o l'altro; preferibilmente il primo) nel preambolo del documento. Se si vuole mostrare anche il contorno di un poligono colorato, bisogna sovrapporre due poligoni, il primo con il comando asteriscato, il secondo con il comando normale.
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60,50)
% rombo
\polygon(10,0)(20,10)(10,20)(0,10)
% rombo verde con contorno rosso
\put(20,0){\color{green}%
\polygon*(30,10)(40,20)(30,30)(20,20)}
\put(20,0){\linethickness{1mm}%
  \color{red}%
\polygon(30,10)(40,20)(30,30)(20,20)}
% fiocco
\polygon(20,30)(40,50)(40,30)(20,50)
\end{picture}
\end{example}


\subsection{Frecce}
Il comando \ci{vector} disegna un segmento palesemente orientato sotto forma di una freccia. Senza il pacchetto \pai{pict2e}, i suoi coefficienti di direzione erano limitati ai numeri interi primi fra loro nell'intervallo $-4\cdots+4$. Invece, con questo pacchetto quei coefficienti sono gli stessi coefficienti fratti, che si possono usare con le stesse regole e raccomandazioni date per il comando \ci{line}; la lunghezza ha lo stesso significato che ha per \ci{line}. In questo esempio, i coefficienti di direzione sono espressi in entrambi i modi.

\begin{example}
\setlength{\unitlength}{0.75mm}
\begin{picture}(60,40)
  \put(30,20){\vector(1,0){30}}
  \put(30,20){\vector(4,1){20}}
  \put(30,20){\vector(3,1){25}}
  \put(30,20){\vector(2,1){30}}
  \put(30,20){\vector(1,2){10}}
  \thicklines
  \put(30,20){\vector(-4,1){30}}
  \put(30,20){\vector(-1,4){5}}
  \put(30,20){\vector(0.25,-0.32){18}}
  \thinlines
  \put(30,20){\vector(-1,-1){5}}
  \put(30,20){\vector(-1,-4){5}}
\end{picture}
\end{example}

Come si è mostrato nell'esempio, le frecce si disegnano con i comandi seguenti:
\begin{lscommand}
\ci{put}\garg{$x,y$}\Marg{\ci{vector}\garg{$x_1,y_1$}\marg{lunghezza}}
\end{lscommand}

Si notino gli effetti dei comandi \ci{thinlines} e \ci{thicklines}.

\subsection{Cerchi e circonferenze}
I cerchi sono dischi pieni colorati col colore corrente (default: nero) e si disegnano con il comando\ci{circle*}; le circonferenze sono solo i contorni e si disegnano con il comando \ci{circle}; per entrambi l'argomento rappresenta il \emph{diametro} del disco o della circonferenza. Con il pacchetto \pai{pict2e}, i diametri possono avere qualunque valore entro limiti ragionevoli, nel senso che il tracciato può uscire dalla tela dichiarata per il disegno, ma non dovrebbe uscire dalla pagina\dots

\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60, 50)
  \put(20,30){\circle{1}}
  \put(20,30){\circle{2}}
  \put(20,30){\circle{4}}
  \put(20,30){\circle{8}}
  \put(20,30){\circle{16}}
  \put(20,30){\circle{32}}

  \put(50,40){\circle{1}}
  \put(50,40){\circle{3.5}}
  \put(50,40){\circle{6}}
  \put(50,40){\circle{8.5}}
  \put(50,40){\circle{11}}

  \put(15,5){\circle*{1}}
  \put(20,5){\circle*{2}}
  \put(25,5){\circle*{3}}
  \put(30,5){\circle*{4}}
  \put(35,5){\circle*{6}}
  \put(40,5){\circle*{10}}
  \put(50,5){\circle*{14}}
  \put(60,5){\circle*{18}}
\end{picture}
\end{example}

Il comando
\begin{lscommand}
  \ci{put}\garg{$x,y$}\Marg{\ci{circle}\marg{diametro}}
\end{lscommand}
\noindent disegna una circonferenza con il centro in $(x,y)$ e il \meta{diametro} specificato (non il raggio!). Il comando \ci{circle*} disegna un cerchio pieno.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\iftrue %cambiare in iffalse se si vuole comporre il secondo ramo dell'if

  Come accennato sopra, il pacchetto \pai{pict2e} permette di disegnare 
  anche  curve di Bézier, e archi di vario genere; permette di disegnare 
  curve arbitrarie con il metodo chiamato in inglese \emph{turtle 
  graphics}: si porta la “penna” in un punto iniziale,  poi uno alla 
  volta si aggiungono altri punti connessi con il precedente con segmenti 
  o con curve di Bézier di terzo grado. Infine, arrivati all'ultimo punto 
  si traccia la linea complessiva. Si rinvia il lettore alla 
  documentazione del pacchetto \pai{pict2e}: \texttt{texdoc pict2e}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\else
  \subsection{Curve di Bézier}
  Il pacchetto \pai{pict2e} estende le funzionalità del vecchio ambiente 
  \ei{picture} per quel che riguarda le curve di Bézier; i comandi di cui 
  dispone sono i seguenti con la loro sintassi:
  \begin{lscommand}
  \ci{bezier}\marg{N}\garg{$x_1,y_1$}\garg{$x_2,y_2$}\garg{$x_3,y_3$}\\
  \ci{qbezier}\oarg{N}\garg{$x_1,y_1$}\garg{$x_2,y_2$}\garg{$x_3,y_3$}\\
  \ci{cbezier}\oarg{N}\garg{$x_1,y_1$}\garg{$x_2,y_2$}\garg{$x_3,y_3$}%
  \garg{$x_4,y_4$}
  \end{lscommand}
  La macro \ci{bezier} è quella obsolescente che riproduce (in meglio) 
  la definizione che era presente nel nucleo di \LaTeX\ prima che fosse 
  disponibile il pacchetto \pai{pict2e}; $N$ rappresentava il numeri di 
  puntini da usare per tracciare la curva quadratica; ora le corve non 
  sono più tracciate mettendo assieme una sequenza di puntini, ma sono 
  tracciate direttamente con o comandi interni del linguaggio PDF.
  La macro \ci{qbezier} traccia una curva continua di secondo grado 
  (una quadratica) se \emph{non} si specifica il valore facoltativo $N$; 
  se lo si specifica traccia la curva a puntini: se questi sono pochi, 
  può  rappresentare i successivi istanti di una traiettoria.
  La macro \ci{cbezier} traccia una curva continua di terzo grado (una 
  cubica) che richiede quattro punti; le curve cubiche possono presentare 
  un flesso, mentre le quadratiche sono dei semplici archi di parabola e 
  non hanno flessi.
  \begin{example}
  \setlength{\unitlength}{1mm}
  \begin{picture}(60,50)
  {\color{blue}%
  \polyline(0,0)(12.5,50)(25,0)
  \put(0,0){\circle*{1}}
  \put(12.5,50){\circle*{1}}
  \put(25,0){\circle*{1}}}
  \qbezier(0,0)(12.5,50)(25,0)
  \put(35,0){{\color{blue}%
  \polyline(0,0)(0,25)(25,25)(25,50)
  \put(0,0){\circle*{1}}
  \put(0,25){\circle*{1}}
  \put(25,25){\circle*{1}}
  \put(25,50){\circle*{1}}}%
  \cbezier(0,0)(0,25)(25,25)(25,50)}
  \end{picture}
  \end{example}
  Come si vede nell'esempio, le curve di Bézier non hanno bisogno di essere 
  messe in posizione mediante il comando \ci{put}, ma lo possono; infatti 
  nell'esempio le coordinate dei punti della curva cubica sono relative al 
  primo punto, ma la curva è spostata a destra per non sovrapporsi alla 
  curva quadratica;L'esempio mostra anche i segmenti che uniscono i punti 
  guida e si capisce la loro funzione:il primo e l'ultimo punto in ogni 
  caso indicano da dove la curva parte e dove arriva. mentre gli altri 
  punti indicano le direzioni tangenti alle curve nei punti di partenza e 
  di arrivo.
  
  \subsection{Archi}
  Il pacchetto \pai{pict2e} permette di disegnare degli archi circolari; 
  i comandi sono \ci{arc} e \ci{arc*}; come al solito  la versione 
  asteriscata riempie con il colore corrente tutto il settore sotteso 
  dall'arco. Il suo punto di riferimento è il centro della circonferenza 
  di cui si rappresenta un arco, convenzionalmente con le coordinate 
  \texttt{(0,0)}, che si mette in posizione con \ci{put}
  \begin{lscommand}
  \ci{arc}\oarg{$\phi_1,\phi_2$}\marg{raggio}\\
  \ci{arc*}\oarg{$\phi_1,\phi_2$}\marg{raggio}
  \end{lscommand}
  Gli angoli sono espressi in gradi; l'arco si svolge partendo da $\phi_1$ 
  e raggiunge $\phi_2$ in verso antiorario, solo se è $\phi_2 > \phi_1$; 
  perciò specificare la coppia $[-10, 80]$ produce lo stesso effetto di 
  $[80, -10]$, cioè un arco di $90^\circ$; invece le coppie $[80, 350]$ 
  e $[350, 80]$ producono angoli complementari. Sul \meta{raggio} non 
  c'è nulla da dire.
  \begin{example}
  \setlength{\unitlength}{1mm}
  \begin{picture}(60,50)
  \put(0,25){\arc[-30,30]{25}}
  \put(0,25){\circle{1}}
  \put(0,25){\vector(1,0){25}}
  \put(12.5,26){\makebox(0,0)[b]{$R$}}
  \put(60,25){\color{red}%
      \arc*[150,210]{25}}
  \end{picture}
  \end{example}
  
  \subsection{Comandi per descrivere un percorso}
  Una grossa novità introdotta da \pai{pict2e} è la possibilità di 
  descrivere un percorso da tracciare o da riempire di colore; si basa 
  su una serie di comandi che servono per cominciare il percorso in un 
  punto, proseguirlo con un segmento o con un arco di Bézier, per 
  raggiungere un punto finale dove decidere se tracciare o riempire 
  di colore l'intero percorso. Ecco i comandi i cui nomi si commentano 
  da soli; ci si ricordi che il primo punto di ogni linea diritta o curva 
  è quello finale del  tratto precedente:
  \begin{lscommand}
  \ci{moveto}\garg{$x, y$}\\
  \ci{lineto}\garg{$x_2, y_2$}\\
  \ci{curveto}\garg{$x_2, y_2$}\garg{$x_3, y_3$}\garg{$x_4, y_4$}\\
  \ci{circlearc}\oarg{N}\marg{$x$}\marg{$y$}\marg{$R$}\marg{$\phi_1$}\marg{$
  \phi_2$}\\
  \ci{closepath}\\
  \ci{strokepath}\\
  \ci{fillpath}
  \end{lscommand}
  Il comando \ci{moveto} inizia il percorso e memorizza le coordinate del 
  punto iniziale; \ci{lineto} disegna un segmento dal punto finale 
  precedente fino al punto indicato dal suo unico argomento; \ci{curveto} 
  disegna una cubica di Bézier partendo dall'ultimo punto raggiunto dal 
  percorso, fino a $x_4, y_4$, usando come punti guida gli altri due.  
  \ci{circlearc} è più complesso: il parametro $N$ è molto particolare: 
  se vale $0$ serve per indicare che il suo punto iniziale deve venire 
  connesso con l'ultimo punto del percorso mediante un segmento; se invece 
  vale $1$, il punto iniziale dell'arco diventa un punto iniziale di 
  percorso; per il resto, $x$ e $y$ sono le coordinate del centro, $R$ è 
  il raggio, e $\phi_1$ e $\phi_2$ sono gli angoli di inizio e fine 
  dell'arco.
  
  Gli altri comandi non richiedono argomenti: \ci{closepath} unisce con 
  un segmento l'ultimo punto del percorso con il primo punto memorizzato 
  da \ci{moveto}, formando, quindi, un percorso chiuso; per tracciare la 
  linea completa dopo averla descritta mediante i comandi precedenti, 
  bisogna fare il comando \ci{strokepath}, mentre se si vuole usare il 
  percorso come contorno di una “macchia” di coloro, lo si riempie col 
  colore corrente mediante \ci{fillpath}.
  \begin{example}
  \setlength{\unitlength}{1mm}
  \begin{picture}(65,50)
  \moveto(0,0)\lineto(30,0)
  \curveto(30,25)(25,30)(0,30)
  \closepath\strokepath
  \moveto(65,50)
  \curveto(25,30)(40,0)(65,50)
  \closepath\fillpath
  \put(-10,0){\thicklines
  \moveto(30,40)
  \curveto(10,50)(10,30)(30,40)
  \curveto(50,50)(50,30)(30,40)
  \closepath\strokepath}
  \end{picture}
  \end{example}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{Spessori delle linee}
Gli spessori delle linee si fissano con i tre comandi:
\begin{lscommand}
\ci{thinlines}\\
\ci{thicklines}\\
\ci{linethickness}\marg{spessore}
\end{lscommand}
Di default \ci{thinlines} traccia linee spesse \texttt{0.4pt}, piuttosto sottili; invece \ci{thicklines} traccia le linee di spessore doppio, cioè di \texttt{0.8pt}; anche se un punto tipografico è circa uguale ad un terzo di millimetro, l'effetto si nota più di quanto si possa immaginare.

Tuttavia, con \ci{linethickness} si può specificare uno spessore qualsiasi, esprimendolo in qualunque unità l'utente voglia usare, fra le tante che il sistema \TeX\ riconosce; punti (pt), punti didot (dd), pollici (in), millimetri (mm), centimetri (cm), pica (pc), cicero (cc), occhio mediano (ex), corpo (em), persino qualunque altra dimensione conservata in un registro dimensionale, come, per esempio, \cs{textwidth}.

\subsection{Fine dei percorsi e loro giunzioni}
Con linee spesse si vedono chiaramente le giunzioni dei tratti e la terminazione delle linee potrebbe essere troppo brusca; negli esempi che seguono le linee sono spesse 3\,mm; le terminazioni e le giunzioni sono esplicitate con i comandi immessi nel codice.

\subsubsection{Senza specificazioni}
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60,30)
\linethickness{3mm}
\Line(0,0)(25,30)
\Line(25,30)(50,0)
\end{picture}
\end{example}

\subsubsection{Con \texorpdfstring{\ci}{}{buttcap} e \texorpdfstring{\ci}{}{miterjoin}}
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60,30)
\buttcap\miterjoin
\linethickness{3mm}
\polyline(0,0)(25,30)(50,0)
\end{picture}
\end{example}
Con linee spesse, si vede chiaramente la convenienza di tracciare una linea continua, anche spezzata, rispetto a tracciare singoli segmenti e archi di curve.

\subsubsection{Con \texorpdfstring{\ci}{}{squarecap} e \texorpdfstring{\ci}{}{beveljoin}}
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60,30)
\squarecap\beveljoin
\linethickness{3mm}
\polyline(0,0)(25,30)(50,0)
\end{picture}
\end{example}
Sfugge ad uno sguardo superficiale, ma si esaminino le terminazioni della linea di questo esempio con quelle dell'esempio precedente: in questo secondo esempio le aste sono prolungate perché la terminazione consiste in uno \emph{square}, più precisamente in un mezzo quadrato.

\subsubsection{Con \texorpdfstring{\ci}{}{roundcap} e \texorpdfstring{\ci}{}{roundjoin}}
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60,30)
\roundcap\roundjoin
\linethickness{3mm}
\polyline(0,0)(25,30)(50,0)
\end{picture}
\end{example}




\subsection{Testo e formule}

\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,5)
  \thicklines
  \put(1,0.5){\line(2,1){3}}
  \put(4,2){\line(-2,1){2}}
  \put(2,3){\line(-2,-5){1}}
  \put(0.7,0.3){$A$}
  \put(4.05,1.9){$B$}
  \put(1.71,3){$C$}
  \put(3.1,2.55){$a$}
  \put(1.25,1.7){$b$}
  \put(2.5,1){$c$}
  \put(0.3,4){$F=
    \sqrt{s(s-a)(s-b)(s-c)}$}
  \put(3.5,0.4){$\displaystyle
    s:=\frac{a+b+c}{2}$}
\end{picture}
\end{example}

L'esempio mostra che sulla tela si possono mettere non solo dei disegni, ma anche del testo o delle formule.
Per collocare questi oggetti non grafici con più precisione, si può ricorrere all'intermezzo di “scatole”, come \ci{makebox} usata in un esempio precedente, o, per incorniciarli, si può usare il comando \ci{framebox}. La scatola \ci{makebox} richiede che le siano specificate le dimensioni, anche nulle; possono inoltre essere specificati fino a due codici di posizione scelti fra \texttt{t} (in testa), \texttt{b} (alla base), \texttt{l} (a sinistra), \texttt{r} (a destra) \texttt{c}  (al centro). In questo modo, il contenuto  viene messo “dentro” la scatola (anche se avesse dimensioni nulle, sporgerebbe fuori, ma è appunto quello che si vuole) in modo da dare una posizione precisa a quel contenuto.
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(65,10)(0,-5)
\put(0,0){\vector(1,0){50}}
\put(0,-1){\line(0,1){2}}
\put(10,-1){\line(0,1){2}}
\put(30,-1){\line(0,1){2}}
\put(40,-1){\line(0,1){2}}
\put(0,-2){\makebox(0,0)[tc]{B}}
\put(10,-2){\makebox(0,0)[tl]{C}}
\put(30,-2){\makebox(0,0)[tr]{D}}
\put(40,-2){\makebox(0,0)[t]{E}}
\put(0,2){\makebox(0,0)[bc]{L}}
\put(10,2){\makebox(0,0)[bl]{M}}
\put(30,2){\makebox(0,0)[br]{N}}
\put(40,2){\makebox(0,0)[b]{O}}
\end{picture}
\end{example}



\subsection{\texorpdfstring{\ci}{}{multiput} e \texorpdfstring{\ci}{}{linethickness}}

\begin{example}
\setlength{\unitlength}{2mm}
\begin{picture}(30,20)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){26}%
    {\line(0,1){20}}
  \multiput(0,0)(0,1){21}%
    {\line(1,0){25}}
  \linethickness{0.15mm}
  \multiput(0,0)(5,0){6}%
    {\line(0,1){20}}
  \multiput(0,0)(0,5){5}%
    {\line(1,0){25}}
  \linethickness{0.3mm}
  \multiput(5,0)(10,0){2}%
    {\line(0,1){20}}
  \multiput(0,5)(0,10){2}%
    {\line(1,0){25}}
\end{picture}
\end{example}

Il comando
\begin{lscommand}
  \ci{multiput}\garg{$x,y$}\garg{$\Delta x,\Delta y$}\marg{$n$}\marg{oggetto}
\end{lscommand}
\noindent
ha quattro argomenti; il punto di partenza, il vettore di traslazione da un oggetto al successivo, il numero \emph{totale} di oggetti, e l'\meta{oggetto} da mettere ripetitivamente in posizione. Si ricordi che \ci{linethickness}, avendo caricato il pacchetto \pai{pict2e}, agisce su tutte le linee, non solo quelle verticali e orizzontali, come succedeva prima che esso fosse disponibile.

%\subsection{Ovals}
\subsection{Rettangoli arrotondati}

\begin{example}
\setlength{\unitlength}{7.5mm}
\begin{picture}(6,4)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){7}%
    {\line(0,1){4}}
  \multiput(0,0)(0,1){5}%
    {\line(1,0){6}}
  \thicklines
  \put(2,3){\oval(3,1.8)}
  \put(3,2){\color{red}\oval[0.25](3,1.8)}
  \thicklines
  \put(2,1){\oval(3,1.8)[tl]}
  \put(4,1){\oval(3,1.8)[b]}
  \put(4,3){\oval(3,1.8)[r]}
  \put(3,1.5){\oval(1.8,0.4)}
\end{picture}
\end{example}

Il comando
\begin{lscommand}
  \ci{put}\garg{$x,y$}\Marg{\ci{oval}}\oarg{raggio}\garg{$w,h$}
\end{lscommand}
\noindent o
\begin{lscommand}
  \ci{put}\garg{$x,y$}\Marg{\ci{oval}}\oarg{raggio}\garg{$w,h$}\oarg{parte}
\end{lscommand}
\noindent
produce un rettangolo con i vertici arrotondati; facoltativamente si può specificare il \meta{raggio} di curvatura degli spigoli; altrettanto facoltativamente si può specificare quale \meta{parte} del rettangolo disegnare; si possono specificare fino a due descrittori fra  \texttt{t} (parte superiore), \texttt{b} (parte inferiore), \texttt{l} (parte di sinistra), \texttt{r} (parte di destra); questa funzionalità era quasi necessaria prima dell'avvento di \pai{pict2e} e consentiva di disegnare alcuni archi di cerchio da $90^\circ$  o da $180^\circ$, ma ora, con \pai{pict2e}, si possono disegnare archi senza limitazioni. Se non si specifica il \meta{raggio}, viene assunto pari al minore fra metà altezza e metà larghezza del rettangolo; come si vede nell'esempio precedente, dove tutti questi rettangoli sono disegnati con il valore calcolato in automatico, eccetto il rettangolo rosso al centro del disegno.


\subsection{Uso ripetitivo di figure parziali}
Talvolta è comodo poter replicare elementi ripetitivi che non siano gestibili con \ci{multiput}; bisogna salvare certe parti grafiche in “scatole”, e poi usarne il contenuto come se si trattasse di un generico oggetto. L'esempio che segue disegna una “cartella” simile alle icone presenti in molti software; e la usa per costruire un albero di cartelle. Il comando \ci{savebox} in ambiente \ei{picture} si comporta come \ci{makebox}, tranne che  mette il suo contenuto in una scatola che deve essere già stata precedentemente allocata con un nome:
\begin{lscommand}
  \ci{newsavebox}\marg{nome}
\end{lscommand}
\noindent poi deve essere riempita con un contenuto:
\begin{lscommand}
  \ci{savebox}\marg{nome}\garg{larghezza,altezza}\oarg{posizione}\marg{contenuto}%
\end{lscommand}
\noindent
poi il suo \meta{contenuto} può essere recuperato quando, dove, e quante volte si vuole, con:
\begin{lscommand}
  \ci{put}\garg{$x,y$}\marg{\ci{usebox}}\marg{nome}
\end{lscommand}

L'argomento facoltativo \meta{posizione} è formato dai soliti codici che permettono di specificare il punto di riferimento della scatola che il comando \ci{put} metterà in posizione: \texttt{t} (in testa), \texttt{b} (alla base), \texttt{l} (a sinistra), \texttt{r} (a destra); vanno sempre usati a coppie come nell'esempio.

Il \meta{nome} identifica un registro\discretionary{-}{}{-}scatola di \LaTeX\ e quindi ha la natura di una macro, il che giustifica la barra rovescia nei nomi \verb|\foldera| e \verb|\folderb|.
Le figure “inscatolate” possono essere annidate; per esempio la figura della scatola \ci{folderb} contiene un richiamo della scatola  \ci{foldera}.


\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\foldera}
\savebox{\foldera}
  (40,32)[bl]{%         definizione
  \multiput(0,0)(0,28){2}
    {\line(1,0){40}}
  \multiput(0,0)(40,0){2}
    {\line(0,1){28}}
  \put(1,28){\oval(2,2)[tl]}
  \put(1,29){\line(1,0){5}}
  \put(9,29){\oval(6,6)[tl]}
  \put(9,32){\line(1,0){8}}
  \put(17,29){\oval(6,6)[tr]}
  \put(20,29){\line(1,0){19}}
  \put(39,28){\oval(2,2)[tr]}
}
\newsavebox{\folderb}
\savebox{\folderb}
  (40,32)[l]{% definizione dei folder
             % secondari
  \put(0,14){\line(1,0){8}}
  \put(8,0){\usebox{\foldera}}
}
\put(34,26){\line(0,1){102}}% albero
                       % di cartelle
\put(14,128){\usebox{\foldera}}
\multiput(34,86)(0,-37){3}
  {\usebox{\folderb}}
\end{picture}
\end{example}

\subsection{Curve di Bézier quadratiche}
Qui si mostrano solo alcuni disegni eseguiti con le semplici curve quadratiche.

\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,4)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){7}
    {\line(0,1){4}}
  \multiput(0,0)(0,1){5}
    {\line(1,0){6}}
  \thicklines
  \put(0.5,0.5){\line(1,5){0.5}}
  \put(1,3){\line(4,1){2}}
  \qbezier(0.5,0.5)(1,3)(3,3.5)
  \thinlines
  \put(2.5,2){\line(2,-1){3}}
  \put(5.5,0.5){\line(-1,5){0.5}}
  \linethickness{1mm}
  \qbezier(2.5,2)(5.5,0.5)(5,3)
  \thinlines
  \qbezier(4,2)(4,3)(3,3)
  \qbezier(3,3)(2,3)(2,2)
  \qbezier(2,2)(2,1)(3,1)
  \qbezier(3,1)(4,1)(4,2)
\end{picture}
\end{example}

Come mostra questo esempio, spezzare una circonferenza in quattro archi quadratici di $90^\circ$ produce risultati insoddisfacenti e bisognerebbe suddividerla  almeno in otto archi di $45^\circ$; la stessa operazione con quattro archi di terzo grado, alla base del comando \ci{circle}, porta invece a un risultato difficilmente distinguibile da una vera circonferenza


\subsection{Catenaria}
La catenaria è la curva descritta da una catena (da cui il nome) o meglio, da una corda, fermata fra due punti a una certa distanza; risolvendo il problema meccanico, si determina che la curva descritta dalla corda è un arco della curva del coseno iperbolico. Nonostante il coseno iperbolico sia una funzione trascendente, un arco abbastanza grande in prossimità del suo vertice si approssima piuttosto bene con un arco di parabola, quindi con un curva quadratica di Bézier.

\begin{figure}[!tb]
\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(4.3,3.6)(-2.5,-0.25)
\put(-2,0){\vector(1,0){4.4}}
\put(2.45,-.05){$x$}
\put(0,0){\vector(0,1){3.2}}
\put(0,3.35){\makebox(0,0){$y$}}
\put(-2.5,-0.25){\circle*{0.1}}
\thicklines
\qbezier(0.0,0.0)(1.2384,0.0)
  (2.0,2.7622)
\qbezier(0.0,0.0)(-1.2384,0.0)
  (-2.0,2.7622)
\linethickness{0.075mm}
\multiput(-2,0)(1,0){5}
  {\line(0,1){3}}
\multiput(-2,0)(0,1){4}
  {\line(1,0){4}}
\linethickness{0.2mm}
\put( 0.3,0.12763){\line(1,0){0.4}}
\put(0.5,-0.07237){\line(0,1){0.4}}
\put(-0.7,0.12763){\line(1,0){0.4}}
\put(-0.5,-0.07237){\line(0,1){0.4}}
\put(0.8,0.54308){\line(1,0){0.4}}
\put(1,0.34308){\line(0,1){0.4}}
\put(-1.2,0.54308){\line(1,0){0.4}}
\put(-1,0.34308){\line(0,1){0.4}}
\put(1.3,1.35241){\line(1,0){0.4}}
\put(1.5,1.15241){\line(0,1){0.4}}
\put(-1.7,1.35241){\line(1,0){0.4}}
\put(-1.5,1.15241){\line(0,1){0.4}}
\end{picture}
\end{example}
\end{figure}

L'equazione della catenaria è dunque \(y=\cosh x -1\); è una curva simmetrica rispetto all'asse verticale e ciascuna delle due metà può essere disegnata con una curva di Bézier quadratica; scegliendo opportunamente il punto guida di ciascuno dei due archi si può disegnare un'ottima approssimazione della catenaria; le crocette che compaiono nel disegno sono punti calcolati della catenaria vera, e la differenza fra la curva vera e quella approssimata con la curva di Bézier è impercettibile.
Anche questo esempio mostra l'effetto dell'uso del secondo argomento facoltativo del comando di apertura dell'ambiente \ei{picture}. In questo caso l'origine degli assi cartesiani è spostata rispetto al vertice inferiore sinistro della tela: questo vertice ha le coordinate cartesiane  $(-2.5,-0.25)$ e in quel vertice è stato posto il pallino nero.

\subsection{La rapidità nella teoria della relatività speciale}
Nella relatività speciale risulta che la velocità riferita a quella della luce segue questa legge
\[
\beta= \frac{v}{c} = \tanh \chi
\]
Il diagramma si può rappresentare come nell'esempio della pagina~\pageref{pag:rapidita}.

\begin{figure}[!tb]\label{pag:rapidita}
\begin{example}
\setlength{\unitlength}{8mm}
\begin{picture}(6,4)(-3,-2)
  \put(-2.5,0){\vector(1,0){5}}
  \put(2.7,-0.1){$\chi$}
  \put(0,-1.5){\vector(0,1){3}}
  \multiput(-2.5,1)(0.4,0){13}
    {\line(1,0){0.2}}
  \multiput(-2.5,-1)(0.4,0){13}
    {\line(1,0){0.2}}
  \put(0.2,1.4)
    {$\beta=v/c=\tanh\chi$}
  \qbezier(0,0)(0.8853,0.8853)
    (2,0.9640)
  \qbezier(0,0)(-0.8853,-0.8853)
    (-2,-0.9640)
    {\color{red}%
    \cbezier(-2,-0.964)(-0.333,-0.950)(0.3,0.950)(2,0.964)}
  \put(-3,-2){\circle*{0.2}}
\end{picture}
\end{example}
\end{figure}

La simmetria della curva permette di eseguire calcoli abbastanza semplici con le curve quadratiche per determinare gli estremi e i punti guida delle curve di Bézier; i calcoli sono decisamente più complessi con le curve cubiche, tuttavia, come si vede dal disegno, la curva rossa (cubica) e la curva nera (quadratica) praticamente si sovrappongono.

Per disegni più complessi ci si può rivolgere al pacchetto \pai{pstricks} o al pacchetto \pai{tikz}; si veda anche \graphicscompanion.

Se l'utente se la sente di fare i calcoli necessari e di programmare in linguaggio \TeX\ e \LaTeX, l'ambiente \ei{pict2e} permette di fare cose anche più complicate di quelle esposte qui; benché il testo sia un po' datato, si veda il testo \graphicsinlatex.

\section{Le collezioni PGF e \TikZ}
\label{sec:tikz}

Oggi ogni compilatore basato su \LaTeX\ può creare una bella grafica vettoriale; sono solo le interfacce a essere piuttosto diverse rispetto al semplice linguaggio dell'ambiente \ei{picture}. Il pacchetto \pai{pgf} definisce uno strato di astrazione fra le interfacce e l'uscita. Esso viene distribuito con un lungo manuale/tutorial \cite{pgfplot}. Perciò, in questo breve paragrafo introduttivo, restiamo molto in superficie.

Il pacchetto \pai{pgf} fornisce un linguaggio di alto livello per accedere alle sue funzionalità mediante il pacchetto \pai{tikz}. \TikZ\ definisce moltissimi comandi di elevata efficienza per disegnare grafici proprio dall'interno del documento. Bisogna usare l'ambiente \ei{tikzpicture} nel quale si inseriscono i comandi di \TikZ.


Per prima cosa un esempio con un diagramma privo di senso.
\begin{example}
\begin{tikzpicture}[scale=3]
  \clip (-0.1,-0.2)
     rectangle (1.8,1.2);
  \draw[step=.25cm,gray,very thin]
       (-1.4,-1.4) grid (3.4,3.4);
  \draw (-1.5,0) -- (2.5,0);
  \draw (0,-1.5) -- (0,1.5);
  \draw (0,0) circle (1cm);
  \filldraw[fill=green!20!white,
            draw=green!50!black]
    (0,0) -- (3mm,0mm)
         arc (0:30:3mm) -- cycle;
\end{tikzpicture}
\end{example}
\noindent Si noti il punto e virgola usato per terminare il codice dei vari comandi.

\noindent Un semplice diagramma di Venn.
\begin{example}
\begin{tikzpicture}
  \node[circle,draw,
        minimum size=3cm,
        label=120:{economics}]
         at (0,0) {};
  \node[circle,draw,
        minimum size=3cm,
        label=60:{psychology}]
         at (1,0) {};
  \node (i) at (0.5,-1) {};
  \node at (0.6,-2.5)
    {behavioral economics}
    edge[->,thick,
         out=60,in=-60] (i);
\end{tikzpicture}
\end{example}

\noindent Si notino i cicli \texttt{foreach} nell'esempio seguente.
\begin{example}
\begin{tikzpicture}[scale=0.8]
  \tikzstyle{v}=[circle, minimum size=2mm,inner sep=0pt,draw]
  \foreach \i in {1,...,8}
    \foreach \j in {1,...,3}
      \node[v]
        (G-\i-\j) at (\i,\j) {};
  \foreach \i in {1,...,8}
    \foreach \j/\o in {1/2,2/3}
      \draw[->]
        (G-\i-\j) -- (G-\i-\o);
  \foreach \i/\n in
    {1/2,2/3,3/4,4/5,5/6,6/7,7/8}
    \foreach \j/\o in {1/2,2/3} {
       \draw[->] (G-\i-\j) -- (G-\n-\o);
       \draw[->] (G-\n-\j) -- (G-\i-\o);
    }
\end{tikzpicture}
\end{example}

Con l'uso di ulteriori \emph{librerie \TikZ} vengono aggiunte un certo numero di funzionalità per disegnare forme speciali, come questa scatola (grigia) con i bordi leggermente curvi.
\begin{example}
\usetikzlibrary{%
  decorations.pathmorphing}
\begin{tikzpicture}[
     decoration={bent,aspect=.3}]
 \draw [decorate,fill=lightgray]
        (0,0) rectangle (5.5,4);
 \node[circle,draw]
        (A) at (.5,.5) {A};
 \node[circle,draw]
        (B) at (5,3.5) {B};
 \draw[->,decorate] (A) -- (B);
 \draw[->,decorate] (B) -- (A);
\end{tikzpicture}
\end{example}

\begin{example}
\usetikzlibrary{positioning}
\begin{tikzpicture}[xscale=6,
     yscale=8,>=stealth]
  \tikzstyle{v}=[circle,
     minimum size=1mm,draw,thick]
  \node[v] (a) {$1$};
  \node[v] (b) [right=of a] {$2$};
  \node[v] (c) [below=of a] {$2$};
  \node[v] (d) [below=of b] {$1$};
  \draw[thick,->]
        (a) to node {} (c);
  \draw[thick,->]
        (a) to node {} (d);
  \draw[thick,->]
        (b) to node {} (d);
\end{tikzpicture}
\end{example}

Si possono disegnare gli schemi sintattici che hanno l'aspetto di quelli che si trovano in un libro di programmazione Pascal. Il codice intimorisce un poco rispetto a quello degli esempi mostrati sopra, perciò qui si mostra solo il risultato. Se si dà un'occhiata alla documentazione di \pai{pgf} si trova un tutorial nel quale è documentato come disegnare proprio questo diagramma.

\begin{center}
\begin{tikzpicture}[point/.style={coordinate},thick,draw=black!50,>=stealth',
                    tip/.style={->,shorten >=1pt},every join/.style={rounded corners},
                    skip loop/.style={to path={-- ++(0,#1) -| (\tikztotarget)}},
                    hv path/.style={to path={-| (\tikztotarget)}},
                    vh path/.style={to path={|- (\tikztotarget)}},
                 terminal/.style={
            rounded rectangle,
            minimum size=6mm,
            thick,draw=black!50,
            top color=white,bottom color=black!20,
            font=\ttfamily\tiny},
                nonterminal/.style={
                       rectangle,
                       minimum size=6mm,
                       thick,
                       draw=red!50!black!50,         % 50% red and 50% black,
                       top color=white,              % a shading that is white at the top...
                       bottom color=red!50!black!20, % and something else at the bottom
                       font=\itshape\tiny}]
\matrix[column sep=4mm] {
  % First row:
  & & & & & & & & & & & \node (plus) [terminal] {+};\\
  % Second row:
  \node (p1) [point] {}; &     \node (ui1)    [nonterminal] {unsigned integer}; &
  \node (p2) [point] {}; &     \node (dot)    [terminal]    {.};                &
  \node (p3) [point] {}; &     \node (digit) [terminal]     {digit};            &
  \node (p4) [point] {}; &     \node (p5)     [point] {};                       &
  \node (p6) [point] {}; &     \node (e)      [terminal]    {E};                &
  \node (p7) [point] {}; &                                                      &
  \node (p8) [point] {}; &     \node (ui2)    [nonterminal] {unsigned integer}; &
  \node (p9) [point] {}; &     \node (p10)    [point]       {};\\
  % Third row:
  & & & & & & & & & & & \node (minus)[terminal] {-};\\
};
{ [start chain]
  \chainin (p1);
  \chainin (ui1)   [join=by tip];
  \chainin (p2)    [join];
  \chainin (dot)   [join=by tip];
  \chainin (p3)    [join];
  \chainin (digit) [join=by tip];
  \chainin (p4)    [join];
  { [start branch=digit loop]
    \chainin (p3) [join=by {skip loop=-6mm,tip}];
  }
  \chainin (p5)    [join,join=with p2 by {skip loop=6mm,tip}];
  \chainin (p6)    [join];
  \chainin (e)     [join=by tip];
  \chainin (p7)    [join];
  { [start branch=plus]
    \chainin (plus) [join=by {vh path,tip}];
    \chainin (p8)    [join=by {hv path,tip}];
  }
  { [start branch=minus]
    \chainin (minus) [join=by {vh path,tip}];
    \chainin (p8)    [join=by {hv path,tip}];
  }
  \chainin (p8)    [join];
  \chainin (ui2)   [join=by tip];
  \chainin (p9)    [join,join=with p6 by {skip loop=-11mm,tip}];
  \chainin (p10)   [join=by tip];
}
\end{tikzpicture}
\end{center}

E c'è ancora di più; per disegnare dati numerici o andamenti di funzioni è bene esaminare  il pacchetto \pai{pgfplots} e la sua documentazione. Può anche chiamare il programma esterno \texttt{gnuplot} per controllare le vere funzioni che si sono disegnate.

Per avere maggiori indicazioni conviene visitare l'eccellente sito di Kjell Magne Fauske \url{http://www.texample.net/tikz/}. Contiene un deposito continuamente in espansione di grafici bellissimi e altro codice \LaTeX. Su \texttt{www.texample.net} si può trovare l'URL del sito \href{https://texample.net/tikz/examples/}{list of examples with PGF/TikZ} così che non è necessario scrivere tutto quel codice a mano.

%%% Local Variables:
%%% TeX-master: "lshort.tex"
%%% mode: flyspell
%%% TeX-PDF-mode: t
%%% End:
