> 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/15-how-do-tex-engines-typeset-tables-2.md).

# Come i motori TeX compongono le tabelle 2

## Come compongono le tabelle i motori TeX 2

## I motori TeX si riferiscono alle tabelle come allineamenti

All'interno della [documentazione del codice sorgente di TeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) Knuth non parla della capacità di TeX di «comporre tabelle», ma descrive invece gli algoritmi di TeX per costruire i cosiddetti *allineamenti*. La composizione delle tabelle in TeX è, in effetti, un processo automatizzato di allineamento di box: disposizione di box (celle, righe e colonne della tabella) per ottenere una gradevole griglia o matrice rettangolare — anche se, naturalmente, trattandosi di TeX ci sono *molte* sfumature in questo processo.

Il termine «allineamento» si riflette anche nei nomi dei due comandi di composizione di tabelle incorporati in tutti i motori TeX:

* `\halign` (allineamento orizzontale), e
* `\valign` (allineamento verticale).

Esploreremo entrambi i comandi in tutta questa serie di articoli, iniziando con una panoramica più formale della struttura/formato dei `\halign` e `\valign` comandi per gettare le basi per gli articoli successivi, più approfonditi, di questa serie.

### Le tabelle di TeX sono box e spaziatura

Le singole celle di una tabella in genere contengono vari tipi di contenuto, come righe di testo, matematica o grafica, il che produce un insieme di celle che hanno larghezze, altezze o profondità diverse del materiale composto. In qualche modo, TeX deve lavorare con quelle celle, dalle dimensioni del contenuto variabili, per costruire la tabella finale in cui ogni riga ha una certa altezza e ogni colonna una particolare larghezza. TeX deve dedurre valori appropriati per le altezze di ogni riga e le larghezze di ogni colonna dall'insieme di celle di dimensioni variabili.

Tuttavia, TeX non può conoscere la dimensione reale del contenuto di ogni cella finché quel contenuto non viene composto; di conseguenza, TeX percorre l'intera tabella, componendo ogni cella, per ottenere i dati di dimensionamento necessari a completare il layout della tabella. Da quei dati di dimensione, TeX può determinare l'altezza corretta di ogni riga e la larghezza di ogni colonna. TeX può anche incontrare celle vuote o celle che l'utente desidera estendere su più colonne o più righe, il tutto di cui TeX deve tenere attentamente conto nei suoi calcoli. Dopo aver «filtrato» questo insieme eterogeneo di dati sulle dimensioni delle celle (box), solo allora TeX è in grado di determinare i valori finali delle larghezze delle colonne in una `\halign`, o le altezze delle righe per `\valign` e usa quei valori nelle fasi finali dei suoi algoritmi di impaginazione delle tabelle.

In pratica, e «sotto il cofano», la composizione delle tabelle in TeX consiste in diversi passaggi. In sintesi, TeX per prima cosa compone una versione «provvisoria» o «incompleta» della tabella mentre acquisisce ed elabora i dati sulle dimensioni delle celle — e i dati su eventuali `\span` comandi usati nella tabella. Nelle fasi finali TeX rielabora quella versione «incompleta» della tabella, per finalizzare `\halign` le larghezze delle colonne o `\valign` le altezze delle righe e ottenere il layout completo — tutto questo verrà esplorato in questa serie di articoli.

## \halign e \valign: due modi di costruire tabelle

Tutti i motori TeX forniscono due *integrate* comandi (primitive) progettati per comporre tabelle (allineamenti): `\halign` e `\valign`che condividono molte caratteristiche fondamentali ma differiscono anche in alcuni aspetti essenziali. La differenza chiave tra `\halign` e `\valign` è il modo in cui costruiscono le rispettive tabelle: riga per riga o colonna per colonna:

* `\halign`: compone le tabelle su base riga per riga per creare righe individuali che vengono impilate verticalmente per produrre le colonne della tabella
* `\valign`: compone le tabelle su base colonna per colonna per creare colonne individuali che vengono impilate orizzontalmente per produrre le righe della tabella

### \halign

Il diagramma seguente mostra la costruzione di una tabella creata da `\halign`. La tabella viene composta riga per riga con righe individuali impilate verticalmente. Alcune conseguenze di ciò includono:

* le colonne della tabella derivano dall'impilamento verticale delle righe della tabella
* i cambi di pagina possono avvenire tra le righe della tabella
* materiale non tabellare può essere inserito tra le righe (tramite `\nolign`, che esamineremo più avanti)

![](/files/1466401899bb97d2bb19d81b11127f20dcddf451)

### \valign

Il diagramma seguente mostra la costruzione di una tabella creata da `\valign`. La tabella viene composta colonna per colonna con colonne individuali impilate orizzontalmente (una accanto all'altra). Alcune conseguenze di ciò includono:

* le righe della tabella derivano dall'impilamento orizzontale delle colonne della tabella
* i ritorni a capo possono avvenire tra le colonne della tabella
* materiale non tabellare può essere inserito tra le colonne (tramite `\noalign`, che esamineremo più avanti)

![](/files/03c149f90bf6dfc3b2bf7f259e3b47a5b4dc0880)

### Esempi

L'esempio seguente ha lo scopo di evidenziare l'approccio *riga per riga*vs. colonna per colonna di \halign e \valign.

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Bordi delle box aderenti
\setlength{\fboxsep}{0pt}

Ecco una tabella \verb|\valign|:
\begingroup
% \hsize controlla le
% larghezze delle colonne di \valign. Impostiamo anche
% \parindent a un valore più piccolo
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % Il preambolo: trattato più avanti (in grande dettaglio!)
A&B&C\cr % La prima COLONNA di questa tabella \valign
D&E&F\cr
G&H&I\cr
}}
\endgroup

