> 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Una nuova serie di articoli: token TeX e concetti correlati—ma perché (e come)?

Questo articolo introduttivo si propone di spiegare perché questa serie è stata scritta, che cosa spero di ottenere e di fornire informazioni di contesto sulle tecniche usate per esplorare i token TeX attraverso l’osservazione del funzionamento interno di un motore TeX. Questa pagina dell’articolo è inoltre pensata per contenere i collegamenti a tutti gli articoli della serie e verrà aggiornata per fornire quei collegamenti man mano che ogni nuovo articolo viene pubblicato.

### Collegamenti agli articoli

Ogni articolo conterrà una serie di collegamenti ad altri articoli di questa serie.

* [Che cos’è un “token TeX”?](/latex/it/articoli-approfonditi/53-what-is-a-tex-token.md)
* [Che cos’è un “elenco di token TeX”?](/latex/it/articoli-approfonditi/54-what-is-a-tex-token-list.md)

## Contesto di questa serie di articoli

La motivazione per scrivere questa serie di articoli è nata leggendo materiale su TeX che spiegava molte delle attività di TeX attraverso il concetto di “token”, insieme al “processo di tokenizzazione” di TeX, alle “liste di token” e a concetti correlati come “espansione delle macro” e “comandi espandibili”. Ogni volta che incontravo spiegazioni relative a TeX formulate in termini di “token TeX”, la stessa domanda continuava a venirmi in mente: che cosa, precisamente, *è* un token TeX? Dovevo scoprirlo.

La portata e il contenuto del primo articolo, [Che cos’è un “token TeX”?](/latex/it/articoli-approfonditi/53-what-is-a-tex-token.md), è, per sua stessa natura, piuttosto “vicino al metallo”, come direbbero i programmatori, e non c’è dubbio che i “token TeX” potrebbero essere classificati come un argomento piuttosto arcano di cui scrivere: quindi perché occuparsene? In definitiva, si adotta una visione — o, forse, un atto di fede — che anche altre persone possano essersi arrovellate sullo stesso tema e che ci sia spazio per uno o due articoli per colmare alcune lacune. Il mio obiettivo è fornire spiegazioni di contesto utili che possano integrare altro materiale che potreste star leggendo e, si spera, aiutare a comprendere meglio alcuni concetti chiave che emergono quando si impara TeX ed esplorano macro e programmazione.

Chiaramente, entro i limiti degli articoli di un blog possiamo solo sfiorare la superficie: semplicemente non è pratico tentare una spiegazione di tutti gli argomenti salienti o tuffarsi nelle acque più torbide. Necessariamente, tralascerò molti dettagli e camminerò sul sottile confine tra eccessiva semplificazione e spingere le analogie fino al punto di rottura.

«Scrivi gli articoli che vorresti aver letto» è una guida utile e una che ho cercato con impegno di applicare mentre scrivevo questa serie.

## Posta la domanda, che si fa adesso?

La sfida immediata era chiara: come si fa a scoprire i token TeX, dato che tali dettagli (dei token, della tokenizzazione, ecc.) sono sepolti in profondità nel codice software dei motori TeX — in realtà non dovresti preoccupartene, a meno che, naturalmente, tu non sia davvero interessato a quei dettagli.

