> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/it/formattazione/11-code-listing.md).

# Listato di codice

## Introduzione

LaTeX è ampiamente usato nella scienza e la programmazione è diventata un aspetto importante in diversi ambiti della scienza, da cui la necessità di uno strumento che visualizzi correttamente il codice. Questo articolo spiega come utilizzare il comando standard **verbatim** l'ambiente nonché il pacchetto **listings**, che offrono funzionalità di formattazione del codice più avanzate. [Questo articolo separato](/latex/it/formattazione/12-code-highlighting-with-minted.md) discute il `minted` pacchetto, che esegue l'evidenziazione della sintassi usando Python `pygmentize` libreria.

## L'ambiente verbatim

Lo strumento predefinito per visualizzare il codice in LaTeX è `verbatim`, che genera un output in font monospaziato.

```latex
\begin{verbatim}
Il testo racchiuso all'interno dell'ambiente \texttt{verbatim}
viene stampato direttamente
e tutti i comandi \LaTeX{} vengono ignorati.
\end{verbatim}
```

[Apri questo esempio su Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%7D%0A%5Cend%7Bdocument%7D)

Il codice sopra produce il seguente output:

![Verbatim1.png](/files/5b5e276a79b110f11de469942b27360eddd6c705)

Proprio come nell'esempio all'introduzione, tutto il testo viene stampato mantenendo a capo e spazi bianchi. Esiste una versione con asterisco di questo comando il cui output è leggermente diverso.

```latex
\begin{verbatim*}
Il testo racchiuso all'interno dell'ambiente \texttt{verbatim}
viene stampato direttamente
e tutti i comandi \LaTeX{} vengono ignorati.
\end{verbatim*}
```

[Apri questo esempio su Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%2A%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%2A%7D%0A%5Cend%7Bdocument%7D)

Il codice sopra produce il seguente output:

![Verbatim2.png](/files/ce918391db0d30688675ff7db72154498d4a4563)

In questo caso gli spazi vengono evidenziati con un carattere speciale "spazio visibile": **`␣`**.

Un testo simile al verbatim può essere usato anche in un paragrafo per mezzo del `\verb` comando.

```latex
Nella directory \verb|C:\Windows\system32| puoi trovare molte applicazioni di sistema
di Windows.

Il comando \verb+\ldots+ produce \ldots
```

[Apri questo esempio su Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=using+the+%5Cverb+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AIn+the+directory+%5Cverb%7CC%3A%5CWindows%5Csystem32%7C+you+can+find+a+lot+of+Windows+%0Asystem+applications.+%0A+%0AThe+%5Cverb%2B%5Cldots%2B+command+produces+%5Cldots%0A%5Cend%7Bdocument%7D)

Il codice sopra produce il seguente output:

![Verbatim3OLV2.png](/files/aeef7bae1bc93133f87861d84782b433879c4446)

Il comando `\verb|C:\Windows\system32|` stampa il testo compreso tra i delimitatori `|` in formato verbatim. Qualsiasi carattere, tranne lettere e `*`, può essere usato come delimitatore. Per esempio `\verb+\ldots+` usa `+` come delimitatore.

## Usare listings per evidenziare il codice

Per usare il `lstlisting` ambiente devi aggiungere la seguente riga al preambolo del documento:

```latex
\usepackage{listings}
```

Ecco un esempio di utilizzo dell' `lstlisting` ambiente tratto dal `listings` pacchetto:

```latex
\begin{lstlisting}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #per diventare la matrice di incidenza
    VT = np.zeros((n*m,1), int)  #variabile fittizia

    #calcola la matrice xor bit a bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Apri questo `listings` esempio su Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Il codice sopra produce il seguente output:

![CodeListingEx1.png](/files/ae147b3b6702a212cdc88293f6aa67dce55ea48d)

In questo esempio, l'output ignora tutti i comandi LaTeX e il testo viene stampato mantenendo tutti i ritorni a capo e gli spazi bianchi digitati. Vediamo un secondo esempio:

```latex
\begin{lstlisting}[language=Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #per diventare la matrice di incidenza
    VT = np.zeros((n*m,1), int)  #variabile fittizia

    #calcola la matrice xor bit a bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Apri questo `listings` esempio su Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Python+listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%5Blanguage%3DPython%5D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Il codice sopra produce il seguente output:

![CodeListingEx2.png](/files/aca373f7778b141aa67a2281eb9545d6263d89a5)

Il parametro aggiuntivo tra parentesi `[language=Python]` abilita l'evidenziazione del codice per questo particolare linguaggio di programmazione (Python), le parole speciali sono in grassetto e i commenti sono in corsivo. Vedi il [guida di riferimento](#reference-guide) per un elenco completo dei linguaggi di programmazione supportati.

## Importare codice da un file

Il codice è solitamente memorizzato in un file sorgente, quindi un comando che preleva automaticamente il codice da un file diventa molto utile.

```latex
Il codice seguente verrà importato direttamente da un file

\lstinputlisting[language=Octave]{BitXorMatrix.m}
```

![CodeListingEx3.png](/files/c768827184a7c90786971abc6c10c3e4d073edab)

Il comando `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importa il codice dal file *BitXorMatrix.m*, il parametro aggiuntivo tra parentesi abilita l'evidenziazione del linguaggio per il linguaggio di programmazione Octave. Se devi importare solo una parte del file puoi specificare due parametri separati da virgole tra parentesi. Per esempio, per importare il codice dalla riga 2 alla riga 12, il comando precedente diventa

```latex
\lstinputlisting[language=Octave, firstline=2, lastline=12]{BitXorMatrix.m}
```

Se `firstline` o `lastline` è omesso, si presume che i valori siano l'inizio del file o la fine del file, rispettivamente.

## Stili e colori del codice

La formattazione del codice con il pacchetto **listing** è altamente personalizzabile. Vediamo un esempio

```latex
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}
Il codice seguente verrà importato direttamente da un file

\lstinputlisting[language=Octave]{BitXorMatrix.m}
\end{document}
```

Il codice sopra produce il seguente output:

![CodeListingEx4.png](/files/9eaf040c6ae20042189c987cd300e549c0225f3a)

Come vedi, la colorazione e lo stile del codice migliorano notevolmente la leggibilità.

In questo esempio il pacchetto **xcolor** viene importato e quindi il comando `\definecolor{}{}{}` viene usato per definire nuovi colori in formato RGB che saranno utilizzati in seguito. Per maggiori informazioni vedi: [uso dei colori in LaTeX](/latex/it/formattazione/13-using-colors-in-latex.md)

Ci sono essenzialmente due comandi che generano lo stile per questo esempio:

**\lstdefinestyle{mystyle}{...}**

Definisce un nuovo stile di elenco codice chiamato "mystyle". All'interno della seconda coppia di parentesi graffe vengono passate le opzioni che definiscono questo stile; vedi la guida di riferimento per una descrizione completa di queste e di alcuni altri parametri.

**\lstset{style=mystyle}**

Abilita lo stile "mystyle". Questo comando può essere usato all'interno del documento per passare, se necessario, a uno stile diverso.

## Didascalie e l'elenco dei listati

Proprio come nei float ([tabelle](/latex/it/figure-e-tabelle/01-tables.md) e [figure](/latex/it/altri-argomenti/27-inserting-images.md)), le didascalie possono essere aggiunte a un elenco per una presentazione più chiara.

```latex
\begin{lstlisting}[language=Python, caption=Esempio Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #per diventare la matrice di incidenza
    VT = np.zeros((n*m,1), int)  #variabile fittizia

    #calcola la matrice xor bit a bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Apri questo `listings` esempio su Overleaf](/latex/it/formattazione/11-code-listing.md)

Il codice sopra produce il seguente output:

![CodeListingEx5.png](/files/62f28fefae9cbfb1af13ea681167c8e32ce6ac15)

Aggiungendo il parametro separato da virgole `caption=Esempio Python` all'interno delle parentesi, si abilita la didascalia. Questa didascalia può essere usata in seguito nell'elenco dei listati.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/8b2a90b82933ef8aef4de87c8718ac57f0b301d6)

## Progetto di esempio su Overleaf

