> 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/altri-argomenti/20-how-tex-macros-actually-work-part-2.md).

# Come funzionano davvero le macro TeX: Parte 2

[Parte 1](/latex/it/altri-argomenti/19-how-tex-macros-actually-work-part-1.md) [Parte 2](/latex/it/altri-argomenti/20-how-tex-macros-actually-work-part-2.md) [Parte 3](/latex/it/altri-argomenti/21-how-tex-macros-actually-work-part-3.md) [Parte 4](/latex/it/altri-argomenti/22-how-tex-macros-actually-work-part-4.md) [Parte 5](/latex/it/altri-argomenti/23-how-tex-macros-actually-work-part-5.md) [Parte 6](/latex/it/altri-argomenti/24-how-tex-macros-actually-work-part-6.md)

## Introduzione: Una storia in immagini

Come notato nella Parte 1, TeX deve “leggere” ogni carattere all'interno del tuo `.tex` file e quel processo di lettura è più correttamente definito come *scansione*. Tradizionalmente, l’elaborazione dell’input di TeX (scansione) viene paragonata al fatto che TeX abbia “occhi” con cui osservare l’input, quindi adotteremo quella analogia collaudata all’interno delle illustrazioni qui sotto.

### Grafico 1: Gli occhi sono pronti

Supponiamo che TeX abbia ottenuto dell’input da un `.tex` file e stia per elaborare la nostra stringa di caratteri `Hello World \jobname` contenuta all'interno di un paragrafo di testo. Controlla ciascun carattere a turno ed esamina il suo codice di categoria.

![Gli occhi di TeX pronti a scandire una riga di testo](/files/3c2e6523c1c46a5687b275b7217e0a82a32590bd)

### Grafico 2: Elaborazione dei codici di categoria

Nel grafico successivo vediamo, in linea generale (con ulteriori dettagli sotto), come TeX reagisce a diversi codici di categoria. Nota che i codici di categoria in totale sono 16 ma, per semplicità, ne stiamo illustrando l’uso di soli tre: 11, 10 e 0. Gli altri codici di carattere diventano importanti durante i processi di composizione di TeX, come la costruzione di tabelle, la composizione della matematica e il riconoscimento dei parametri delle macro.

![TeX che reagisce a diversi codici di categoria](/files/b87e088e494f0a3b2fb701790e3bfcf99d3be9e0)

#### Note per il Grafico 2

Qui stiamo considerando TeX mentre legge (scansiona) caratteri che fanno parte di un paragrafo di testo. TeX esamina ogni carattere, controlla il suo codice di categoria e intraprende l’azione appropriata in base al codice di categoria e alla “modalità” di TeX (uno stato basato su ciò che sta attualmente facendo).

* **(occhi verdi)** TeX vedrà che ciascuno di quei caratteri ha codice di categoria 11 (“lettera”) e inoltrerà quei caratteri per la composizione come parte del paragrafo che sta costruendo. Tuttavia, TeX non inoltra (usa) il solo codice di carattere ma, invece, usa la coppia di numeri (codice di carattere, codice di categoria) per calcolare un valore intero composito chiamato *token di carattere* (vedi sotto). Una volta prodotto quel token di carattere, esso entra nei processi/algoritmi interni di composizione di TeX.
* **(occhi blu)** TeX vede un carattere di spazio (ASCII 32) con codice di categoria 10 (“spaziatori”)—nota che, come discusso, è del tutto possibile che il codice di categoria di uno spazio (ASCII 32), o di qualsiasi carattere, sia stato cambiato in un altro valore—prima che venga letto da TeX.

Il modo in cui TeX elabora effettivamente i caratteri con codice di categoria 10 (“spaziatori”) varia a seconda di quando/dove TeX li vede—la “modalità” corrente di TeX. Per esempio, ci sono momenti in cui TeX si limita a saltarli. Qui, TeX saprà di aver rilevato un carattere con codice di categoria 10 (che per coincidenza è uno spazio, ASCII 32) mentre elabora il testo di un paragrafo, quindi alla fine lo convertirà nella cosiddetta glue interparola: una sorta di spazio flessibile che può allungarsi o restringersi.

* **(occhi rossi)** Qui, TeX ha osservato un carattere che ha un codice di categoria molto importante: 0 (carattere di escape).

Un carattere di escape—*qualsiasi* carattere con codice di categoria 0—dice a TeX di passare a una modalità di lettura speciale e di scandire con attenzione i caratteri successivi perché identificano il nome di un *comando*, non testo da comporre. Nella letteratura su TeX vedrai anche il termine “comando” indicato come *sequenza di controllo*. Dopo aver visto un carattere di escape, TeX controlla il codice di categoria del carattere che segue *immediatamente dopo*; questo perché TeX riconosce due tipi di comando:

* comandi multi-lettera chiamati *parole di controllo*: il carattere che segue immediatamente dopo il carattere di escape ha codice di categoria 11. Tutti i caratteri successivi che hanno codice di categoria 11 sono considerati parte del nome di un comando. TeX smetterà di cercare caratteri che fanno parte del nome di un comando quando rileva qualsiasi carattere che *non* non abbia codice di categoria 11—come un carattere di spazio con codice di categoria 10.
* comandi a una sola lettera chiamati *simboli di controllo*: il carattere che segue immediatamente dopo il carattere di escape *non* abbia codice di categoria 11.

Puoi pensare a un carattere di escape come a qualcosa che induce TeX a “uscire” dal suo solito comportamento di scansione e ad adottare un approccio diverso per i pochi caratteri successivi—questo è indicato dal riquadro tratteggiato rosso che mostra che TeX **Inizia a cercare un comando**.

### Grafico 3: Elaborazione del codice di categoria 11 (“lettere”)

Nella Parte 1 di questa serie abbiamo notato che ogni carattere che TeX legge dal suo input è descritto da due interi:

* codice di carattere: un intero che definisce la rappresentazione numerica di un carattere;
* codice di categoria: un valore da 0 a 15 che TeX assegna a ogni carattere che potrebbe apparire nel suo input.

TeX usa queste due informazioni nella fase successiva della sua elaborazione: la creazione di token di carattere.

Il Grafico 3 espande il Grafico 2 per mostrare cosa fa TeX con questi caratteri di input che hanno codice di categoria 11 (lettera): crea *token di carattere*—valori interi che TeX calcola usando una combinazione del codice di categoria e del codice di carattere di quel carattere.

**Nota**: In questo esempio stiamo parlando solo di caratteri con codice di categoria 11, ma devi sapere che TeX crea valori di token anche per caratteri di input che hanno altri codici di categoria—eccetto il codice di categoria 0, che non viene mai trasformato in un token: il carattere di escape agisce semplicemente come un “interruttore” per attivare un'elaborazione speciale.

![TeX che elabora caratteri con codice di categoria 11](/files/aa3d11da13976ca1ea52044c2b5cc9e28d928c9e)

Il Grafico 5, sotto, mostrerà cosa fa TeX quando vede un carattere con codice di categoria 0 (un carattere di escape).

#### Note per il Grafico 3: Elaborazione del codice di categoria 11 (“lettera”)

Qui ci concentreremo sull’ **green** attività: cosa accade quando TeX vede caratteri che hanno codice di categoria 11 (“lettera”). Dopo che TeX ha letto un carattere e ne ha determinato il codice di categoria (qui è 11), ciò che TeX fa dopo è *combinare* questa coppia di numeri in un singolo intero chiamato token di carattere: questi token (interi) vengono inoltrati alla fase successiva degli algoritmi/processi interni di composizione di TeX. Come detto, TeX creerà anche token di carattere per caratteri con altri codici di categoria (cioè non 11); qui stiamo usando il codice di categoria 11 solo come esempio.

Ogni token di carattere (un intero) lega in modo permanente un carattere di input con il codice di categoria assegnato a quel carattere **nel momento in cui è stato scansionato (letto) da TeX**: questo fatto è di cruciale importanza per comprendere il comportamento delle macro di TeX/LaTeX. Naturalmente, durante un’ulteriore elaborazione, TeX a volte dovrà scomporre un token di carattere per determinare quale coppia (codice di carattere, codice di categoria) sia stata usata per costruire quel token. Tuttavia, una volta che un carattere viene letto dal processo di input (scansione) di TeX, il valore del token di carattere calcolato da TeX fa sì che quel carattere sia *definitivamente* collegato al codice di categoria assegnatogli *al momento in cui è stato letto*.

**Calcolo dei token di carattere**

I motori TeX usano una formula semplice per calcolare un token di carattere, $$T$$, a partire da un carattere con codice di categoria $$C$$ e codice di carattere $$A$$:

$$T = \text{constant} \times C + A$$

I motori a 8 bit, come pdfTeX, usano:

$$T = 256\times C + A$$

I motori compatibili con Unicode, come XeTeX o LuaTeX, devono usare una formula diversa perché, con Unicode, i codici di carattere possono essere molto più grandi del massimo di 255 del vecchio mondo della codifica ASCII a 8 bit. XeTeX, per esempio, usa:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Ancora una volta, vale la pena notare che i caratteri con codice di categoria 0 non vengono convertiti in token di carattere: il codice di categoria 0 occupa un posto molto speciale nel filtraggio dell'input di TeX ed è usato unicamente come un “interruttore” per attivare TeX in una modalità speciale di scansione dei pochi caratteri successivi. Il Grafico 5 tratta questo aspetto.

### Grafico 4: Elaborazione del codice di categoria 10 (“spaziatore”)

Il modo in cui TeX gestisce i caratteri con codice di categoria 10 (“spaziatore”) dipende da ciò su cui TeX sta attualmente lavorando quando rileva un carattere di codice di categoria 10 all'interno dell'input. Nel nostro esempio, TeX sta eseguendo la normale elaborazione di un paragrafo e il carattere di spazio, con codice di categoria 10, verrà convertito in glue interparola.

