> 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/36-pandora-s-hbox-using-luatex-to-lift-the-lid-of-tex-boxes.md).

# Il \hbox di Pandora: usare LuaTeX per sollevare il coperchio delle casse di TeX

## Introduzione

Le box e la colla sono due concetti chiave che forniscono le fondamenta del modello e delle capacità di composizione tipografica di TeX. Partendo dal materiale introduttivo di un post precedente, [Box e colla: una breve, ma visiva, introduzione all'uso di LuaTeX](/latex/it/articoli-approfonditi/11-boxes-and-glue-a-brief-but-visual-introduction-using-luatex.md), questo articolo ampiamente illustrato esamina più in dettaglio le box e la colla. Presentiamo inoltre un nuovo progetto Overleaf basato su LuaTeX [progetto Overleaf](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) che ti consente di esplorare la profonda struttura interna delle box di TeX, fornendo spunti che ti aiuteranno a comprendere davvero il loro comportamento. La creazione del progetto Overleaf è stata grandemente facilitata dal lavoro di Patrick Gundlach, perciò gli esprimiamo [la nostra gratitudine](#credits-thanks-patrick).

## Perché scegliere LuaTeX?

Innanzitutto, vale la pena ribadire la differenza tra LuaTeX e LuaLaTeX:

* LuaTeX è il nome di un motore di composizione tipografica basato su TeX ed eseguibile;
* LuaLaTeX si riferisce all'uso del pacchetto macro LaTeX con il motore LuaTeX.

Questa distinzione è estremamente importante perché, in questo articolo, stiamo sfruttando le capacità integrate del motore LuaTeX stesso, e non ci limitiamo semplicemente a utilizzare le funzionalità/operazioni dei comandi forniti dal pacchetto macro LaTeX.

I lettori che non sono sicuri della differenza tra un motore TeX e il pacchetto macro LaTeX potrebbero voler leggere uno dei nostri articoli pubblicati in precedenza, [Cosa c'è in un nome: una guida alle molte varianti di TeX](/latex/it/articoli-approfonditi/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md), che spiega quelle differenze con un certo dettaglio. Lo stesso articolo discute anche “TeX” come linguaggio di programmazione e il fatto che i motori di composizione tipografica basati su TeX (ad es. pdfTeX, XeTeX e LuaTeX) non solo differiscono nelle loro caratteristiche e funzionalità, ma presentano anche variazioni nel “sapore” del linguaggio TeX che supportano. Questo ci porta alla nostra scelta di LuaTeX. Oltre a supportare un linguaggio di programmazione basato su TeX, LuaTeX ha anche il linguaggio di scripting Lua incorporato al suo interno—offrendo l'accesso a un linguaggio di programmazione convenzionale semplice, ma molto potente. Tramite Lua, e le funzionalità integrate di LuaTeX, puoi esplorare e controllare le attività di composizione di LuaTeX in modi che nessun altro motore TeX offre—e questo include la possibilità di esaminare le strutture interne delle box di TeX; pertanto LuaTeX è la scelta ideale (l'unica) per questo articolo e per il progetto Overleaf allegato.

### pdfTeX/XeTeX contro LuaTeX: in immagini

I seguenti *schemi* intendono evidenziare un importante confronto tra la progettazione di pdfTeX/XeTeX e LuaTeX. Sia pdfTeX sia XeTeX consentono, naturalmente, agli utenti di scrivere codice TeX che può influenzare il comportamento della composizione tipografica; tuttavia, le strutture interne più profonde contenute in quei motori TeX, e i dati di basso livello costruiti durante il processo di composizione, sono per lo più inaccessibili ai comandi e alle macro dell'utente. In questo senso, sono *relativamente* sistemi chiusi rispetto a LuaTeX.

#### pdfTeX/XeTeX

![{{{alt}}}](/files/87f422a871f2826afccfc18c8727f4235deec9f3)

#### LuaTeX

LuaTeX introduce un nuovo comando primitivo chiamato `\directlua{...}` attraverso il quale puoi scrivere codice che non solo offre pieno accesso al linguaggio Lua, ma consente anche di estendere le capacità di LuaTeX scrivendo plug-in usando linguaggi come C e C++. Su Windows, questi plugin sono chiamati *Dynamic Link Libraries* (.DLL); su Linux sono note come *Shared Object Libraries* (.so). Tuttavia, la vera potenza di LuaTeX deriva da un enorme insieme di funzioni Lua integrate che forniscono accesso ai meccanismi interni di LuaTeX—consentendo un controllo e una programmazione estremamente sofisticati della composizione tipografica basata su TeX. Un insieme di tali funzioni è noto come API (Application Programming Interface) ed è tramite l'API di LuaTeX che si usano programmi Lua per comunicare con il suo motore di composizione basato su TeX e con le sue strutture dati.

![{{{alt}}}](/files/1e7ef50e8ee50144fab8713ddb5f82e2862d3a25)

Con il `\directlua{...}` comando puoi, per esempio, accedere a strutture dati interne di basso livello di TeX nascoste alla vista all'interno di altri motori TeX. Inoltre, puoi usare script Lua per eseguire ogni sorta di calcolo programmatico, manipolazione di stringhe ecc. e rimandare i risultati a TeX: le possibilità sono quasi infinite. Tuttavia, questo articolo non intende essere un'esposizione dettagliata o un tutorial su LuaTeX—anche se è allettante fornire esempi che trasmettano l'incredibile versatilità di questo sorprendente e potentissimo motore TeX.

## Box e colla: un breve promemoria

Come introdotto nell'articolo [Box e colla: una breve, ma visiva, introduzione all'uso di LuaTeX](https://www.overleaf.com/blog/511-boxes-and-glue-a-brief-but-visual-introduction-using-luatex) box e colla sono due concetti chiave che sostengono le capacità di composizione tipografica di TeX. Il diagramma seguente è offerto come un brevissimo promemoria sul comportamento dei tipi di box orizzontali e verticali di TeX. Nota: le box orizzontali possono, naturalmente, contenere testo composto in lingue da destra a sinistra, come l'arabo o l'ebraico, il che significa che la direzione di crescita della box può essere opposta a quella mostrata per la box orizzontale nel diagramma seguente.

![{{{alt}}}](/files/d57bc212f151390d92e7e0b69cc9ae8164e05749)

### Primitivi TeX per la costruzione di box

Oggi, la maggior parte delle persone prepara i propri documenti TeX utilizzando il pacchetto macro LaTeX, progettato per fornire comandi che proteggono gli utenti da gran parte del linguaggio di basso livello di TeX—i suoi cosiddetti *primitivi*—i comandi fondamentali incorporati nei motori TeX (vedi l'articolo [Cosa c'è in un nome: una guida alle molte varianti di TeX](/latex/it/articoli-approfonditi/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) per una discussione sui primitivi di TeX). La raccolta di macro LaTeX fornisce una varietà di macro per la creazione e l'archiviazione (salvataggio) delle box, ma se rimuovi tutto il codice macro scoprirai che esistono solo 4 comandi primitivi di basso livello per la costruzione delle box:

Per creare liste orizzontali:

* \hbox{...}

Per creare e impilare liste verticali:

* \vbox{...}
* \vtop{...}
* \vcenter{...}

Non spiegheremo come usare tutti questi comandi per le box perché altrove sul web o nei libri di TeX/LaTeX si trovano molti esempi e tutorial—ma daremo un'occhiata al modo in cui le box sono rappresentate e memorizzate all'interno delle strutture dati di TeX.

### Colla: spaziatura flessibile

La colla è, di fatto, una forma di spaziatura usata da TeX per distanziare/posizionare elementi orizzontalmente o verticalmente. Come utenti di TeX, possiamo indicare a TeX di inserire una certa colla di dimensione fissa oppure possiamo usare una colla flessibile—con tutta la flessibilità di cui abbiamo bisogno, sia per allungarsi sia per restringersi in base alle nostre esigenze. Uno dei comandi di TeX per creare colla per la spaziatura orizzontale si chiama `\hskip` che ha la forma

`**\hskip** <larghezza naturale> **plus** <quantità da allungare> **minus** <quantità da restringere>`

`**plus**` e `**minus**` sono parole chiave di TeX, ma non è necessario usarle per ogni colla. Se `**plus**` o `**minus**` sono assenti, allora il corrispondente `<quantità da allungare>` o `<quantità da restringere>` si presume sia zero. Per esempio, `\hskip 3pt` inserisce una colla di larghezza fissa senza componente di allungamento o restringimento.

Per ora, pensa a `<quantità da allungare>` e `<quantità da restringere>` come alle nostre *raccomandazioni* a TeX, perché la quantità esatta di allungamento o restringimento sarà calcolata da TeX.

Per aiutare con queste idee, ecco un diagramma che rappresenta la colla come una molla. Il `<larghezza naturale>` è la lunghezza della molla quando non c'è tensione (allungamento) o compressione (restringimento). Il `<quantità da allungare>` e `<quantità da restringere>` è mostrato in relazione alla lunghezza naturale della molla.

![{{{alt}}}](/files/0426e0c845c1fe66de30552b56f6eb658c1b0c20)

#### Un esempio di \hbox

Supponiamo di voler creare un `\hbox{...}` contenente solo le lettere A, B, C e D e che questa box debba essere larga 100pt (100 punti TeX). Inoltre, possiamo supporre con sicurezza che la larghezza totale di questi quattro caratteri sia molto inferiore a 100pt, il che indica che TeX ha bisogno di qualche modo per riempire lo spazio rimanente all'interno della box: useremo della colla per farlo. Tuttavia, poiché non conosciamo la quantità esatta di colla necessaria per riempire la box, è consigliabile aggiungere alcune colle flessibili e lasciare a TeX il compito di calcolare la quantità di spazio che tali colle devono occupare. Nel seguente frammento di codice, nota l'uso di “%” per sopprimere gli spazi tra le parole derivanti dai caratteri di fine riga.

```
\hbox to100pt{%
A\hskip4pt plus3pt minus 2pt B%
\hskip 0pt plus 2fil C%
\hskip 0pt plus 2fill D%
\hskip 0pt plus 3fill}
```

La box risultante appare così (ingrandita per chiarezza):

![{{{alt}}}](/files/014cbd389bb09b3c60253a767708898bc3187782)

Questo `\hbox` è sovrapposta con box tratteggiate (in rosso) per indicare la larghezza dei caratteri (come TeX li vede). Ai fini della composizione tipografica, i caratteri sono considerati piccole box e la quantità di colla necessaria per riempire questa `\hbox`è determinata (calcolata) tenendo conto delle larghezze di ciascun carattere.

Si scopre che TeX non ha allungato né ristretto la colla tra A e B (impostata a 4pt) e non c'è colla tra B e C (impostata a 0pt). Tuttavia, la colla tra C e D e la colla tra D e la fine della box si sono entrambe allungate considerevolmente perché quelle colle hanno la componente di allungamento più flessibile—in pratica, quelle colle hanno assorbito tutto l'allungamento necessario a riempire la box.

## Tornando a LuaTeX

Finora abbiamo esplorato box e colla e visto che LuaTeX consente l'accesso a strutture interne di TeX nascoste alla vista in pdfTeX e XeTeX. È tempo di un esempio per rendere tutto ciò più esplicito, ma innanzitutto dobbiamo familiarizzare brevemente con il modo in cui TeX memorizza le box nella sua memoria—partiremo da un'analogia.

### Come TeX memorizza le box nella memoria: un'analogia

Supponi, per qualche motivo, di dover creare un modello di dati che descriva una box fisica. Quali dati potresti scegliere per fornire una tale descrizione? Un approccio che potresti adottare è dividere le informazioni in due parti: dati sulla box fisica stessa e dati che forniscono un elenco del contenuto della box. Quindi, il nostro semplice modello potrebbe apparire così:

1. Dati sulla box fisica (“metadati”):

* width
* altezza
* profondità
* peso
* colore
* tipo (legno, plastica, cartone)

3. Dati sul contenuto della box: una qualche forma di elenco che descrive gli elementi contenuti—probabilmente elencati senza un ordine particolare.

E c'è un'analogia molto stretta con il modo in cui TeX memorizza le box.

### Come TeX memorizza le box nella memoria: hlists e vlists

Internamente, TeX crea “contenitori” chiamati *hlists* (liste orizzontali) e *vlists* (liste verticali), che rappresentano rispettivamente hbox e vbox. Questi oggetti hlist/vlist forniscono una raccolta di “metadati” sulla box, oltre a fornire accesso all'elenco degli oggetti che la box contiene effettivamente—quell'elenco si chiama *lista di nodi*. A differenza di una box fisica, in cui puoi collocare oggetti al suo interno in qualsiasi ordine, per TeX l'ordine del contenuto della box è estremamente importante—si tratta di elementi da comporre tipograficamente. Se hai una qualche esperienza di programmazione o informatica non sarai sorpreso di sapere che gli oggetti all'interno di una box di TeX vengono memorizzati, e il loro ordine di creazione viene preservato, usando una cosiddetta [lista doppiamente concatenata](https://en.wikipedia.org/wiki/Doubly_linked_list). Non discuteremo oltre le liste concatenate perché il web abbonda di tutorial, esempi e spiegazioni.

Il concetto di nodi e liste di nodi è un aspetto fondamentale del funzionamento di TeX, ma ai fini di questo articolo ne daremo solo una breve panoramica. I nodi sono, in sostanza, una sorta di “mini contenitore” e (a partire da LuaTeX 1.04) esistono circa 50 tipi diversi di nodo: rispecchiano i tipi di dati interni e i componenti che LuaTeX usa per la composizione tipografica. Per esempio, esistono nodi per rappresentare: glifi (derivanti dai “caratteri”), colla, regole orizzontali/verticali, penalità, “whatsit”, kern e così via. Tutto il materiale composto alla fine diventerà parte di una enorme lista di nodi e LuaTeX ti offre accesso diretto a tali strutture dati interne. LuaTeX ti consente anche di aggiungere, modificare, correggere o creare liste di nodi così che, per esempio, puoi creare box direttamente all'interno del codice Lua senza dover usare affatto codice TeX. Tuttavia, scrivere di questo è cosa per un'altra occasione.

### Un semplice esempio di \directlua{...} in azione

Il seguente esempio crea un `\hbox` e lo salva nel registro box 0. Quindi riportiamo la larghezza della box usando il codice TeX tradizionale e otteniamo la stessa informazione usando un secondo metodo tramite `\directlua{}`. Qui eseguiamo un piccolo script Lua che accede all'area di memorizzazione interna delle box di TeX per ottenere la larghezza della box—naturalmente, i due valori sono identici: 2412092sp (sp=scaled point: 65536sp = 1 punto TeX). In definitiva, in questo esempio estremamente semplice, il codice TeX e il codice Lua esaminano entrambi le stesse strutture dati interne per ottenere la larghezza della box, ma è tramite l'accesso diretto che LuaTeX apre la porta a una ricchezza di informazioni e di controllo non disponibile con altri motori.

![{{{alt}}}](/files/82ab5f97b89b8301ae31ada9fe33b0f77831581d)

```latex
\documentclass{article}
\begin{document}
\setbox0=\hbox{A\hskip 5pt B\hskip 10pt C}
\fontsize{18}{22}\selectfont
\noindent Usando il codice \TeX{}, la box 0 ha larghezza \number\wd0\relax \space sp\par
\noindent Possiamo anche usare Lua e chiamare una delle funzioni di Lua\TeX per ottenere le stesse
informazioni.\vskip10mm
\noindent Dal codice Lua, la box 0 ha larghezza
\directlua{
local boxwidth = tex.box[0].width
tex.print(boxwidth.." sp")
} che, naturalmente, è identico al valore ottenuto dal codice \TeX{}.
\end{document}
```

## Mettere tutto insieme: un progetto Overleaf

Abbiamo notato che, internamente, TeX rappresenta le box come “contenitori” chiamati hlists/vlists che memorizzano “metadati” sulla box e forniscono accesso all'elenco dei componenti da cui la box è costruita. Usando LuaTeX puoi accedere ai “metadati” della box e all'elenco degli elementi contenuti in una box di TeX: glifi, colla, penalità, altre box e così via. Utilizzando script Lua, è possibile esaminare una box presente nella memoria di TeX e disegnare una rappresentazione dettagliata di ciò che essa contiene. Una rappresentazione adeguata di una box di TeX e del suo contenuto si ottiene usando *grafi dei nodi* e abbiamo preparato un [progetto Overleaf](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) che fa questo sfruttando un eccellente script Lua scritto da Patrick Gundlach (vedi i crediti). Non descriveremo i processi dettagliati necessari per esaminare le box e generare grafi dei nodi—se non per notare che qualsiasi programma/script che elabora box di TeX deve essere *ricorsivo* perché le box possono essere annidate: cioè, puoi avere hbox all'interno di vbox, all'interno di hbox… combinando tutti i tipi di box a un livello di annidamento molto profondo.

![{{{alt}}}](/files/fbfa2bee24f29a32a545cdabf8b2d6b3e44fedde)

### Cosa fornisce il progetto?

Implementa solo 1 comando chiamato `\dobox{box command}`, per esempio:

```latex
\dobox{\hbox to100pt{%
A\hskip4pt plus3pt minus 2pt
B\hskip 0pt plus 2fil
C\hskip 0pt plus 2fill
D\hskip 0pt plus 3fill}}
```

La `\dobox{...}` comando esegue una serie di operazioni:

1. all'interno del tuo documento compone il codice TeX verbatim della tua box;
2. genera una grafica SVG della box di TeX—puoi incorporarla in una pagina web (come abbiamo fatto in questo post del blog);
3. genera una grafica SVG della lista di nodi—che puoi anche incorporare in pagine web (come abbiamo fatto in questo post del blog);
4. produce un grafico PDF della lista di nodi che viene poi importato nel documento PDF principale prodotto dal progetto.

I grafi dei nodi possono diventare molto rapidamente estremamente grandi a causa dell'enorme quantità di dati che LuaTeX deve memorizzare per rappresentare box TeX complesse—come la pagina attualmente in costruzione o la matematica composta. Per liste di nodi più grandi, il grafico PDF importato potrebbe essere ritagliato dal confine della pagina del tuo documento—se vuoi visualizzare un grande grafo dei nodi puoi scaricare un file ZIP del progetto ed estrarre il grafico PDF di interesse. Quando scarichi il file ZIP del progetto assicurati di scegliere “Input and Output Files” dall'elenco a discesa:

![{{{alt}}}](/files/bfef983ea072b94b910fb560de9622f6b61b6c2b)

### Grafica dal progetto Overleaf: una breve descrizione

Prima di mostrare alcuni esempi, vale la pena fare alcune osservazioni sulla grafica prodotta dal progetto Overleaf—useremo lo stesso `\hbox` esempio menzionato in precedenza nell'articolo. Eccolo racchiuso nel `\dobox{...}` comando:

```latex
\dobox{\hbox to100pt{%
A\hskip4pt plus3pt minus 2pt
B\hskip 0pt plus 2fil
C\hskip 0pt plus 2fill
D\hskip 0pt plus 3fill}}
```

Ecco il `\hbox` prodotto da TeX—per chiarezza, la box è stata ingrandita ma il bordo è incluso nella grafica prodotta dal progetto Overleaf.

![{{{alt}}}](/files/40e03e3b226b4ccb84b5f1d90f376761429288d6)

Ecco un diagramma SVG *annotato* della lista di nodi che rappresenta la box sopra—sono state aggiunte annotazioni per evidenziare i “metadati” della box e l'elenco degli oggetti che contiene: tali annotazioni non sono presenti nella grafica prodotta dal progetto Overleaf.

[![{{{alt}}}](/files/30ad6d9a552169e921f5c5a440f7b2ae81025263)](https://www.filepicker.io/api/file/ZSwIylUR66eFYPMo0suX)

Se guardi la sezione dei “metadati” potresti osservare alcuni parametri non familiari:

* `glue_set`
* `glue_sign`
* `glue_order`

Questi parametri sono le impostazioni usate da TeX per calcolare di quanto la colla deve allungarsi o restringersi all'interno di questa box e sono solo un esempio di dati che puoi ottenere facilmente tramite LuaTeX ma non con altri motori TeX. Nota che i nodi di colla contenuti nei componenti della box *mantengono* i valori originali della colla che abbiamo digitato per creare la box. Questo è essenziale perché TeX fornisce i comandi `\unhbox`, `\unvbox`, `\unhcopy`, `\unvcopy` che “disboxano” il contenuto della box e lo rilasciano nuovamente nel flusso di input per partecipare ancora una volta alle operazioni di composizione tipografica. È solo quando TeX finalmente esporta (ship out) la box in un file PDF o DVI che `glue_set`, `glue_sign` e `glue_order` vengono applicati a tutte le colle presenti nella box—per calcolare la quantità effettiva di allungamento o restringimento necessaria per posizionare i componenti all'interno della box e poi generare dati PDF o opcode DVI appropriati.

Un altro parametro elencato nei “metadati” è `shift`: questo è il valore dello spostamento della box risultante dall'applicazione dei comandi TeX:

* `\raise`, `\lower` (applicati a un `\hbox`);
* `\moveleft`, `\moveright` (applicati a un `\vbox`).

Nel nostro esempio, `shift` è 0pt perché non abbiamo spostato la `\hbox` dalla sua posizione naturale.

La [progetto Overleaf](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) produce anche diagrammi di grafi dei nodi in formato PDF: ecco un link per scaricare una [versione file PDF](https://www.filepicker.io/api/file/bezigXESC2FSasvjoh8A) del grafo dei nodi sopra.

### Come crea il progetto Overleaf quelle grafiche?

Il progetto Overleaf sfrutta la possibilità di eseguire strumenti software e utility installati sui server di Overleaf—vedi [questo post del blog](/latex/it/articoli-approfonditi/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.md) per maggiori dettagli e un progetto di esempio. Per produrre una grafica SVG che rappresenti una box di TeX, il codice TeX della box viene scritto in un piccolo file che viene poi composto con pdfTeX per generare un file DVI—nota che il programma pdfTeX viene eseguito da LuaTeX tramite alcune righe di script Lua. Quel file DVI viene convertito, al volo, in SVG usando l'utilità `dvisvgm` —che è fornita con la distribuzione TeX Live installata sui server di Overleaf. `dvisvgm` viene eseguito con l'opzione da riga di comando `-n` per garantire che qualsiasi testo composto venga convertito in linee/curve in modo che il rendering corretto del file SVG non dipenda dal fatto che i font TeX siano installati.

Per creare i grafi dei nodi usiamo uno script Lua chiamato `hiviznodelist.lua` che si basa sul lavoro di Patrick Gundlach. Quello script scrive un cosiddetto file `.gv` (Graphviz), che è un file di testo contenente un grafo dei nodi descritto nel linguaggio `dot` . Il `.gv` file viene elaborato da un programma di utilità chiamato `dot` che produce un diagramma dei nodi in entrambi i formati file PDF e SVG.

### Esempi del progetto

Ecco alcuni esempi aggiuntivi con grafica SVG prodotta usando il progetto Overleaf. Le box che contengono molto testo (ad esempio, in una \vbox), o matematica complessa, produrranno grafi dei nodi enormi—se esplori il progetto Overleaf, è consigliabile non usare box inutilmente complesse per dimostrare le caratteristiche che ti interessano.

#### \vbox to 25pt{A}

Questo esempio dimostra l'effetto di inserire testo direttamente in una `\vbox`: nota che la struttura dei nodi è piuttosto complessa, anche per una box così semplice. Il motivo di questa complessità è che il testo inserito direttamente in una `\vbox` fa sì che TeX esegua la sillabazione delle righe. Puoi vedere che la `\vbox` è larga 345pt: il valore di `\hsize` nel momento in cui è stata creata questa box. Nota anche che il carattere “A” è contenuto in una `hlist` anch'essa larga 345 punti, e osserva la grande penalità (10000) insieme a `\parfillskip` e `\rightskip` colle alla fine del contenuto della box. Quella penalità e i due elementi di colla sono inseriti dalle attività di sillabazione di TeX. Se guardi il valore `glue_set` per la riga del paragrafo (`hlist`) contenente la lettera “A” vedrai che è estremamente grande (322.500000): perché? Perché la riga del paragrafo è larga 345pt ma contiene solo un `\parindent` e la lettera “A”: lo spazio rimanente deve essere riempito dalla `\parfillskip` colla, che deve allungarsi di una distanza considerevole per riempire lo spazio rimanente sulla riga.

![{{{alt}}}](/files/c83d9b7aab7e25c7c97e9d34f3d67d9635367e25)

[![{{{alt}}}](/files/821991a4227adaec6ff56475e5d36d4940b37b4a)](https://www.filepicker.io/api/file/pVtHsNGSQ4m09vBZuOpQ)

[Scarica il file PDF](https://www.filepicker.io/api/file/nBS0uDs2QjqKCKljAm7r)

#### \vbox to 25pt{\hbox{A}}

È molto istruttivo confrontare questo esempio con il precedente. Qui non solo il grafo dei nodi è considerevolmente più piccolo, ma la larghezza della `\vbox` è appena 7.50002pt: la stessa larghezza del carattere “A”. Il motivo è che la “A” è stata racchiusa in una `\hbox` che impedisce alla `\vbox` di attivare la sillabazione per TeX—una caratteristica importante delle box create con `\vbox`.

![{{{alt}}}](/files/6abc24aca495d1f20520cab9a0afca769b10243f)

[![{{{alt}}}](/files/69e2148ee7f1fe31bed9f0ed0d104bf1f0bc898f)](https://www.filepicker.io/api/file/LHepknjnRGOVEdghW4qH)

[Scarica il file PDF](https://www.filepicker.io/api/file/Yk3uCCQR5ao8Yd3TJCdE)

#### Matematica semplice: \hbox{$$\displaystyle \int f(x) dx$$}, box complessa!

Questo esempio dimostra che persino una matematica composta molto semplice crea una struttura di box dettagliata: la composizione della matematica produce *estremamente* strutture dati complesse all'interno di TeX!

![{{{alt}}}](/files/fc9db265738f1445dec9ca37d27a52a375e7049c)

[![{{{alt}}}](/files/044e162e640c0e120f6a4b090db7d87a6314ae67)](https://www.filepicker.io/api/file/oVFNNvCqT0eZP0qS2odk)

[Scarica il file PDF](https://www.filepicker.io/api/file/D5TepsdaSdeYZvkuSEJt)

## Crediti: grazie Patrick!

I nostri ringraziamenti a [Patrick Gundlach](https://twitter.com/patrickgundlach) che ha concesso a Overleaf il permesso di usare e distribuire una versione modificata del suo script Lua, `viznodelist.lua`, che elabora le box di TeX e produce un file (nel linguaggio `dot` ) che può essere elaborato per disegnare un grafo dei nodi. Il progetto Overleaf contiene uno script Lua chiamato `hiviznodelist.lua`—una versione rinominata e modificata del codice originale di Patrick, disponibile su [Github](http://gist.github.com/556247). Patrick ha creato un sistema di composizione tipografica basato su LuaTeX open source chiamato [speedata Publisher](https://speedata.github.io/publisher/index.html) che puoi scaricare e usare gratuitamente—sono disponibili anche opzioni di supporto commerciale.


---

# 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/36-pandora-s-hbox-using-luatex-to-lift-the-lid-of-tex-boxes.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.
