> 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/articoli-approfonditi/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md).

# Come funziona \expandafter: TeX usa liste temporanee di token

[Parte 1](/latex/it/articoli-approfonditi/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Parte 2](/latex/it/articoli-approfonditi/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Parte 3](/latex/it/articoli-approfonditi/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Parte 4](/latex/it/articoli-approfonditi/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Parte 5](/latex/it/articoli-approfonditi/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Parte 6](/latex/it/articoli-approfonditi/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Espansione e liste di token interne

Finora abbiamo esplorato i token, le liste di token e i principi fondamentali alla base del concetto di espansione di TeX. In questa sezione useremo il primitivo TeX `\jobname` per introdurre un aspetto importante dell'elaborazione dell'espansione: l'uso da parte di TeX di *liste temporanee di token*—che sono un *fondamentale* aspetto di come `\\expandafter` funziona, come vedremo più avanti in questa serie di articoli.

`\jobname` è un primitivo espandibile di TeX la cui espansione genera una serie di token di carattere che rappresentano il nome dell'input principale `.tex` file. Ad esempio, supponiamo di avere il seguente testo come parte di un `.tex` file chiamato `mycode.tex`:

```
    Il nome del mio file è \jobname .tex %Nota lo spazio dopo \jobname
```

Questo produrrebbe in composizione

```
    Il nome del mio file è mycode.tex
```

Quando usiamo il `\jobname` comando i caratteri composti risultanti non vengono letti dal tuo file fisico `.tex` file, quindi da dove provengono: dove TeX memorizza/legge quei token? Invisibile all'utente (cioè, in profondità dentro TeX stesso) il processo di espansione per `\jobname` crea una lista temporanea di token costruita dalla serie di token di carattere che rappresentano il nome del tuo file. Una volta `\jobname` che ha creato quella lista di token, TeX “sposta temporaneamente lo sguardo” dalla sua sorgente di input corrente (qui, il nostro `.tex` file) per leggere token (token di carattere) da quella lista temporanea di token. Quando TeX ha bisogno di un altro token di input, leggerà il token successivo da quella lista interna e continuerà così fino a raggiungere la fine della lista; a quel punto TeX riprende a leggere i token dalla sua sorgente di input precedente che, qui, sarebbe il testo letto dal nostro `.tex` file di input.

Come mostrato nel diagramma seguente, TeX riprende a leggere il `.tex` file di input nel punto esatto in cui si era fermato dopo aver elaborato `\jobname`—dopo aver letto il carattere di spazio ma prima di leggere il carattere “.”. Il punto (.) è, in pratica, in attesa di essere letto dal buffer di input di TeX—una piccola area della memoria di TeX progettata per contenere una riga `.tex` file—TeX legge e elabora il tuo `.tex` file una riga alla volta, non legge l'intero file in memoria.

Quando studi il grafico seguente, leggi dal basso e procedi verso l'alto per seguire il flusso del processo.

![Come TeX espande \jobname](/files/2f8d1cdf18c31490595b581aedd4fee65b3bab8d)

Riprendendo la nostra discussione sull'espansione, possiamo osservare che l'espansione di `\jobname` ha portato al `\jobname` comando (token) che viene *rimosso* dall'input e *sostituito* con token derivanti dall'espansione: la lista temporanea di token generata per contenere il nome del `.tex` file.

I comandi espandibili (come `\jobname`) non sono gli unici primitivi di TeX che “segretamente” creano e usano liste di token per ottenere il loro effetto. Ad esempio, i comandi `\uppercase` e `\lowercase` creano entrambi liste di token interne per cambiare il maiuscolo/minuscolo del loro argomento. Una volta completato il lavoro di cambio di maiuscole/minuscole, TeX passa a leggere token di carattere dalle liste di token generate da quei comandi. Le liste di token sono l'unico meccanismo di “archiviazione dei dati dei token” di TeX—a parte la scrittura dei dati su un file fisico su disco.

### Sorgenti dei token: TeX è un maestro nel giocolare

Quando TeX elabora un documento tipico deve gestire *molte* sorgenti di token: input proveniente da numerosi file fisici su disco e innumerevoli liste interne di token create durante l'elaborazione. In questa sezione esploreremo molto brevemente come TeX riesca a “giocolare” con quelle sorgenti di input.

Supponiamo di volere una macro semplice che componga il nome del nostro `.tex` file personalizzato:

```
    \def\myfile{The name of my file is \jobname .tex}
```

Più tardi, a un certo punto nel nostro `.tex` file chiamiamo la macro `\myfile`: temporaneamente, TeX passa dalla creazione/lettura di token tramite testo nel tuo testo (`.tex`) file alla lettura di token dalla `\myfile` definizione (lista di token) memorizzata nella sua memoria. Quando TeX esegue la `\myfile` macro (elaborando i suoi token) rileverà un token che rappresenta il `\jobname` comando, la cui espansione crea un'altra lista temporanea di token da cui TeX deve leggere i token. Anche in questo semplice scenario TeX deve gestire tre sorgenti di input:

1. le `.tex` file di testo contenente la `\myfile` macro;
2. la lista di token che memorizza la definizione di `\myfile` macro;
3. una lista di token creata dal `\jobname` comando all'interno della `\myfile` macro.

Mentre TeX elabora un documento, passa costantemente da una sorgente di input all'altra: file fisici e liste di token, quindi come fa TeX a tenere traccia di tutto questo? La risposta è che, internamente, i motori TeX mantengono un cosiddetto [stack di input](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) che funge da sorta di “memoria” e permette a TeX di ricordare cosa stava facendo (da dove stava leggendo) mentre passa da una sorgente di input all'altra.

Senza entrare troppo nei dettagli, il codice interno nei motori TeX usa una variabile globale chiamata `curinput` (input corrente) che, tra le altre cose, indica a TeX se al momento sta leggendo da un file fisico o da una lista di token. `curinput` indirizza anche TeX alla posizione (nella lista di token corrente o nel suo buffer di testo) da cui deve ottenere il token successivo. Se TeX sta leggendo da una lista di token `curinput` registra anche quale tipo di lista di token è in elaborazione—ad esempio, la lista di token memorizzata come macro oppure se quei token provengono da una fonte diversa.

Quando necessario, la `curinput` variabile verrà modificata per puntare a una nuova sorgente di input e l'attuale “stato di input” di TeX (sorgente e posizione) verrà salvato nello stack di input in modo che TeX possa in seguito tornare esattamente a quella posizione (posizione in un `.tex` file o al token successivo in una lista di token). Una volta esaurita quella nuova sorgente di input (ad esempio, non ci sono più token nella lista di token o si raggiunge la fine di un file) viene rimossa dallo stack e `curinput` viene aggiornato per garantire che TeX torni a ottenere token dalla sorgente precedente.

## Approfondimento (lettura facoltativa)

Le sezioni seguenti forniscono ulteriori informazioni di contesto per i lettori che apprezzano i dettagli.

### Liste di token reali

Il grafico seguente è stato generato usando la build personalizzata di Overleaf del TeX di Knuth, che fornisce accesso ai dati interni e alle strutture dati di TeX. Questa illustrazione di una lista di token si basa sulla versione semplificata presentata sopra e include dati aggiuntivi, come la visualizzazione dei caratteri generati da `\jobname` hanno codice di categoria 12, non il solito codice di categoria 11. In questo diagramma “node” è semplicemente il nome dato a un'unità di memorizzazione in memoria usata da TeX.

![All'interno di una lista di token di TeX](/files/267ee37ea61a701e421dcd5fca9564525cb1c7ef)

### Come TeX legge ed elabora \jobname

Inoltre, per completezza, ecco una panoramica dei “processi mentali” di TeX mentre rileva `\jobname` nel nostro input `.tex` file. In questo grafico vediamo come TeX rileva un carattere di escape (`\` con codice di categoria 0), elabora la sequenza di caratteri `jobname`, genera un token e cerca il significato del `\jobname` comando, dove TeX scoprirà che ha un codice di comando > 100, indicando che è un comando espandibile.

![Come TeX esegue la scansione e l'elaborazione di \jobname](/files/34cc0939365a79d67e08ffe0c18f5d8d50fd23ee)

[Parte 1](/latex/it/articoli-approfonditi/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Parte 2](/latex/it/articoli-approfonditi/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Parte 3](/latex/it/articoli-approfonditi/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Parte 4](/latex/it/articoli-approfonditi/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Parte 5](/latex/it/articoli-approfonditi/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Parte 6](/latex/it/articoli-approfonditi/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.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/articoli-approfonditi/21-how-does-expandafter-work-tex-uses-temporary-token-lists.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.