Un modo per esplorare queste domande è cercare di leggere il codice sorgente originale di TeX in [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—eseguendo [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) per estrarre la documentazione di TeX—oppure comprando una copia del libro [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Ho comprato una copia del libro stampato! È certamente estremamente utile avere il codice sorgente di TeX pubblicato in forma di libro e ci sono, naturalmente, molte spiegazioni utili in tutto il volume. Tuttavia, il TeX di Knuth è scritto in Pascal e, naturalmente, il codice sorgente in Pascal è documentato usando la metodologia di programmazione letterata di Knuth — presentando il codice in piccoli frammenti facilmente digeribili. È facile apprezzare come l’approccio di Knuth alla documentazione aiuti davvero per un software complesso come TeX, ma leggere il libro comporta parecchi rimandi incrociati e salti avanti e indietro tra le pagine.

Sebbene utile, il libro da solo non era del tutto sufficiente (per me) per comprendere meglio ciò che accade quando TeX crea dei “token” — l’argomento che mi interessava particolarmente. C’è un solo modo per scoprirlo davvero: compilare il programma TeX, eseguirlo su un piccolo file TeX e osservare letteralmente il codice mentre viene eseguito, mentre TeX analizza e legge l’input. I dettagli della compilazione di TeX dai sorgenti sono piuttosto arcani — convertire da Pascal a C — ma nella sezione successiva c’è una breve descrizione insieme a un collegamento a un post personale del blog che entra più nel dettaglio.

A differenza di XeTeX e LuaTeX — che possono elaborare testo in formato UTF-8 e supportano la codifica Unicode — il TeX di Knuth è un motore a 8 bit, il che significa che presume che i caratteri di input siano nell’intervallo da 0 a 255. Sebbene questa sia una distinzione importante, non *materialmente* influisce sulla nostra discussione dei token TeX, perché trattiamo argomenti e principi comuni a tutti i motori TeX: essi sono il cuore stesso del software.

## Come si possono studiare i token TeX?

Districare il percorso dal testo di input ai token TeX è stata, per me, una vera odissea — devo confessare che gradi variabili di confusione sono stati compagni quasi permanenti lungo il cammino: TeX è un software così complesso.

Per alcuni anni (dal 2009 circa) compilo abitualmente l’ultima versione di LuaTeX dai suoi sorgenti — un processo piuttosto semplice grazie al modo assolutamente eccellente in cui il codice sorgente di LuaTeX viene distribuito. Sulla base di quell’esperienza mi sono interessato a capire meglio come compilare il TeX originale di Knuth dai suoi sorgenti — una *molto* diversa proposta, perché TeX è scritto usando la metodologia di programmazione letterata di Knuth. Quella compilazione personale di TeX, su Windows ma usando compilatori e toolset open source, è stata intrapresa al di fuori della distribuzione TeX Live ed è un progetto a sé stante. Ha inoltre richiesto la compilazione della toolchain necessaria per convertire `tex.web` in un programma C che potesse essere compilato e poi eseguito in un debugger per vedere che cosa TeX fa davvero mentre elabora i caratteri dell’input.

Si è usato il TeX originale di Knuth anziché pdfTeX, XeTeX o LuaTeX perché avevo bisogno di una versione di TeX il più possibile vicina al codice sorgente stampato nel libro TeX: The Program. Quel libro fu pubblicato per la prima volta nel 1986 e, sebbene TeX abbia subito alcuni aggiornamenti da allora, l’ultima versione di TeX (3.14159265, rilasciata nel gennaio 2014) è certamente sufficientemente vicina al codice sorgente contenuto nel libro.

In linea con la metodologia di programmazione letterata di Knuth, il codice sorgente di TeX è distribuito in un formato di testo chiamato WEB: un misto di documentazione TeX e codice sorgente Pascal. L’idea di base è che si usino due utilità chiamate TANGLE e WEAVE, che elaborano i file WEB per estrarre la documentazione TeX oppure il codice sorgente Pascal:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) estrae il codice sorgente Pascal da un file WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) estrae la documentazione TeX dal file WEB

Tuttavia, prima di estrarre il codice sorgente Pascal, devi pre-elaborare il `tex.web` file di Knuth per applicare una serie di modifiche che consentono di convertire il codice Pascal di TeX in codice C usando un processo chiamato Web2C. Questo passaggio di pre-elaborazione viene definito *applicazione di change file*.

Il file di codice originale di Knuth (tex.web) non deve essere direttamente modificato in alcun modo; invece, si applicano le modifiche usando i cosiddetti change file (estensione `.ch`) che contengono le modifiche che si desidera applicare al file principale `.web` —come `tex.web`. I change file vengono uniti al codice sorgente originale di Knuth — utilizzando un ulteriore programma di utilità chiamato TIE — per creare un file chiamato, ad esempio, `mytex.web` che si elabora con TANGLE per estrarre il codice Pascal in `mytex.pas`. Una volta ottenuto un file sorgente Pascal appropriato, puoi applicare i passaggi finali del processo Web2C per convertirlo in un file di codice sorgente C che puoi compilare in un programma TeX eseguibile. Se vuoi leggere il processo di conversione Web2C, piuttosto convoluto, ci sono ulteriori dettagli sul [blog personale di questo autore](http://www.readytext.co.uk/?p=2529).

Il risultato finale è un programma TeX che può essere eseguito usando il gratuito ed eccellente [Eclipse IDE per C/C++](http://www.eclipse.org/home/index.php) per eseguire passo per passo il codice sorgente di TeX (in C) e vedere che cosa accade mentre scansiona il tuo input. Di certo non è il passatempo più divertente perché il codice C è generato automaticamente e, in alcuni punti, estremamente difficile da seguire (il codice sorgente di TeX fa un uso molto generoso di GOTO e variabili globali). Il libro TeX: The Program resta comunque preziosissimo per orientarsi nel codice sorgente C, anche se il libro contiene il codice sorgente di TeX in un codice Pascal splendidamente impaginato.

Per concludere la discussione, ecco una schermata di esempio che mostra TeX in esecuzione tramite l’IDE Eclipse con l’esecuzione in pausa sulla funzione `getnext()`—che è al cuore dei processi di generazione dei token di TeX.

![Schermata che mostra TeX eseguito tramite l’IDE Eclipse](/files/5323f366971526da6a7348c92be136e0ab83bd63)

Esecuzione passo per passo del codice sorgente C di TeX usando l’IDE open source Eclipse per C/C++.

## Conclusioni e un ringraziamento

Scrivere il primo articolo e mettere insieme le idee per futuri post del blog nella serie ha certamente richiesto molto tempo. Sono estremamente grato a John Hammersley e Mary Anne Baynes di Overleaf per il loro supporto a questa idea di serie e per avermi permesso di dedicare il tempo necessario a ulteriori ricerche di contesto. Mi auguro che questa serie di articoli individui e affronti con successo argomenti di interesse comune e si dimostri utile per chi li legge.


---

# 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