Apri questo link per [provare l' `listings` esempio del pacchetto su Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Guida di riferimento

### Linguaggi supportati

**linguaggi supportati (e i loro dialetti, se possibile; i dialetti sono specificati tra parentesi e i dialetti predefiniti sono in corsivo):**

|                                                        |                                                  |
| ------------------------------------------------------ | ------------------------------------------------ |
| ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, *R/3 6.10*) | ACSL                                             |
| Ada (*2005*, 83, 95)                                   | Algol (60, *68*)                                 |
| Ant                                                    | Assembler (Motorola68k, x86masm)                 |
| Awk (*gnu*, POSIX)                                     | bash                                             |
| Basic (Visual)                                         | C (*ANSI*, Handel, Objective, Sharp)             |
| C++ (ANSI, GNU, *ISO*, Visual)                         | Caml (*light*, Objective)                        |
| CIL                                                    | Clean                                            |
| Cobol (1974, *1985*, ibm)                              | Comal 80                                         |
| command.com (*WinXP*)                                  | Comsol                                           |
| csh                                                    | Delphi                                           |
| Eiffel                                                 | Elan                                             |
| erlang                                                 | Euphoria                                         |
| Fortran (77, 90, *95*)                                 | GCL                                              |
| Gnuplot                                                | Haskell                                          |
| HTML                                                   | IDL (empty, CORBA)                               |
| inform                                                 | Java (empty, AspectJ)                            |
| JVMIS                                                  | ksh                                              |
| Lingo                                                  | Lisp (empty, Auto)                               |
| Logo                                                   | make (empty, gnu)                                |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                           |
| Mercury                                                | MetaPost                                         |
| Miranda                                                | Mizar                                            |
| ML                                                     | Modula-2                                         |
| MuPAD                                                  | NASTRAN                                          |
| Oberon-2                                               | OCL (decorative, *OMG*)                          |
| Octave                                                 | Oz                                               |
| Pascal (Borland6, *Standard*, XSC)                     | Perl                                             |
| PHP                                                    | PL/I                                             |
| Plasm                                                  | PostScript                                       |
| POV                                                    | Prolog                                           |
| Promela                                                | PSTricks                                         |
| Python                                                 | R                                                |
| Reduce                                                 | Rexx                                             |
| RSL                                                    | Ruby                                             |
| S (empty, PLUS)                                        | SAS                                              |
| Scilab                                                 | sh                                               |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                     |
| SPARQL                                                 | SQL                                              |
| tcl (empty, tk)                                        | TeX (AlLaTeX, common, LaTeX, *plain*, primitive) |
| VBScript                                               | Verilog                                          |
| VHDL (empty, AMS)                                      | VRML (*97*)                                      |
| XML                                                    | XSLT                                             |

### Opzioni per personalizzare gli stili degli elenchi di codice

* **backgroundcolor** - colore dello sfondo. Pacchetto esterno ***color*** o ***xcolor*** necessario.
* **commentstyle** - stile dei commenti nel linguaggio sorgente.
* **basicstyle** - dimensione/famiglia del carattere, ecc. per il sorgente (ad es. `basicstyle=\ttfamily\small`)
* **keywordstyle** - stile delle parole chiave nel linguaggio sorgente (ad es. `keywordstyle=\color{red}`)
* **numberstyle** - stile usato per i numeri di riga
* **numbersep** - distanza dei numeri di riga dal codice
* **stringstyle** - stile delle stringhe nel linguaggio sorgente
* **showspaces** - evidenzia gli spazi nel codice (vero/falso)
* **showstringspaces** - evidenzia gli spazi nelle stringhe (vero/falso)
* **showtabs** - evidenzia le tabulazioni nel codice (vero/falso)
* **numeri** - posizione dei numeri di riga (sinistra/destra/nessuna, cioè nessun numero di riga)
* **prebreak** - mostra un segno alla fine della riga spezzata (ad es. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - posizione della didascalia (t/b)
* **riquadro** - mostra il riquadro esterno al codice (nessuno/linea sinistra/linea superiore/linea inferiore/linee/riquadro singolo/riquadro ombra)
* **breakatwhitespace** - imposta se le interruzioni automatiche devono avvenire solo negli spazi
* **breaklines** - interruzione automatica delle righe
* **keepspaces** - mantiene gli spazi nel codice, utile per l'indentazione
* **tabsize** - dimensione predefinita delle tabulazioni
* **escapeinside** - specifica i caratteri per passare dal codice sorgente a LaTeX (ad es. `escapeinside={\%*}{*)}`)
* **rulecolor** - specifica il colore del riquadro

## Letture aggiuntive

Per ulteriori informazioni, vedi:

* [Evidenziazione del codice con minted](/latex/it/formattazione/12-code-highlighting-with-minted.md)
* [Uso dei colori in LaTeX](/latex/it/formattazione/13-using-colors-in-latex.md)
* [Indice](/latex/it/struttura-del-documento/02-table-of-contents.md)
* [Gestione in un grande progetto](/latex/it/struttura-del-documento/07-management-in-a-large-project.md)
* [Progetti LaTeX con più file](/latex/it/struttura-del-documento/08-multi-file-latex-projects.md)
* [Dimensioni, famiglie e stili dei caratteri](/latex/it/caratteri/01-font-sizes-families-and-styles.md)
* [Tipi di carattere](/latex/it/caratteri/02-font-typefaces.md)
* [**listings** documentazione del pacchetto](https://texdoc.org/serve/listings/0)
* [**listings** sito web CTAN](http://www.ctan.org/pkg/listings)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/it/formattazione/11-code-listing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