![TeX che elabora caratteri con codice di categoria 10](/files/fdc2ee1c9d502cef7ef9292b6c7c99bbc59b2bee)

La gestione degli spazi da parte di TeX può sembrare piuttosto idiosincratica, ma una buona panoramica si trova nei capitoli 1 e 2 di [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) di Victor Eijkhout—puoi [scaricare una copia PDF gratuita](https://bitbucket.org/VictorEijkhout/tex-by-topic) dal suo sito web.

Per esempio, quando TeX vede un carattere con codice di categoria 10, ci sono momenti in cui TeX:

* salta (ignora) tutti questi—per esempio, quando TeX è in modalità verticale;
* converte più spaziatori in un singolo spaziatore—saltando gli spazi extra, ad esempio quando elabora un paragrafo;
* li assorbe—ad es. assorbendo un singolo spazio dopo il nome di un comando;

Nota anche che ci sono momenti in cui TeX può anche *generare* spazi—convertendo i caratteri di fine riga in uno spazio. Il comportamento/trattamento dei caratteri di spazio (qualsiasi carattere con codice di categoria 10) è una delle “idiosincrasie” di TeX: ci vuole tempo/pratica per acquisire familiarità (e confidenza) con questo aspetto di TeX.

### Grafico 5a: Elaborazione del codice di categoria 0 (un “carattere di escape”)

In questo grafico, TeX ha elaborato tutti i caratteri fino al `\` carattere, che ha un codice di categoria 0: il “carattere di escape”—useremo una successiva sequenza di grafici per mostrare come TeX elabora un carattere di escape e identifica il nome di un comando.

![TeX che elabora caratteri con codice di categoria 0](/files/f1eb2738dea261fdf2c57c4a1a952785b468af27)

### Grafico 5b: Alla ricerca del nome di un comando

In questo grafico esaminiamo la sezione del riquadro tratteggiato rosso (**Inizia a cercare un comando**) per vedere cosa fa TeX dopo aver visto un carattere di escape.

![TeX alla ricerca di un nome di comando](/files/8c623e782f2ee6297e79e011070bf5fd1375341a)

**Note per il Grafico 5b**

* Una volta riconosciuto, il carattere di escape ha svolto il suo compito: ha agito come un interruttore e non prende parte ad alcuna ulteriore elaborazione—in particolare, non viene **non** convertito in un token di carattere.
* Per comodità, ripeteremo alcuni dettagli già menzionati. Dopo aver visto un carattere di escape, TeX controlla il codice di categoria del carattere che segue *immediatamente dopo*; questo perché TeX riconosce due tipi di comando:
* * comandi multi-lettera chiamati *parole di controllo*: il carattere che segue immediatamente dopo il carattere di escape ha codice di categoria 11. Tutti i caratteri successivi che hanno codice di categoria 11 sono considerati parte del nome di un comando (*parola di controllo*). TeX smetterà di cercare caratteri che fanno parte del nome di un comando quando rileva qualsiasi carattere che *non* non abbia codice di categoria 11—come un carattere di spazio con codice di categoria 10.
  * comandi a una sola lettera chiamati *simboli di controllo*: il carattere che segue immediatamente dopo il carattere di escape *non* abbia codice di categoria 11.
* Nel nostro esempio, il primo carattere dopo il `\` è una `j` (codice di categoria 11) il che dice a TeX di cercare un comando che sia (potenzialmente) una sequenza multi-lettera di caratteri con codice di categoria 11.
* TeX continua a controllare se ci sono altri caratteri con codice di categoria 11. Non appena rileva un carattere con qualsiasi altro codice di categoria, come uno spazio con codice di categoria 10, TeX sa di aver raggiunto la fine del nome del comando. Giusto per sottolineare il punto: qui è stato un carattere di spazio (codice di categoria 10) a “terminare” il comando, ma avrebbe potuto essere qualsiasi carattere che **non** abbia codice di categoria 11.

## Parte 3

Nella Parte 3 proseguiamo dal Grafico 5b per completare questa parte della storia—come TeX identifica un comando—e passiamo a ciò che fa dopo. Diamo anche uno sguardo più approfondito ad alcuni aspetti interni dell’elaborazione di TeX—parti delle quali possono essere saltate alla prima lettura, a meno che non ti piacciano davvero i dettagli.

[Parte 1](/latex/it/altri-argomenti/19-how-tex-macros-actually-work-part-1.md) [Parte 2](/latex/it/altri-argomenti/20-how-tex-macros-actually-work-part-2.md) [Parte 3](/latex/it/altri-argomenti/21-how-tex-macros-actually-work-part-3.md) [Parte 4](/latex/it/altri-argomenti/22-how-tex-macros-actually-work-part-4.md) [Parte 5](/latex/it/altri-argomenti/23-how-tex-macros-actually-work-part-5.md) [Parte 6](/latex/it/altri-argomenti/24-how-tex-macros-actually-work-part-6.md)


---

# 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/altri-argomenti/20-how-tex-macros-actually-work-part-2.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.
