# PGF/TikZ

PGF/TikZ è una coppia di linguaggi di programmazione per la produzione di grafica vettoriale (ad esempio illustrazioni e disegni tecnici) a partire da una descrizione geometrica/algebrica, con funzionalità standard tra cui il disegno di punti, linee, frecce, percorsi, cerchi, ellissi e poligoni. PGF è un linguaggio di basso livello, mentre TikZ è un insieme di macro di livello superiore che utilizzano PGF. I comandi PGF e TikZ di alto livello vengono richiamati come macro TeX, ma a differenza di PSTricks, la grafica PGF/TikZ è descritta in un linguaggio che ricorda MetaPost. Till Tantau è l'ideatore dei linguaggi PGF e TikZ. È anche lo sviluppatore principale dell'unico interprete noto per PGF e TikZ, scritto in TeX. PGF è l'acronimo di "Portable Graphics Format". TikZ è stato introdotto nella versione 0.95 di PGF ed è un acronimo ricorsivo di "TikZ ist kein Zeichenprogramm" (in tedesco "TikZ non è un programma di disegno").

## Introduzione

L'interprete PGF/TikZ può essere utilizzato dai popolari pacchetti macro LaTeX e ConTeXt, e anche direttamente da TeX.  Poiché TeX stesso non si occupa di grafica, l'interprete supporta diverse backend di output TeX: dvips, dvipdfm/dvipdfmx/xdvipdfmx, TeX4ht e il driver di output PDF interno di pdftex.  A differenza di PSTricks, PGF può quindi produrre direttamente un output PostScript o PDF, ma non può utilizzare alcune delle funzionalità di programmazione PostScript più avanzate che PSTricks può utilizzare a causa dell'effetto "minimo comune denominatore". PGF/TikZ è dotato di un'estesa documentazione; la versione 3.1.4a del manuale ha oltre 1300 pagine.
L'ambiente picture di LaTeX può anche essere utilizzato come front-end per PGF utilizzando il pacchetto pgfpict2e.
Il progetto è in costante sviluppo a partire dal 2005. La maggior parte dello sviluppo fino al 2018 è stato svolto da Till Tantau e, da allora, Henri Menke è stato il principale collaboratore. La versione 3.0.0 è stata distribuita il 20 dicembre 2013. Una delle principali novità di questa versione è la possibilità di disegnare grafici utilizzando il pacchetto graphdrawing, il quale richiede LuaTeX. Questa versione ha anche aggiunto un nuovo metodo di visualizzazione dei dati e il supporto per l'output SVG diretto tramite il nuovo driver dvisvgm.

## Esportare

Diversi editor grafici possono produrre output per PGF/TikZ, come il programma KDE Cirkuit e il programma di disegno matematico GeoGebra. L'esportazione in TikZ è disponibile anche come estensione per Inkscape, Blender, MATLAB, matplotlib, Gnuplot, Julia, e R. Il pacchetto circuit-macros di m4 macros esporta schemi di circuito elettrico in TikZ utilizzando il comando dpic -g. Il programma dot2tex può convertire i file nel linguaggio di descrizione del grafico DOT in PGF/TikZ.

## Librerie

TikZ contiene librerie per disegnare facilmente molti tipi di diagrammi, come le seguenti (in ordine alfabetico in base al nome della libreria):
* Computer grafica 3D – 3d
* Automa a stati finiti e Macchina di Turing – automata
* Sistema di coordinate – calc
* Calendario – calendar
* Catene: nodi generalmente connessi da lati e disposti in righe e colonne – chain
* Circuito logico e schema elettrico – circuits.logic e circuits.ee
* Modello E-R – er
* Diagrammi di sviluppo piano di un poliedro – folding
* Raffigurazione di un grafo con opzione di allineamento automatico – graphdrawing
* Sistema di Lindenmayer – lindenmayersystems
* Sequenze matematiche operazione aritmetica – math
* Matrice – matrix
* Mappa mentale – mindmap
* Disegni in prospettiva – perspective
* Rete di Petri – petri
* Circuito quantico – quantikz
* RDF annotazioni semantiche (solamente in output SVG) – rdf
* Forme e simboli speciali – shapes.geometric and shapes.symbols
* Ingrandimento di una parte di un inserto – spy
* Grafica vettoriale in SVG – svg.path
* Diagrammi ad albero – trees
* Turtle graphics – turtle
* Zoom e Panning – views

## Galleria d'immagini

Le immagini seguenti sono state create con TikZ e mostrano alcuni esempi delle tipologie grafiche che possono essere prodotte. Il collegamento in ogni didascalia rimanda al codice sorgente dell'immagine.
* Tavola periodica degli elementi chimici(librerie utilizzate: cac, shapes)
* Elica radicata(libreria utilizzata: calc)
* Mappa mentale di Al Faro(librerie utilizzate: mindmap, shapes.misc)
* Grafico di due variabili distribuite normalmente con grande varianza(librerie utilizzate: arrows, positioning)
* Rendering di ipersuperficie (librerie utilizzate: arrows, calc, decorations.markings, intersections, positioning)
* Modello di miscela gaussiana bayesiana (librerie utilizzate: arrows, backgrounds, calc, fit, matrix, patterns, plotmarks, shadows)
* Circuiti equivalenti dei condensatori(libreria utilizzata: arrows)
* Diagramma che mostra diversi tipi di test sulla media (librerie utilizzate: arrows, shapes)
* Grafico a gradiente di una funzione (libreria utilizzata: arrows.meta)
* Distribuzioni gaussiane multivariate (librerie utilizzate: arrows, positioning)
* Feed-forward del perceptron(librerie utilizzate: arrows, arrows.meta)
* Scudo della Trinità con le quattro relazioni (librerie utilizzate: graphdrawing, graphs, quotes)
* Grafico delle unità di lunghezza inglesi
* Omomorfismo grafico in C5 (libreria utilizzata: calc)
* Sottografi della partizione di Krausz di un dato grafico lineare
* Elenco di adiacenza di un grafico implementato come array di elenchi concatenati (librerie utilizzate: arrows, calc, positioning, shapes.multipart)