% Nota: per motivi spiegati più avanti
% il \halign deve essere inserito in una \vbox
Ecco una tabella \verb|\halign|: \fbox{%
\vbox{\halign{
#&#&#\cr % Il preambolo: trattato più avanti (in grande dettaglio!)
A&B&C\cr % La prima RIGA di questa tabella \halign
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%25+%5Chsize+controls+the+%5Cvalign+%0A%25+column+widths.+We+also+set+%0A%25+%5Cparindent+to+a+smaller+value%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+COLUMN+of+this+%5Cvalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0A%25+Note%3A+for+reasons+explained+later%0A%25+the+%5Chalign+has+to+be+put+in+a+%5Cvbox%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A+%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+ROW+of+this+%5Chalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output: ![](/files/c622af905b9b7c2aa97ad6b211b84fa0d91fd436)

La grafica seguente mostra una versione annotata delle tabelle prodotte dal codice sopra. Più avanti in questa serie di articoli affronteremo argomenti come:

* che cosa sono i preamboli delle tabelle?
* perché impostiamo `\hsize` e `\parindent` per `\valign` le tabelle?

Per il momento, nota solo l'approccio riga per riga vs. colonna per colonna di `\halign` *riga per riga*. `\valign` la costruzione delle tabelle:

![](/files/a60a65f817053d3ddd19e5db84720bc01e92527a)

## Forma generale di \halign e \valign

Per cominciare esamineremo le proprietà di base e il formato generale di `\halign` e `\valign` ma senza entrare ancora in alcun dettaglio reale. [Come osservato](#intro), adottiamo una panoramica leggermente formale della forma/struttura dei `\halign` e `\valign` comandi per gettare le basi per i successivi articoli di questa serie.

La forma più generale dei `\halign` e `\valign` comandi può essere scritta come segue:

`\halign` $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ { $$\langle$$⁠`preambolo`⁠$$\rangle$$ $$\langle$$⁠`corpo`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ { $$\langle$$⁠`preambolo`⁠$$\rangle$$ $$\langle$$⁠`corpo`⁠$$\rangle$$ }

Come puoi vedere, entrambi i `\halign` e `\valign` comprendono tre sezioni principali:

* [$$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`preambolo`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`corpo`⁠$$\rangle$$](#body)

## Il $$\langle$$⁠specifica facoltativa⁠$$\rangle$$

La dimensione/estensione predefinita di una tabella, la sua cosiddetta «dimensione naturale», è determinata dal suo contenuto — giusto per chiarire, per dimensione/estensione intendiamo

* le *larghezza* di una tabella prodotta da `\halign`, oppure
* le *altezza* di una tabella prodotta da `\valign`

Un $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ può essere usato per «sovrascrivere» la dimensione naturale della tabella e assume una delle due forme:

* **`su`** $$\langle$$**⁠`dimensione`⁠**$$\rangle$$
* **`espandi`** $$\langle$$**⁠`dimensione`⁠**$$\rangle$$

dove

* $$\langle$$**⁠`dimensione`⁠**$$\rangle$$ è una lunghezza espressa nelle unità che TeX comprende, come pt, mm o cm — la lunghezza può anche essere specificata come un comando che si espande in un valore specificato nelle unità appropriate;
* **`su`** e **`espandi`** sono parole chiave di TeX che specificano il tipo di «sovrascrittura» della dimensione naturale:
  * **`su`**: imposta la dimensione della tabella alla $$\langle$$⁠`dimensione`⁠$$\rangle$$ valore
  * **`espandi`**: aggiunge il $$\langle$$⁠`dimensione`⁠$$\rangle$$ valore specificato alla dimensione naturale della tabella

L'effetto di un $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ dipende dal tipo di tabella che viene composta: regolerà un `\halign` dimensione naturale della tabella, o una *larghezza*, o una `\valign` dimensione naturale della tabella, o una *altezza*.

Ecco alcuni esempi:

* `\halign **to 100pt**{...}`: imposta la `\halign` larghezza della tabella a `100pt`
* `\valign **to 50pt**{...}`: imposta la `\valign` altezza della tabella a `30pt`
* `\halign **spread 30pt**{...}`: aggiunge 30pt alla `\halign` larghezza naturale della tabella. Al contrario, scrivere **spread -30pt** ridurrebbe la larghezza della tabella di 30pt.
* `\valign **spread 20pt**{...}`: aggiunge 20pt alla `\valign` altezza naturale della tabella. Al contrario, scrivere **spread -20pt** ridurrebbe l'altezza della tabella di 20pt.

Il codice seguente riutilizza gli esempi di tabella sopra ma applica un $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ a una `\valign` e `\halign` tabella:

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Bordi delle box aderenti
\setlength{\fboxsep}{0pt}

Ecco una tabella \verb|\valign|:
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup

Ecco una tabella \verb|\halign|:
\fbox{%
\vbox{\halign to 100pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign+to+100pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce l'output mostrato qui sotto:

![](/files/fd3e96e904adbd5e12d333efe6db770e5d0c53df)

—ma nota come il contenuto di entrambe le tabelle sia «ammassato». Il motivo è l'assenza di spaziatura flessibile (glue) che TeX può usare per distendere il contenuto e riempire lo spazio aggiuntivo fornito da **`su`** $$\langle$$**⁠`dimensione`⁠**$$\rangle$$. Qui salteremo avanti per menzionare il `\tabskip` comando.

#### Un'introduzione iniziale al comando \tabskip

L'estetica del layout di una tabella può richiedere un aggiustamento della spaziatura tra le sue righe o colonne, quindi, non sorprendentemente, i motori TeX forniscono un comando chiamato `\tabskip` che ti consente di farlo. `\tabskip` si usa per impostare (e variare) la quantità di spazio flessibile («glue») che TeX inserisce tra le colonne di una `\halign` o tra le righe di una `\valign`. Gli articoli successivi esploreranno `\tabskip` in molto più dettaglio.

Come esempio introduttivo, il codice seguente usa un'impostazione per `\tabskip` che fa sì che TeX inserisca un po' di spazio (molto) flessibile tra le righe di una `\valign` tabella. Quello spazio flessibile consente alle righe della tabella di distendersi e riempire lo spazio aggiuntivo creato da $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ di **`to 50pt`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\setlength{\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{specifica facoltativa} \rangle\)}
\begin{document}
\pagestyle{empty}
Ecco una tabella \verb|\valign|:
\vspace{6pt}

\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

Ecco la stessa tabella \verb|\valign| ma con una \optspec{} di ``\texttt{to 50pt}''. Nota come le righe siano «ammassate» perché non c'è alcuna «colla estensibile» disponibile tra le righe:

\vspace{6pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

Useremo la tabella \verb|\valign| con una \optspec{} di ``\texttt{to 50pt}'', ma forniremo «spaziatura flessibile» tramite il comando \verb|\tabskip|. Qui, \verb|\tabskip| fornisce abbastanza «glue» per consentire alle righe della \verb|\valign| di «distendersi» e riempire qualsiasi spazio extra disponibile. Ecco la tabella \verb|\valign| «distesa»:

\tabskip=0pt plus1fil % Questo imposta \tabskip su una glue molto flessibile
\vspace{6pt}

\def\mylen{50pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to \mylen{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+example+using+tabskip+glue\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Cnewcommand%7B%5Coptspec%7D%7B%5C%28%5Clangle+%5Ctexttt%7Boptional+specification%7D+%5Crangle%5C%29%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+with+an+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27.+Note+how+the+rows+are+%60%60bunched+up%27%27+because+there%27s+no+available+%60%60stretchable+glue%27%27+between+the+rows%3A+%0A%0A%5Cvspace%7B6pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AWe%27ll+use+the+%5Cverb%7C%5Cvalign%7C+table+with+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27%2C+but+provide+%60%60flexible+spacing%27%27+via+the+%5Cverb%7C%5Ctabskip%7C+command.+Here%2C+%5Cverb%7C%5Ctabskip%7C+is+providing+enough+%60%60glue%27%27+to+enable+the++%5Cverb%7C%5Cvalign%7C+rows+to++%60%60stretch+out%27%27+and+fill+any+available+extra+space.+Here+is+the+%60%60stretched+out%27%27+%5Cverb%7C%5Cvalign%7C+table%3A%0A%0A%5Ctabskip%3D0pt+plus1fil+%25+This+sets+%5Ctabskip+to+a+very+flexible+glue%0A%5Cvspace%7B6pt%7D%0A%0A%5Cdef%5Cmylen%7B50pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+%5Cmylen%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/15a663dbe69d25d2d673a7b9bff9e259bf719bad)

## Introduzione al $$\langle$$⁠preambolo⁠$$\rangle$$ e $$\langle$$⁠corpo⁠$$\rangle$$

Questa sezione fornisce un'introduzione al $$\langle$$⁠`preambolo`⁠$$\rangle$$, e *brevemente* accenna al $$\langle$$⁠`corpo`⁠$$\rangle$$ che successivamente viene [esplorato in maggiore dettaglio](#bodydetails).

Gli articoli successivi di questa serie esploreranno il $$\langle$$⁠`preambolo`⁠$$\rangle$$ e $$\langle$$⁠`corpo`⁠$$\rangle$$ in maggiore dettaglio, in particolare l'uso e l'elaborazione da parte di TeX del $$\langle$$⁠`preambolo`⁠$$\rangle$$.

Come osservato sopra, il formato più generale di `\halign` o `\valign` le tabelle può essere scritto come:

`\halign` $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ { $$\langle$$⁠`preambolo`⁠$$\rangle$$ $$\langle$$⁠`corpo`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ { $$\langle$$⁠`preambolo`⁠$$\rangle$$ $$\langle$$⁠`corpo`⁠$$\rangle$$ }

### Il $$\langle$$⁠preambolo⁠$$\rangle$$

Il $$\langle$$⁠`preambolo`⁠$$\rangle$$ contiene una singola $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$ che è *terminata* dal `\cr` comando; di conseguenza, il $$\langle$$⁠`preambolo`⁠$$\rangle$$ può essere riscritto come:

$$\langle$$⁠`preambolo`⁠$$\rangle$$=$$\langle$$⁠`riga di preambolo`⁠$$\rangle$$**`\cr`**

### Il $$\langle$$⁠corpo⁠$$\rangle$$

Analogamente, il $$\langle$$⁠corpo⁠$$\rangle$$ sezione può essere ulteriormente suddivisa in una o più «righe» costitutive, ma qui ci sono due opzioni per ogni riga:

* una riga costituita da un insieme di celle che formano una `\halign` riga o `\valign` colonna; oppure
* un `\noalign` comando che «inietta» materiale tra le righe di un `\halign`o le colonne di un `\valign`.

Per il momento ignoreremo il `\noalign` comando (vedi [più avanti nell'articolo](#noalign)) e supponiamo che ogni riga del $$\langle$$⁠corpo⁠$$\rangle$$ sia dati per un insieme di celle e *terminata* da `\cr` comando.

Ignorando `\noalign`, il $$\langle$$⁠`corpo`⁠$$\rangle$$ sezione, che rappresenta il contenuto dell'utente, contiene una sequenza di righe, ciascuna delle quali chiameremo $$\langle$$⁠`riga del corpo`⁠$$\rangle$$ che è *terminata* dalla sua corrispondente `\cr` comando.

Il $$\langle$$⁠`corpo`⁠$$\rangle$$ può essere riscritto come:

$$\langle$$⁠riga del corpo$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠riga del corpo$${}*\mathrm{N}$$⁠$$\rangle$$\cr

Mettendo tutto insieme, possiamo riscrivere il formato generale di `\halign` e `\valign` come:

`\halign` $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ { $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠riga del corpo$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

`\valign` $$\langle$$⁠`specifica facoltativa`⁠$$\rangle$$ { $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠riga del corpo$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

Per ragioni che saranno affrontate in articoli successivi, il $$\langle$$⁠`preambolo`⁠$$\rangle$$, una sola $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$, ha un formato diverso da tutte le righe nella tabella $$\langle$$⁠`corpo`⁠$$\rangle$$. Esamineremo anche di nuovo il [che può essere usato anche all'interno del `\noalign` comando](#noalign) preambolo della tabella $$\langle$$⁠`corpo`⁠$$\rangle$$.

### Il $$\langle$$⁠riga di preambolo⁠$$\rangle$$

Il $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$ svolge un *ruolo* vitale`\halign` righe o `\valign` colonne—contenute nella tabella $$\langle$$⁠`corpo`⁠$$\rangle$$. Il $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$ può anche contenere «modelli» di cella usati per costruire le righe di una `\halign` o le colonne di una `\valign`—un argomento che sarà esaminato in dettaglio.

Lo scopo del $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$ è duplice:

* determina il *massimo* numero di celle per riga di una `\halign` o per colonna di una `\valign`.
* memorizza *template di cella* che possono essere usati per automatizzare la formattazione o l'inclusione di contenuto all'interno delle celle contenute nella tabella $$\langle$$⁠`corpo`⁠$$\rangle$$. I template di cella sono facoltativi e possono essere «vuoti», oppure puoi includere caratteri o comandi che TeX inserirà automaticamente prima e/o dopo il contenuto effettivo di celle specifiche della tua tabella. Questo ti risparmia la noia di dover scrivere/includere manualmente quei caratteri o comandi in ogni cella a cui desideri applicarli.

**Nota**: una `\halign` riga o `\valign` colonna può contenere meno celle del massimo specificato dal $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$ ma non può contenerne più di quel massimo, altrimenti TeX genera un errore. Per il momento stiamo omettendo i dettagli di *ciclici* preamboli.

Proseguendo con i nostri diagrammi di struttura, la $$\langle$$⁠`riga di preambolo`⁠$$\rangle$$ per

* un `\halign` tabella con un massimo di $$\mathrm{K}$$ celle per *riga*, oppure
* un `\valign` tabella con un massimo di $$\mathrm{K}$$ celle per *colonna*

può essere scritta come:

$$\langle$$⁠modello$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠modello$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠modello$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠modello$${}*\mathrm{K}$$⁠$$\rangle$$

dove `&` è l' *carattere di tabulazione di allineamento* che indica la fine di una cella e l'inizio della successiva. Tradizionalmente, il carattere e commerciale (`&`) viene usato come tabulatore di allineamento, ma potrebbe essere usato al suo posto qualsiasi carattere con [codice di categoria](/latex/it/altri-argomenti/43-table-of-tex-category-codes.md) 4.

Solo per ricordare, il $$\langle$$⁠`preambolo`⁠$$\rangle$$ può essere scritto $$\langle$$⁠`preambolo`⁠$$\rangle$$=$$\langle$$⁠`riga di preambolo`⁠$$\rangle$$**`\cr`**, o equivalentemente

$$\langle$$⁠`preambolo`⁠$$\rangle$$=$$\langle$$⁠modello$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠modello$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠modello$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠modello$${}*\mathrm{K}$$⁠$$\rangle$$**`\cr`**

#### Struttura di ogni cella $$\langle$$⁠modello⁠$$\rangle$$

Ogni cella $$\langle$$⁠modello$${}\_i$$⁠$$\rangle$$ può essere scritta come:

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ dove:

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ è un insieme di caratteri o comandi (token) che TeX inserirà automaticamente *prima* contenuto fornito dall'utente per la cella $$i$$;
* $$\texttt{#}$$ è un segnaposto, che mostra dove deve apparire il contenuto fornito dall'utente nella cella $$i$$. Ancora una volta, il carattere `#` è solo una *tradizione*, qualsiasi carattere con [codice di categoria](/latex/it/altri-argomenti/43-table-of-tex-category-codes.md) 6 potrebbe essere usato invece. Nota che il codice di categoria 6 è usato per i parametri delle macro;
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ è un insieme di caratteri o comandi (token) che TeX inserirà automaticamente *dopo* contenuto fornito dall'utente per la cella $$i$$.

Nota che tutti i $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ e $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ sono *argomento opzionale*: non è necessario usare alcun carattere o comando prima o dopo il contenuto della cella.

**Completare il** $$\langle$$**⁠preambolo⁠**$$\rangle$$

Infine, usando la notazione sopra, il $$\langle$$⁠`preambolo`⁠$$\rangle$$ per

* un `\halign` tabella con un massimo di $$\mathrm{K}$$ celle per *riga*, oppure
* un `\valign` tabella con un massimo di $$\mathrm{K}$$ celle per *colonna*

può essere scritta come:

$$\langle$$⁠`preambolo`⁠$$\rangle$$=$$\langle$$⁠`riga di preambolo`⁠$$\rangle$$`**\cr**`

o

$$\langle$$⁠`preambolo`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

**Il** $$\langle$$**⁠preambolo⁠**$$\rangle$$ **e il conteggio di righe e colonne**

Un **`\halign`** tabella con un $$\langle$$⁠`preambolo`⁠$$\rangle$$ che specifica $$\mathrm{K}$$ celle e un $$\langle$$⁠`corpo`⁠$$\rangle$$ che contiene $$\mathrm{N}$$ $$\langle$$⁠`righe del corpo`⁠$$\rangle$$ produrrà una tabella con $$\mathrm{K}$$ *colonne* e $$\mathrm{N}$$ *righe*, come mostrato nel diagramma seguente:

![](/files/da341d0887a4d6fb99b57ac0319d0f7c94a5504f)

Un' **`\valign`** tabella con un $$\langle$$⁠`preambolo`⁠$$\rangle$$ che specifica $$\mathrm{K}$$ celle e un $$\langle$$⁠`corpo`⁠$$\rangle$$ che contiene $$\mathrm{N}$$ $$\langle$$⁠`righe del corpo`⁠$$\rangle$$ produrrà una tabella con $$\mathrm{K}$$ *righe* e $$\mathrm{N}$$ *colonne*, come mostrato nel diagramma seguente:

![](/files/638255d6aa8d25cf229d0b3b46aee6b483e82c2e)

### Basta teoria, passiamo agli esempi!

Come vedremo più avanti in qualche dettaglio, quando TeX elabora il contenuto di una tabella — le celle contenute nel [$$\langle$$⁠`corpo`⁠$$\rangle$$](#body)— controlla la presenza di template di cella, che sono stati definiti nel $$\langle$$⁠`preambolo`⁠$$\rangle$$, perché TeX cerca eventuali token del template da inserire prima e/o dopo il contenuto dell'utente. I seguenti esempi minimi dimostrano l'uso dei template di cella $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ in un `\halign` e `\valign` .

#### Una tabella \halign che usa template di cella

L'esempio seguente dimostra una `\halign` tabella che usa un template di cella per inserire automaticamente virgolette attorno al contenuto della prima cella di ogni riga: cioè un template che influisce su ogni cella della prima colonna:

```latex
\documentclass{article}
\usepackage{parskip} % Imposta \parindent a 0pt
% Scegli una dimensione di pagina comodamente piccola
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % Distribuisce le colonne di \halign
\begin{document}
\pagestyle{empty}

Ecco una tabella \verb|\halign| \textit{senza} template di cella:

\halign{
% Niente prima o dopo ogni '#' nel <preambolo>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

Ecco la stessa tabella \verb|\halign| ma con virgolette doppie aggiunte automaticamente alla prima cella di ogni riga; cioè, influisce su ogni cella della prima colonna:

\halign{
% Template di virgolette nel preambolo:
``#''&#&#\cr % Doppie virgolette prima e dopo il primo #
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=halign+example+of+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D10cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B20pt%7D+%25+Space+out+the+%5Chalign+columns%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A+%0A%0A%5Chalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Chalign%7C+table+but+with+double+quotes+automatically+added+to+the+first+cell+in+each+row%3B+i.e.%2C+it+affects+every+cell+in+the+first+column%3A+%0A%0A%5Chalign%7B%0A%25+Quotation+templates+in+the+preamble%3A%0A%60%60%23%27%27%26%23%26%23%5Ccr+%25+Double+quote+marks+before+and+after+first+%23%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/a2bc6ff10f833c1926045966a8c7e76cecab4b92)

La grafica seguente è una versione annotata della `\halign` tabella prodotta dall'esempio sopra; qui confrontiamo la struttura «formale» di una $$\langle$$⁠`preambolo`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

a tre celle con il vero $$\langle$$⁠`preambolo`⁠$$\rangle$$ di ` ``#''&#&#**\cr** `, evidenziando la presenza, o l'assenza, di template di cella:

![](/files/f9cf5f1511d96e43ff23391c9d692865e033615d)

#### Una tabella \valign che usa template di cella

L'esempio seguente dimostra una `\valign` tabella che usa un template per ogni cella per inserire automaticamente cifre intorno al contenuto dell'utente.

```latex
\documentclass{article}
\usepackage{parskip} % Imposta \parindent a 0pt
% Scegli una dimensione di pagina comodamente piccola
\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\setlength{\tabskip}{8pt} % Distribuisce le righe di \valign
\begin{document}
\pagestyle{empty}

Ecco una tabella \verb|\valign| \textit{senza} template di cella:

\begingroup
\hsize=25pt
\valign{
% Niente prima o dopo ogni '#' in
% il <preambolo>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Ecco la stessa tabella \verb|\valign| ma usando template di cella per inserire automaticamente cifre in ogni cella:

\begingroup
\hsize=25pt
\valign{
% Cifre inserite prima e dopo ogni '#' in
% il <preambolo>
1#2&3#4&5#6\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+valign+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%25+Space+out+the+%5Cvalign+rows%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+%0A%25+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+using+cell+templates+to+automatically+insert+digits+into+every+cell%3A+%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Digits+inserted+before+and+after+every+%27%23%27+in%0A%25+the+%3Cpreamble%3E%0A1%232%263%234%265%236%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/19280989dafed46d00c1024208ada09c8109f67b)

La grafica seguente è una versione annotata della `\valign` tabella prodotta dall'esempio sopra; qui confrontiamo la struttura «formale» di una $$\langle$$⁠`preambolo`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

a tre celle con il vero $$\langle$$⁠`preambolo`⁠$$\rangle$$ di `1#2&3#4&5#6**\cr**`, evidenziando l'uso dei template di cella $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/5dd6aa71bfe648f9253d803f00c14a7715831549)

Nota come il template per la cella $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$) viene applicato alla $$i$$aesima cella in ogni `\valign` colonna, con il risultato che tutte le celle della $$i$$a *riga* vengono influenzate.

#### Formattare il testo usando template di cella

L'esempio successivo usa i seguenti $$\langle$$⁠`preambolo`⁠$$\rangle$$ (template di cella) per stilizzare il testo contenuto in ogni riga o colonna:

`\textbf{#}&\textit{#}&\texttt{#}\cr`

Se confrontiamo questo $$\langle$$⁠`preambolo`⁠$$\rangle$$ alla nostra struttura "formale" di una tabella a tre celle $$\langle$$⁠`preambolo`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

possiamo vedere che:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$=`\textbf{`

$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$=`\textit{`

$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$=`\texttt{`

$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$=`}`

Nota come questi modelli di cella, come `\textbf{#}` assomigliano a macro con un singolo parametro (il contenuto della cella).

```latex
Una tabella \verb|\valign| con testo stilizzato usando modelli di cella:

\begingroup
\hsize=25pt
\valign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Una tabella \verb|\halign| con testo stilizzato usando modelli di cella:

\halign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Styling+with+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+or+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AA+%5Cverb%7C%5Cvalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AAn+%5Cverb%7C%5Chalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Chalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/e59833babada8bd5f4f91a61df7b4f4e0ed13b41)

## Più dettagli sulla tabella $$\langle$$⁠corpo⁠$$\rangle$$

Nella sezione [Introduzione al $$\langle$$⁠`preambolo`⁠$$\rangle$$ e $$\langle$$⁠`corpo`⁠$$\rangle$$](#preamble) abbiamo visto come, se ignoriamo temporaneamente `\noalign`, il $$\langle$$⁠`corpo`⁠$$\rangle$$ di un `\halign` o `\valign` la tabella consiste di più righe, ciascuna designata $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$, dove:

* ciascuna $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$ è terminata dal `\cr` comando
* ciascuna $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$ di un `\halign` è una riga della tabella
* ciascuna $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$ di una `\valign` è una colonna della tabella

La sequenza di righe, $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$, dove $$j=1\ldots\mathrm{N}$$, produce $$\mathrm{N}$$ righe di una `\halign` o $$\mathrm{N}$$ colonne per una `\valign`. Come riassunto nel diagramma seguente, un generale $$\langle$$⁠`preambolo`⁠$$\rangle$$ come

$$\langle$$⁠`preambolo`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

specifica modelli di cella per un massimo di $$\mathrm{K}$$ celle in ciascuna delle $$\mathrm{N}$$ $$\langle$$⁠`riga del corpo`⁠$$\rangle$$ voci nella $$\langle$$⁠`corpo`⁠$$\rangle$$:

![](/files/adcd80595b63fd00a572596844310bd3bf016237)

### La struttura di ciascuna $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$

Ogni riga $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$ della tabella $$\langle$$⁠corpo⁠$$\rangle$$ contiene contenuto per un massimo di $$\mathrm{K}$$ celle—come determinato dalla tabella $$\langle$$⁠preambolo⁠$$\rangle$$—e ha la forma generale:

$$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$=$$\langle$$⁠Cella$${}\_1$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Cella$${}\_2$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Cella$${}*3$$⁠$$\rangle$$$$\texttt{&}$$$$\cdots$$$$\texttt{&}$$$$\langle$$⁠Cella$${}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

dove:

* $$\langle$$⁠Cella$${}\_i$$⁠$$\rangle$$ rappresenta il contenuto dell'utente per la $$i$$esima cella in qualche $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$
* le **`&`** carattere è chiamato il *tab di allineamento* (lo stesso usato nel $$\langle$$⁠preambolo⁠$$\rangle$$) che segnala la fine di una cella e l'inizio della successiva. Ancora una volta, l'uso di **`&`** è soltanto una tradizione (convenzione) perché qualsiasi carattere con [codice di categoria](/latex/it/altri-argomenti/43-table-of-tex-category-codes.md) 4.

Sebbene ciascuna $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$ possa contenere un massimo $$\mathrm{K}$$ celle (determinato dal $$\langle$$⁠preambolo⁠$$\rangle$$) possono contenere *meno* di $$\mathrm{K}$$ celle e qualsiasi $$\langle$$⁠Cella$${}\_i$$⁠$$\rangle$$ in $$\langle$$⁠riga del corpo$${}\_j$$⁠$$\rangle$$ può essere vuota.

L'esempio seguente dimostra una $$\langle$$⁠preambolo⁠$$\rangle$$ di `#&#&#&#&#\cr` che prevede un massimo di 5 celle per $$\langle$$⁠riga del corpo⁠$$\rangle$$; tuttavia, le tabelle composte contengono righe con meno di 5 celle:

```latex
Una tabella \verb|\valign| con da 1 a 5 celle per \textit{colonna}:

\begingroup
% \hsize controlla le larghezze delle colonne di \valign (dimensione delle righe composte).
\hsize=40pt
\fbox{\valign{
% Usa un preambolo che consenta 5 celle per colonna
% La maggior parte delle colonne non fornisce contenuto per 5 celle
#&#&#&#&#\cr% 5 celle per colonna
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}
\endgroup

% Nota: per motivi spiegati più avanti
% il \halign deve essere inserito in una \vbox
Una tabella \verb|\halign| con da 1 a 5 celle per \textit{riga}:

\fbox{%
\vbox{\halign{
% Usa un preambolo che consenta 5 celle per riga
% La maggior parte delle righe non fornisce contenuto per 5 celle
#&#&#&#&#\cr % 5 celle per riga
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[Apri questo esempio in Overleaf](/latex/it/articoli-approfonditi/15-how-do-tex-engines-typeset-tables-2.md)

Questo esempio produce il seguente output:

![](/files/a8cda37e6a7ae83aa8e2891dc11fb71361ef7c08)

Il prossimo `\halign` esempio dimostra un numero variabile di celle per riga e la possibilità che le celle siano vuote—nota come le celle vuote siano prodotte da caratteri consecutivi **`&`** nella tabella:

```latex
Una tabella \verb|\halign| con alcune celle vuote---nota che nella tabella \(\langle\texttt{body}\rangle\) ci sono caratteri \texttt{\&} consecutivi:

\fbox{%
\vbox{\halign{
% Usa un preambolo che consenta 5 celle per riga
% La maggior parte delle righe non fornisce contenuto per 5 celle
#&#&#&#&#\cr % 5 celle per riga
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&&\(\mathrm{Cell}{}_3\)\cr
&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&&&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Empty+cells+Number+of+cells+per+row\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+and+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Cbegin%7Bdocument%7D%0AAn+%5Cverb%7C%5Chalign%7C+table+with+some+empty+cells---note+there+are+consecutive+%5Ctexttt%7B%5C%26%7D+characters+in+the+table+%5C%28%5Clangle%5Ctexttt%7Bbody%7D%5Crangle%5C%29%3A%0A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%25+Use+a+preamble+that+allows+for+5+cells+per+row%0A%25+Most+rows+don%27t+provide+content+for+5+cells%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+5+cells+per+row%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%5Ccr+%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%5Ccr%0A%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_4%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_5%5C%29%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/74904609cd703bc7af177eed513a4af199e58380)

### Non c'è nulla di speciale in & e # nella composizione delle tabelle

L'uso da parte di TeX dei caratteri `&` e `#` nella composizione di `\halign`- o `\valign`-based tables è una tradizione che ha origine dalle macro plain TeX originali di Knuth. È del tutto possibile usare caratteri diversi da `&` e `#` assegnando i codici di categoria appropriati alle sostituzioni preferite, come dimostra il seguente esempio:

* sostituendo `&` con `@` assegnando `@` al codice di categoria 4
* sostituendo `#` con `|` assegnando `|` al codice di categoria 6 (che è usato per i parametri delle macro)

Le modifiche della categoria restano locali usando `\begingroup` e `\endgroup`:

```latex
\documentclass{article}
\begin{document}
\begingroup
\catcode`@=4
\catcode`|=6
\halign{
|@|@|\cr
A@B@C\cr
D@E@F\cr
}
\endgroup
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tables+and+category+codes\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegingroup%0A%5Ccatcode%60%40%3D4%0A%5Ccatcode%60%7C%3D6%0A%5Chalign%7B%0A%7C%40%7C%40%7C%5Ccr%0AA%40B%40C%5Ccr%0AD%40E%40F%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

## Reintrodurre il comando \noalign

I motori TeX forniscono la (primitiva) incorporata `\noalign` di TeX:

`\noalign{`$$\langle$$⁠`token`⁠$$\rangle$$`}`

dove $$\langle$$⁠`token`⁠$$\rangle$$ sono caratteri e/o comandi TeX/LaTeX. Il `\noalign` comando è esclusivamente per l'uso all'interno di una `\halign` o `\valign` tabella: usarlo al di fuori di esse genererà un errore.

Lo scopo di `\noalign` è consentire l'"inserimento" di testo e comandi TeX/LaTeX *tra* le righe di una `\halign` tabella o le colonne di una `\valign` tabella. L'uso più comune di `\noalign` è la creazione di regole di tabella (linee):

* *orizzontali* regole tra `\halign` righe della tabella
* *verticali* regole tra `\valign` colonne della tabella

Si noti quanto segue:

* le `\noalign` comando è ***non terminato dal\*\*\*\*****&#x20;****`\cr`****&#x20;****\*\*\*\*comando***
* l'insieme di comandi consentiti all'interno di `\noalign{...}` dipende dal fatto che venga usato nella $$\langle$$⁠`corpo`⁠$$\rangle$$ di un `\halign` o `\valign` tabella (cioè in modalità verticale o orizzontale).

Possiamo ora dire che la tabella $$\langle$$⁠`corpo`⁠$$\rangle$$ di `\halign` o `\valign` può consistere in singole righe $$\langle$$⁠riga del corpo$${}\_i$$⁠$$\rangle$$`\cr` intervallate da `\noalign` comandi; una delle molte possibilità/combinazioni potrebbe essere:

`\noalign{`$$\langle$$⁠`token`⁠$$\rangle$$`}` $$\langle$$⁠riga del corpo$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠riga del corpo$${}\_2$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`altri token`⁠$$\rangle$$`}` $$\langle$$⁠riga del corpo$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠riga del corpo$${}*\mathrm{N}$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`altri token`⁠$$\rangle$$`}`

### Esempio che usa \noalign

Esamineremo altri casi d'uso più avanti in questa serie di articoli, ma ecco un esempio di base per dimostrare la creazione di regole di tabella tramite `\noalign`:

```latex
\setlength{\tabskip}{5pt}

Uso di \verb|\noalign| per inserire regole orizzontali tra le righe di una tabella \verb|\halign|:
\vspace{6pt}

\halign{%
#&#&#&#&#\cr
\noalign{\hrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\hrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\hrule}
}

Uso di \verb|\noalign| per inserire regole verticali tra le colonne di una tabella \verb|\valign|:
\vspace{6pt}

\begingroup % mantieni locali le modifiche a \parindent e \hsize
\parindent=0pt
\hsize=50pt
\valign{%
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+noalign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+horizontal+rules+between+rows+of+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Chalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D%0A%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+vertical+rules+between+columns+of+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup+%25+keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Cparindent%3D0pt%0A%5Chsize%3D50pt%0A%5Cvalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/a9f214c378b656e44a64dea5ce1dccc715ef9482)

## tabskip rivisitato

Daremo uno sguardo più da vicino al `\tabskip` comando, basandoci sull' [introduzione in una sezione precedente](#tabskip).

Il `\tabskip` comando imposta il valore di una speciale forma di "spaziatura" (glue) usata *esclusivamente* nella composizione di tabelle: il suo scopo è fornire spaziatura tra le righe o le colonne della tabella:

* per `\halign` tabelle: `\tabskip` il glue viene inserito prima e dopo la tabella (cioè a sinistra e a destra) e tra le colonne della tabella
* per `\valign` tabelle: `\tabskip` il glue viene inserito prima e dopo la tabella (cioè sopra e sotto) e tra le righe della tabella

Il valore di `\tabskip` può essere impostato usando il LaTeX `\setlength` di TeX:

`\setlength{\tabskip}{`$$\langle$$⁠`valore di glue`⁠$$\rangle$$`}`

dove $$\langle$$⁠`valore di glue`⁠$$\rangle$$ può essere:

* una lunghezza fissa come `5pt`, `3mm`, oppure
* un glue flessibile finito come `3pt plus 2pt minus 1pt`, oppure
* un glue infinitamente flessibile come `0pt plus1fill`.

Puoi anche impostare direttamente `\tabskip` (aggirando `\setlength`) scrivendo

`\tabskip`=$$\langle$$⁠`valore di glue`⁠$$\rangle$$

Tuttavia, qualsiasi modifica al valore di `\tabskip` del glue influenzerà la spaziatura della tabella solo quando tale modifica è:

* effettuata *prima* le `\halign` o `\valign` comando da elaborare, oppure
* effettuata all'interno della tabella $$\langle$$⁠`preambolo`⁠$$\rangle$$

I tentativi di impostare `\tabskip` valori all'interno del contenuto della tabella (celle nella tabella $$\langle$$⁠`corpo`⁠$$\rangle$$) *non* modificano la spaziatura di `\halign` colonne della tabella o `\valign` righe della tabella. La ragione di questo comportamento di `\tabskip` può essere ricondotta al ruolo svolto da $$\langle$$⁠`preambolo`⁠$$\rangle$$ durante la composizione delle tabelle—processi che esploreremo più avanti in qualche dettaglio.

### Vedere per credere

Per aiutare a visualizzare la presenza dei vari tipi di spaziatura/glue usati nella composizione delle tabelle, in particolare

* `\tabskip` colla
* `\baselineskip` colla
* kerning manuale (`\kern`)

Overleaf ha preparato un progetto basato su LuaTeX per colorare i componenti di una tabella. LuaTeX è stato scelto perché consente una rielaborazione a basso livello dei dati/delle strutture interne delle tabelle composte, ma qui non esploreremo questi dettagli.

Ecco alcuni esempi che mostrano varie applicazioni di `\tabskip`. Per ogni esempio mostreremo l'output reale e la versione colorata prodotta da LuaTeX.

### \tabskip esempio 1

Esaminiamo l'uso di `\tabskip` in un `\halign` e `\valign` tabella. Mostreremo le tabelle effettivamente composte, con un bordo per visualizzarne dimensioni e spaziatura, insieme a grafiche annotate contenenti versioni colorate che mostrano chiaramente l'ampiezza dei vari glue/spaziature in ogni tabella.

Innanzitutto, il `\halign`:

```latex
% Per visualizzare l'estensione della tabella metteremo un bordo attorno ad essa
\setlength{\fboxsep}{0pt} % Usa bordi aderenti

% Qui impostiamo \tabskip "direttamente"
\tabskip5pt % Imposta il valore iniziale di \tabskip fuori dalla tabella

% Per mettere un bordo attorno alla tabella, questa deve essere salvata in una scatola TeX.
% Una \halign deve essere collocata in una \vbox perché \halign deve essere
% elaborata in una "modalità verticale": una \hbox non funzionerà perché
% viene elaborata in una "modalità orizzontale"

\fbox{\vbox{\halign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tabskip+glue+in+an+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+To+visualize+the+table%27s+extent+we%27ll+put+a+border+around+it+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%0A%25+Here+we+set+%5Ctabskip+%22directly%22%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+To+put+a+border+around+the+table+it+has+to+be+saved+to+a+TeX+box.%0A%25+An+%5Chalign+has+to+be+placed+in+a+%5Cvbox+because+%5Chalign+must+be+%0A%25+processed+in+a+%22vertical+mode%22%3A+an+%5Chbox+will+not+work+because%0A%25+that+is+processed+in+a+%22horizontal+mode%22%0A%0A%5Cfbox%7B%5Cvbox%7B%5Chalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/2333a950b821fe2386e6ed29f694f1cccca83ed9)

La grafica successiva è una versione più grande, colorata e annotata della tabella prodotta dall'esempio precedente:

![](/files/35db73429d329a3117fb6b53cbdad972522c08e3)

Ci sono 4 istanze del `\tabskip` comando, ciascuna corrisponde a una particolare posizione di spaziatura all'interno della tabella:

1. `\tabskip5pt` viene usato al di fuori della tabella e imposta il `\tabskip` valore applicato prima (alla sinistra) della prima cella in ogni riga.
2. `\tabskip10pt` è impostato nel primo modello di cella della $$\langle$$⁠`preambolo`⁠$$\rangle$$ che influisce sullo spazio tra $$\langle$$⁠Cella$${}\_1$$⁠$$\rangle$$ e $$\langle$$⁠Cella$${}\_2$$⁠$$\rangle$$ di ogni riga.
3. `\tabskip15pt` è impostato nel secondo modello di cella della $$\langle$$⁠`preambolo`⁠$$\rangle$$ che influisce sullo spazio tra $$\langle$$⁠Cella$${}\_2$$⁠$$\rangle$$ e $$\langle$$⁠Cella$${}\_3$$⁠$$\rangle$$ di ogni riga.
4. `\tabskip20pt` è impostato nel terzo, e finale, modello di cella della $$\langle$$⁠`preambolo`⁠$$\rangle$$ che influisce sullo spazio aggiunto dopo $$\langle$$⁠Cella$${}\_3$$⁠$$\rangle$$, l'ultima cella di ogni riga.

Poi, il `\valign`

```latex
\setlength{\fboxsep}{0pt} % Usa bordi aderenti
\tabskip5pt % Imposta il valore iniziale di \tabskip fuori dalla tabella

% Mantieni locali le modifiche a \hsize (in un gruppo)
\begingroup
% \hsize determina le larghezze delle colonne di \valign
\setlength{\hsize}{50pt}
% Poiché \valign può essere collocato in una \vbox o \hbox possiamo usare
% \fbox direttamente
\fbox{\valign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
E&E&F\cr
G&H&I\cr
}}
\endgroup
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+Keep+changes+to+%5Chsize+local+%28in+a+group%29%0A%5Cbegingroup%0A%25+%5Chsize+determines+the+%5Cvalign+column+widths%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D+%0A%25+Because+%5Cvalign+can+be+placed+in+a+%5Cvbox+or+%5Chbox+we+can+use+%0A%25+%5Cfbox+directly%0A%5Cfbox%7B%5Cvalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AE%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

![](/files/b5ffea34d28f72d5e92d8e3bedc4ccc21231c021)

Anche in questo caso, la grafica successiva è una versione più grande, colorata e annotata della tabella prodotta dall'esempio precedente:

![](/files/1b98dcd4eacebe752028b0a10135fee739fc4fde)

Come per l' `\halign` esempio, ci sono 4 istanze del `\tabskip` comando. Tuttavia, con una `\valign` tabella il `\tabskip` viene inserito tra le righe della tabella:

1. `\tabskip5pt` viene usato al di fuori della tabella e imposta il `\tabskip` valore applicato prima (sopra) della prima cella in ogni colonna.
2. `\tabskip10pt` è impostato nel primo modello di cella della $$\langle$$⁠`preambolo`⁠$$\rangle$$ che influisce sullo spazio tra $$\langle$$⁠Cella$${}\_1$$⁠$$\rangle$$ e $$\langle$$⁠Cella$${}\_2$$⁠$$\rangle$$ di ogni colonna.
3. `\tabskip15pt` è impostato nel secondo modello di cella della $$\langle$$⁠`preambolo`⁠$$\rangle$$ che influisce sullo spazio tra $$\langle$$⁠Cella$${}\_2$$⁠$$\rangle$$ e $$\langle$$⁠Cella$${}\_3$$⁠$$\rangle$$ di ogni colonna.
4. `\tabskip20pt` è impostato nel terzo, e finale, modello di cella della $$\langle$$⁠`preambolo`⁠$$\rangle$$ che influisce sullo spazio aggiunto dopo $$\langle$$⁠Cella$${}\_3$$⁠$$\rangle$$, l'ultima cella di ogni colonna.

**Riepilogo/conclusioni**

* In una `\halign` tabella il `\tabskip` il glue viene posto a sinistra e a destra di ciascuna cella in una riga, distanziando così le colonne della tabella.
* In un `\valign` tabella il `\tabskip` il glue viene posto sopra e sotto ciascuna cella in una colonna, distanziando così le righe della tabella.

### \tabskip e \noalign

#### Usando una \halign

Il seguente `\halign` esempio usa `\tabskip` glue e dimostra anche il `\noalign` comando, usandolo per inserire regole spaziate sopra e sotto le righe di una `\halign` tabella. Quelle regole sono composte usando il `\hrule` comando (primitivo) insieme allo spazio creato da `\kern`:

```latex
\setlength{\tabskip}{5pt} % Imposta \tabskip fuori dalla tabella

\halign{
#&#&#&#&#\cr % Il <preambolo>
\noalign{\hrule\kern2pt} % Regola spaziate prima della riga 1
1&2&3&4&5\cr % Riga 1
\noalign{\kern2pt\hrule\kern2pt} % Regola spaziate tra le righe 1/2
6&7&8&9&10\cr % Riga 2
\noalign{\kern2pt\hrule\kern2pt} % Regola spaziate tra le righe 2/3
11&12&13&14&15\cr % Riga 3
16&17&18&19&20\cr % Riga 4---nessuna regola tra le righe 3/4
\noalign{\kern2pt\hrule} % Regola di spazio alla fine della tabella
}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D+%25+Set+%5Ctabskip+outside+of+the+table%0A%0A%5Chalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+The+%3Cpreamble%3E%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+before+row+1%0A1%262%263%264%265%5Ccr+%25+Row+1%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+1%2F2+%0A6%267%268%269%2610%5Ccr+%25+Row+2%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+2%2F3+%0A11%2612%2613%2614%2615%5Ccr+%25+Row+3%0A16%2617%2618%2619%2620%5Ccr+%25+Row+4---no+rules+between+rows+3%2F4%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D+%25+Space+rule+at+table+end%0A%7D%0A%5Cend%7Bdocument%7D)

Questo esempio produce la tabella mostrata sotto, che è stata ulteriormente annotata per riprodurre il codice (La)TeX e i numeri (1) a (4) per enumerare i `\noalign` comandi, contenenti regole e kern, insieme al corrispondente output composto:

![](/files/bd7152cbb756d2686589af179bfe54ccb377ec7c)

La grafica seguente mostra una versione colorata della tabella etichettata per mostrare le varie spaziature/glue nella tabella:

![](/files/a45cbe92e96fddf97fb4a175c0f855ab44ec51c4)

Si noti quanto segue:

* l'uso di `\noalign` per inserire regole tra determinate righe e l'uso manuale di `\kern` valori per inserire un po' di spazio prima/dopo le regole. I motori TeX non inseriscono `\baselineskip` glue dopo una regola composta, motivo per cui lo spazio viene inserito manualmente usando `\kern` (si potrebbero usare altri comandi di spaziatura);
* `\baselineskip` il glue è stato inserito automaticamente tra le righe 3 e 4.

#### Usando una \valign

Il seguente `\valign` esempio usa gli stessi dati del precedente `\halign`:

```latex
\begingroup
\setlength{\parindent}{10pt}
\setlength{\hsize}{50pt}
\setlength{\tabskip}{5pt}
\valign{
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule\kern2pt}
11&12&13&14&15\cr
16&17&18&19&20\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Cbegingroup%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A11%2612%2613%2614%2615%5Ccr%0A16%2617%2618%2619%2620%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Questo esempio produce la tabella mostrata sotto, che è stata ulteriormente annotata per riprodurre il codice (La)TeX e i numeri (1) a (4) per enumerare i `\noalign` comandi, contenenti regole e kern, insieme al corrispondente output composto:

![](/files/5726cd6751ea4715efa6f4b605d3029d4d5a904c)

![](/files/01842c90e370302f477096691beb7147b9ee4707)

### Una tabella \valign con righe di testo

L'esempio successivo

```latex
\setlength{\tabskip}{5pt}
\begingroup % Mantieni locali le modifiche a \parindent e \hsize
\setlength{\parindent}{10pt}
\setlength{\hsize}{75pt}
\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
\TeX{} può comporre tabelle molto complesse
tabelle.&Ecco un po' di testo extra
testo.&E, infine, una riga aggiuntiva
in questa colonna.\cr
\noalign{\kern5pt\vrule\kern5pt}
A&B&C\cr
\noalign{\kern5pt\vrule\kern5pt}
D&E&F\cr
G&H&I\cr
\noalign{\kern5pt\vrule}
}
\endgroup
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+valign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cbegingroup+%25+Keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B75pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern5pt%7D%0A%5CTeX%7B%7D+can+typeset+very+complex%0Atables.%26Here%27s+a+bit+of+extra+%0Atext.%26And%2C+finally%2C+an+extra+line%0Ain+this+column.%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AA%26B%26C%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Questo esempio produce il seguente output:

## Impostazione della larghezza delle righe e dell'altezza delle colonne

## Ulteriori informazioni sulla tabella $$\langle$$⁠preambolo⁠$$\rangle$$


---

# 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/15-how-do-tex-engines-typeset-tables-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.
