> 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/23-how-does-latex-typeset-headers-and-footers.md).

# Come LaTeX compone intestazioni e piè di pagina?

## Come compone LaTeX intestazioni e piè di pagina?

### Introduzione

Se stai cercando una guida pratica su come modificare intestazioni e piè di pagina, per favore [visita la nostra pagina di assistenza](/latex/it/formattazione/02-headers-and-footers.md) perché questo articolo si concentra sulla spiegazione dei meccanismi di basso livello usati dai motori TeX e da LaTeX per produrre intestazioni e piè di pagina.

* **Nota (aggiornamento)**: Questo articolo esplora il meccanismo di mark di base di LaTeX in uso prima di giugno 2022, quando fu introdotta una nuova implementazione più versatile della gestione dei mark di LaTeX. Vedi [Panoramica del nuovo meccanismo di mark di LaTeX](https://www.latex-project.org/help/documentation/ltmarks-doc.pdf) per maggiori dettagli. Per ragioni di compatibilità retroattiva, LaTeX continua a supportare il suo meccanismo di mark legacy. Il materiale dell'articolo che discute il comportamento dei motori TeX non è influenzato da queste modifiche a LaTeX.
* **Nota**: i termini “LaTeX”, “TeX” e “motore TeX” sono usati in tutte queste discussioni, quindi è utile comprenderne il significato—vedi l'articolo di Overleaf [Che cosa c'è in un nome: una guida alle molte sfumature di TeX](/latex/it/articoli-approfonditi/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) per ulteriori informazioni.

Per fornire un contesto di base utile, iniziamo con una panoramica di alcune aree rilevanti di basso livello della composizione tipografica basata su TeX—including l'archiviazione temporanea (interna) dei contenuti, l'interruzione di pagina e la costruzione della pagina. Le discussioni sono state semplificate considerando una pagina composta che contiene un “corpo” di testo più alcune intestazioni e piè di pagina. Elementi di pagina come figure (float) e note a piè di pagina non sono trattati perché coinvolgono un complesso meccanismo TeX chiamato *inserzioni*, che è ben al di fuori dell'ambito di questo articolo.

Inizieremo con la nozione di base di *nodi*: i blocchi costitutivi fondamentali usati dai motori TeX per l'archiviazione temporanea (interna) dei contenuti.

### Alcune note sull'archiviazione dei contenuti: nodi TeX

Poiché il motore TeX sottostante elabora il tuo codice LaTeX per produrre materiale impaginato—come paragrafi, tabelle e matematica—deve memorizzare temporaneamente quel contenuto nella memoria del motore TeX usato per elaborare il tuo codice LaTeX. Per memorizzare contenuto composto i motori TeX usano una sequenza di cosiddetti *nodi*, che puoi considerare come “blocchi” di memoria del computer (dispositivo) di dimensioni variabili, collegati tra loro per formare un elenco (vedi questo [articolo di Wikipedia sulle strutture di dati collegate](https://en.wikipedia.org/wiki/Linked_data_structure)).

![Rappresentazione schematica di come i motori TeX memorizzano i contenuti usando nodi collegati](/files/de56f78f60776ddf29829b606b357b05ccf901dc)

Per rappresentare gli elementi fondamentali della composizione tipografica basata su TeX—come caratteri, glue, box, penalità, kern e [*mark*](#why-were-here-understanding-mark-nodes) (per citarne solo alcuni)—i motori TeX usano diversi *tipi* tipi di nodo. Alcuni nodi, come quelli per le box, devono memorizzare più dati rispetto a tipi di nodo più semplici come i nodi carattere; di conseguenza, alcuni nodi sono più grandi di altri—richiedendo più byte per essere memorizzati in memoria. Quando leggi di TeX puoi incontrare termini come *nodi carattere*, *nodi glue*, [*nodi mark*](#why-were-here-understanding-mark-nodes) e così via: ora sai che sono solo nomi dati a blocchi di memoria allocati per memorizzare dati che rappresentano un elemento della composizione tipografica di TeX.

#### Perché siamo qui: comprendere i nodi mark

Tra i molti tipi di nodo, quello di cui dobbiamo parlare si chiama *nodo mark* che viene creato dal `\mark` di TeX:

```latex
\mark{stuff to store}
```

Il `\mark` Il comando non produce direttamente alcun contenuto impaginato: il suo argomento `*stuff to store*` viene salvato in memoria per un uso successivo e un *nodo mark* viene creato per contenere la posizione in memoria di *cose da memorizzare*. Come vedremo, il `\mark` comando è stato creato *specificamente* per aiutare a produrre intestazioni e piè di pagina.

I nodi mark creati dai `\mark` comandi sono “incorporati” nel contenuto della pagina, pronti per essere usati durante le fasi finali della composizione della pagina quando il motore TeX è pronto ad aggiungere intestazioni e piè di pagina alla pagina composta (corpo). In genere, `*stuff to store*` conterranno materiale come numeri di pagina e titoli/numeri di capitolo o sezione—i blocchi costitutivi di intestazioni e piè di pagina.

#### ε-TeX aggiunge il comando \marks

[La versione 2 di ε-TeX](https://texdoc.org/serve/e-TeX/0), un'estensione del TeX originale di Knuth, è stata pubblicata nel 1998 e offre nuove funzionalità insieme a miglioramenti delle funzionalità esistenti. Oggi, la maggior parte dei miglioramenti di ε-TeX è stata incorporata nei motori TeX principali: pdfTeX, LuaTeX e XeTeX—vedi l' [**`-etex`** opzione della riga di comando dei motori TeX](/latex/it/altri-argomenti/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md) che abilita l'uso delle estensioni di ε-TeX.

Il software TeX originale di Knuth fornisce il comando \mark che crea solo 1 “classe”, o “tipo”, di nodo mark. Il tuo documento potrebbe includere molti comandi \mark ma tutti creano nodi mark dello stesso “tipo” o “classe”—non esiste alcun meccanismo integrato per raggrupparli o classificarli. Questa limitazione è stata rimossa da un miglioramento di ε-TeX: il comando \marks, supportato da pdfTeX, LuaTeX e XeTeX:

```latex
\marks n {stuff to store}
```

dove `n` è un intero (`0` <= `n` < `32768`) che determina il nodo mark *classe*.

Note:

* scrivere `\marks 0` (cioè, `n`=`0`) è sinonimo dell'uso del comando originale di TeX `\mark` comando
* ε-TeX ha introdotto anche le variabili mark ([vedi più avanti](#pre-output-checks-looking-for-mark-nodes)) per ciascuna classe (`n`) di mark: `\firstmarks n`, `\topmarks n` e `\botmarks n`. Classi selezionate di variabili mark potrebbero essere usate per fornire dati di mark per specifiche attività di composizione tipografica.
* LuaTeX ha aumentato il valore massimo di `n` su `65535`, consentendo $$2^{16}$$ classi di mark

### Motivi dell'uso dei mark in TeX

Per capire *perché* (e come) i motori TeX usano il `\mark` (o `\marks`) comando per produrre intestazioni e piè di pagina dobbiamo apprezzare alcune “stranezze” dei meccanismi dei motori TeX per la costruzione delle pagine—trovare interruzioni di pagina e spedire le pagine completate in un file PDF. In realtà, tali processi di costruzione della pagina sono complessi, ma i principi/concetti fondamentali possono essere semplificati per fornire spiegazioni di contesto sufficienti ad aiutarci a comprendere i mark.

Quando un motore TeX completa la composizione tipografica di singoli elementi di contenuto come paragrafi, tabelle o matematica, chiama una routine interna (una funzione chiamata `build_page(...)`) che cerca di aggiungere quegli elementi appena impaginati alla pagina che si sta attualmente costruendo in memoria. Quando quel nuovo materiale viene aggiunto alla pagina in costruzione, TeX controlla anche se quel contenuto appena aggiunto ha reso la pagina corrente “sufficientemente piena”. Se la pagina è piena, TeX può creare un *interruzione di pagina*— inviando quella quantità di contenuto per l'elaborazione finale (“impacchettamento”) e la successiva uscita nel file PDF.

Una caratteristica chiave della fase finale dell'impacchettamento della pagina (composizione) è qualcosa chiamata *routine di output* che è, in effetti, una sequenza di comandi definita dall'utente usata per impacchettare la pagina di contenuto e renderla pronta per essere inviata al file PDF. Un'attività esempio di “impacchettamento” è aggiungere intestazioni e piè di pagina, ma esistono numerosi modi per usare le routine di output—per esempio, vedi [questo articolo su TUGboat](https://tug.org/TUGboat/tb11-1/tb27salomon.pdf). Le routine di output sono un'area piuttosto complessa di TeX, quindi non entreremo nei dettagli qui: ai fini presenti, ricorda solo che la fase finale della composizione della pagina comporta l'uso di una sequenza di comandi definita dall'utente (collettivamente chiamata un *routine di output*).

Ma consideriamo cosa potrebbe accadere quando TeX completa la composizione tipografica di un lungo paragrafo di testo, spezzandolo in una sequenza di singole righe composte. TeX vorrà aggiungere quel paragrafo appena composto—riga per riga—alla pagina attualmente in costruzione, ma, forse, solo *alcune* di quelle righe può stare sulla pagina corrente. Nota che per “pagina” ci riferiamo all'area di testo principale (corpo della pagina) che *non* include altri elementi della pagina come intestazioni e piè di pagina, che vengono aggiunti in seguito (dalla routine di output).

Dopo che diverse righe del paragrafo sono state aggiunte alla pagina corrente, questa potrebbe diventare “sufficientemente piena” ed essere il momento per TeX di creare un'interruzione di pagina. Tuttavia, abbiamo del materiale “residuo” perché solo *part* del paragrafo è arrivato alla pagina corrente: il “contenuto in eccesso del paragrafo” viene salvato per più tardi, pronto per la creazione della *successiva* pagina. Il grafico seguente illustra questa idea: parte del paragrafo si trova sulla *dimensione* pagina e una parte viene trattenuta per la *successiva* pagina.

![Rappresentazione schematica di un paragrafo che attraversa un'interruzione di pagina](/files/b7f6c7532c6a8ec8814c7e7e488e91d8dd162352)

Questo esempio di paragrafo dimostra che un motore TeX spesso elabora (impagina) parti di contenuto che non possono, *nella loro interezza*, stare sulla pagina corrente—perché quel contenuto si estende oltre il punto in cui diventa necessaria un'interruzione di pagina. Ricorda che i motori TeX determinano le interruzioni di riga introducendo, quindi componendo tipograficamente, *interi paragrafi* e, a differenza di alcune applicazioni, non adottano un approccio riga per riga alla composizione dei paragrafi. In altre parole, TeX compone tipograficamente il *intero* paragrafo, indipendentemente dal fatto che stia o meno sulla pagina corrente (questo viene determinato in seguito). Tra l'altro, il principio del “compilare completamente e poi aggiungere alla pagina corrente” vale anche per altri tipi di contenuto TeX, comprese le tabelle che vengono lette interamente dal file .tex e composte nella loro totalità prima di qualsiasi tentativo di aggiungerle alla pagina corrente.

Per il nostro esempio di paragrafo, il testo completo di quel paragrafo, *inclusi eventuali comandi all'interno di quel testo*, è stato completamente elaborato—il che significa che la composizione tipografica di TeX ha raggiunto una certa posizione nel tuo `.tex` file. Lo “stato interno corrente” del motore TeX, come il valore delle variabili o le impostazioni dei parametri memorizzati, rifletterà il materiale, compresi eventuali comandi, elaborato fino alla posizione corrente—la fine del paragrafo.

Sebbene il paragrafo completo sia stato composto tipograficamente, parte di esso non può essere ospitata dalla pagina corrente, con il risultato che il “contenuto in eccesso del paragrafo” viene salvato per la *successiva* pagina. All'interno del codice LaTeX (testo più comandi) che ha prodotto il “contenuto in eccesso del paragrafo”, il motore TeX *potrebbe* aver chiamato un qualsiasi numero di comandi e macro che hanno modificato valori e variabili memorizzati internamente dal motore TeX—cioè hanno apportato modifiche allo “stato corrente” di TeX.

Il diagramma seguente illustra una “stranezza” di TeX estremamente importante, una che influenza diversi aspetti della composizione tipografica basata su TeX. Guardando il lato destro del diagramma vedi una rappresentazione dei nodi che comprendono tutto il contenuto attualmente memorizzato in memoria: l'area grigio chiaro contiene i nodi che formano la *dimensione* pagina e l'area grigio scuro è contenuto composto destinato alla *successiva* pagina. Questo scenario riflette il nostro esempio di paragrafo: l'area grigio scuro rappresenta il “contenuto in eccesso del paragrafo”: righe di testo trattenute perché non entrano nella pagina corrente.

![Rappresentazione schematica della posizione del nodo in cui TeX trova un'interruzione di pagina, mostrando anche il contenuto trattenuto per la pagina successiva](/files/ab1b5e2c77db80a5db2590de1b6f88c6ffeee925)

Ricorda che, una volta che TeX ha una pagina (corpo) “sufficientemente piena”, passa quel contenuto a qualcosa chiamato *routine di output* che è una sequenza di comandi definita dall'utente. Tra le altre cose, la routine di output aggiunge intestazioni e piè di pagina al corpo della pagina, finalizzando la pagina in preparazione per la sua uscita nel file PDF.

Il nostro grafico (sopra) rappresenta l'istanza in cui TeX ha scelto di effettuare un'interruzione di pagina in un particolare nodo, come `\baselineskip` la glue tra righe composte, ed è pronto a iniziare l'impacchettamento della pagina corrente usando la routine di output—una sequenza di comandi incorporati e macro definite dall'utente. *Tuttavia*, oltre al contenuto che costituisce la pagina corrente (memorizzata in memoria), TeX ha già elaborato e memorizzato (in memoria) *materiale aggiuntivo*, dal tuo `.tex` file. Quel materiale aggiuntivo si estende *oltre l'interruzione di pagina* e *potrebbe* hanno incluso comandi che hanno modificato valori o variabili importanti relative alla pagina, influenzando lo “stato interno corrente” di TeX—che include valori di parametri interni o dati memorizzati dalle macro.

Quando TeX inizia a impacchettare la pagina corrente, il suo “stato interno corrente” è *non* definito da tutto ciò che è stato composto fino alla posizione dell'interruzione di pagina, perché TeX ha già *superato quel punto* nel tuo file e ha elaborato materiale aggiuntivo. Se consideri la posizione nel tuo file corrispondente al punto in cui avviene l'interruzione di pagina, e la posizione che TeX ha effettivamente raggiunto nel tuo `.tex` file, i due corrispondenti stati interni di TeX, compresi i dati memorizzati e il valore delle variabili, potrebbero essere molto diversi. Lo stato corrente della composizione tipografica di TeX è di solito avanti rispetto al punto in cui avviene l'interruzione di pagina; cioè, le attività di composizione tipografica di TeX *non sono sincronizzate* con il processo di output delle pagine composte tramite la routine di output.

#### Esempio ipotetico: come ottenere intestazioni errate

Il diagramma seguente illustra comandi ipotetici `\myheader` e `\myfooter` usati per memorizzare il testo desiderato delle intestazioni e dei piè di pagina; per esempio, usando definizioni di base come

```latex
\newtoks\headertoks% una nuova variabile lista di token per il testo dell'intestazione
\newtoks\footertoks% una nuova variabile lista di token per il testo del piè di pagina
% Usa \global per garantire che i dati memorizzati dell'intestazione o del piè di pagina siano
% accessibili ovunque, compresi i comandi nella
% routine di output
\newcommand{\myheader}[1]{\global\headertoks={#1}}
\newcommand{\myfooter}[1]{\global\footertoks={#1}}
```

in cui `\headertoks` e `\footertoks` sono liste di token usate per memorizzare il testo delle intestazioni e dei piè di pagina.

Inoltre, il nostro esempio ipotetico ha anche una routine di output che ricava il testo dell'intestazione e del piè di pagina dai valori correnti di `\myheader` e `\myfooter`. Come mostrato nel diagramma, all'interno del contenuto destinato alla pagina corrente, `\myheader` e `\myfooter` impostano i valori appropriati (corretti). Tuttavia, sarebbe possibile che `\myheader` e/o `\myfooter` fosse chiamato all'interno di un paragrafo che attraversa un'interruzione di pagina. Poiché TeX deve elaborare l'intero paragrafo, `\myheader` e `\myfooter` sarebbe chiamato di nuovo per reimpostare il testo dell'intestazione/piè di pagina salvato nello “stato interno di TeX”, producendo valori che non sono corretti per la pagina corrente. Quando la routine di output produce l'intestazione e il piè di pagina, conterranno il testo destinato alla pagina successiva.

![Grafico che mostra intestazioni e piè di pagina errati prodotti se la routine di output usa solo macro TeX per recuperare il testo dell'intestazione e del piè di pagina](/files/53ec9c819d7e55fef3cd416172d0cd686d754ffd)

#### Il comportamento asincrono di TeX: il comando \mark in soccorso

Le attività di composizione tipografica di TeX (costruzione del contenuto) sono *non sincronizzate* con il processo finale di output di una pagina composta tramite comandi contenuti nella routine di output. Quando è il momento di produrre una pagina, lo stato interno effettivo di TeX è in anticipo rispetto a qualsiasi stato che avrebbe potuto avere nel punto dell'interruzione di pagina—dove ha composto l'ultimo pezzo di contenuto sulla pagina corrente in uscita.

In [Il TeXbook](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489), Donald Knuth, creatore di TeX, descrive questa situazione come

> ... la routine di output di TeX è in ritardo rispetto alle sue attività di costruzione della pagina

A causa di questa relazione non sincronizzata, sono necessarie “funzionalità speciali” sotto forma del *meccanismo dei mark*, applicato tramite il `\mark` (o `\marks n`) comando, sono necessari per garantire che intestazioni e piè di pagina contengano materiale pertinente alla pagina effettivamente in uscita. Il `\mark` comando incorpora nodi mark nel contenuto della pagina, memorizzando la posizione in memoria del contenuto che può essere usata per l'intestazione e il piè di pagina della pagina ospitante.

L'autore del noto e rispettato libro [TeX by Topic](https://www.eijkhout.net/tex/tex-by-topic.html) descrive il `\mark` meccanismo come

> ... il meccanismo principale attraverso il quale la routine di output può ottenere informazioni sul contenuto della pagina attualmente interrotta, in particolare la sua parte superiore e inferiore.

Il `\mark` Il comando è un meccanismo progettato per aggirare la natura asincrona dell'algoritmo di interruzione di pagina e routine di output di TeX.

![Rappresentazione schematica dei dati di mark (nodi) incorporati nel contenuto del corpo della pagina](/files/d08da4805b57f60905eacbbefaf5f9f50ecf9114)

### Controlli pre-output: ricerca di nodi mark

Dopo che il motore TeX ha determinato la posizione di un'interruzione di pagina, chiama una routine interna (chiamata `fire_up()`) che esegue molta pre-elaborazione prima che la routine di output completi la composizione della pagina e scriva la pagina finita nel file PDF. Una parte importante di tali passaggi di pre-elaborazione è impostare il valore di tre *variabili globali di mark*: `\botmark`, `\topmark` e `\firstmark` che vengono usate per fornire dati per la costruzione di intestazioni e piè di pagina. Naturalmente, una pagina può contenere più nodi mark, ma questi vengono filtrati per produrre le tre variabili di mark che funzionano come segue:

* **`\botmark`** è il mark in vigore all'interruzione di pagina corrente; cioè l'ultimo mark visto sulla *dimensione* pagina
* **`\topmark`** è il valore di `\botmark` da *precedente* pagina
* **`\firstmark`** è il primo mark sulla *dimensione* pagina—il primo mark tra `\topmark` e `\botmark`

Il seguente schema mostra i principi di base della pre-elaborazione del contenuto della pagina composta per determinare i valori delle tre variabili globali di mark `\botmark`, `\topmark` e `\firstmark`:

![Rappresentazione schematica dei principi di base usati per determinare i valori delle tre variabili globali di mark \botmark, \topmark e \firstmark](/files/66c12fb360025fc2bf20b6cd0d2911134f94150a)

La sezione successiva utilizza alcune delle spiegazioni fornite sopra per delineare come LaTeX compone intestazioni e piè di pagina.

### Le classi di LaTeX: stili di pagina e intestazioni/piè di pagina

Quando scrivi `\documentclass{*class*}` dove `*class*` potrebbe essere `article`, `libro`, `relazione` o `letter`, LaTeX carica un file chiamato `*class*.cls`; per esempio, `book.cls`, `article.cls` e così via. Questi `.cls` file contengono codice LaTeX per implementare variazioni specifiche della classe di vari comandi e funzionalità previste, e fornite, da tutte le classi di documento—i comportamenti condivisi da tutte le classi di documento. Gli esempi potrebbero includere margini di impaginazione specifici della classe insieme a versioni specifiche della classe di comandi, come `\section`, `\subsection` e così via.

Un altro elemento importante dei `.cls` file è l'implementazione specifica della classe degli stili di pagina standard che definiscono le intestazioni e i piè di pagina dei documenti prodotti usando una particolare classe e uno stile di pagina. Per esempio:

* **`book.cls`** e **`article.cls`** contengono ciascuno implementazioni degli stili di pagina `headings` e `myheadings`
* **`letter.cls`** contiene definizioni per gli stili di pagina `headings`, `empty`, `plain` e uno chiamato `firstpage`
* **`report.cls`** contiene definizioni per gli stili di pagina `headings` e `myheadings`

Le implementazioni degli stili di pagina dipendono spesso dall' `twoside` opzione di `\documentclass`—che il documento sia a faccia singola o doppia—così che intestazioni e piè di pagina siano definiti in modo appropriato per le pagine a sinistra (pari) e a destra (dispari).

Le classi di documento possono basarsi sulle definizioni predefinite degli `plain` o `empty` stili di pagina forniti altrove in LaTeX—esterni al `.cls` file in uso.

#### Ulteriori informazioni sugli stili di pagina

Quando cambi lo stile di una pagina usando `\pagestyle{*somestyle*}` o `\thispagestyle{*somestyle*}` LaTeX si aspetta di trovare un comando interno chiamato `ps@*somestyle*`—solitamente fornito dal file della `.cls` classe del documento o forse da un pacchetto come `fancyhdr`. Tra l'altro, per “comando interno” intendiamo un comando che fa parte del codice sorgente di LaTeX e il cui nome contiene un `@` simbolo @, che normalmente ne impedisce l'uso occasionale (a causa della sua [codice di categoria](/latex/it/altri-argomenti/43-table-of-tex-category-codes.md)).

La definizione di `\ps@*somestyle*` è responsabile dell'implementazione delle caratteristiche/comportamenti di quello stile di pagina, il che include fornire definizioni di:

* comandi usati durante le fasi finali della composizione della pagina (per aggiungere intestazioni e piè di pagina, vedi [più avanti nell'articolo](#commands-for-the-output-routine)):
  * `\@oddhead`
  * `\@oddfoot`
  * `\@evenhead`
  * `\@evenfoot`
* comandi per inserire dati di mark relativi alle sezioni da usare nella generazione di intestazioni e piè di pagina del documento che contengono titoli di sezione, numeri e simili. Per esempio, lo `headings` stile di pagina (all'interno di `book.cls`) definisce i seguenti comandi che producono mark:
  * `\chaptermark`
  * `\sectionmark`

Esploreremo ulteriormente i comandi che generano mark [, come](#mark-commands-and-mark-data), ma solo a titolo di esempio: quando scrivi `\chaptermark`\chapter{chapter title} `viene eseguito anche il comando per inserire dati di mark relativi al capitolo per la successiva produzione delle intestazioni di pagina.` le `\chaptermark` Anatomia dei comandi di intestazione e piè di pagina basati sullo stile di pagina

#### Questa sezione esplora alcuni dei comandi/processi fondamentali di LaTeX usati per creare intestazioni e piè di pagina—attingendo a spiegazioni o concetti presentati in precedenza in questo articolo.

Il “modello” di intestazioni e piè di pagina di LaTeX

**Il contenuto delle intestazioni e dei piè di pagina (predefiniti) di LaTeX si basa su una gerarchia a due livelli di sezioni del documento: una sezione di “livello superiore” che contiene più sezioni di “livello inferiore”. Per le classi book e article questo si traduce in:**

\*\*book\*\*

* `: le sezioni di “livello superiore” sono prodotte dai` **classe**comandi e le sezioni di “livello superiore” sono prodotte dai `\chapter` comandi e le sezioni di “livello inferiore” tramite `\section`, riflettendo capitoli contenenti molte sezioni.
* `**article**` **classe** (presumendo documenti a due facce): le sezioni di “livello superiore” sono prodotte usando `\section` comandi e quelle di “livello inferiore” tramite `\subsection`, riflettendo più sottosezioni che compaiono all'interno della stessa sezione.

LaTeX applica il suo “modello” di intestazioni e piè di pagina tramite i suoi comandi di sezionamento che “iniettano” nodi mark (tramite il `\mark` comando) per memorizzare dati rilevanti per la sezione del documento che si sta creando. Per esempio, ogni volta che scrivi `\section{*some section title*}` verrà creato un nodo mark, contenente dati che riflettono `*some section title*` e il numero della sezione.

LaTeX usa un sistema di mark che contiene dati della forma `{left}{right}`, generati in ultima analisi tramite `\mark` comandi

```latex
\mark{{left}{right}}
```

incapsulati in strati di macro progettati per proteggere gli utenti dai dettagli di livello inferiore—che sono esplorati nelle sezioni successive di questo articolo.

#### Esplorando la classe book

Quando il `book.cls` file viene caricato, una delle sue ultime azioni è eseguire `\pagestyle{headings}` che imposta lo stile di pagina predefinito su `headings`, quindi esamineremo quello stile di pagina in modo più dettagliato.

Come [notato sopra](#more-on-page-styles), le caratteristiche/proprietà dello `headings` stile di pagina, come implementato dalla `libro` classe, saranno definite dal comando (interno) `\ps@headings` contenuto nel file `book.cls`. La definizione precisa di `\ps@headings` dipende dal fatto che il documento sia a faccia singola o doppia (impostazione predefinita per la `libro` classe).

**“Comandi mark” e “dati mark”**

Per i documenti a due facce prodotti dalla `libro` classe, la definizione di `\ps@headings` crea (definisce) due “comandi mark”: `\chaptermark` e `\sectionmark` che producono “dati mark”, della forma `{left}{right}`, da usare in intestazioni e piè di pagina. Questi comandi mark riflettono il modello di intestazioni e piè di pagina di LaTeX—basato sulla gerarchia delle sezioni del documento:

* il comando di sezione di “livello superiore” (qui, `\chapter`) viene usato per fornire “dati mark” per le intestazioni delle pagine a sinistra (pari). Quando inizi un nuovo capitolo, scrivendo `\chapter{*chapter title*}`, `\chaptermark` viene chiamato per creare “dati mark” che riflettono quel nuovo capitolo—contenenti il suo `*chapter title*` e numero.
* il comando di sezione di “livello inferiore” (qui, `\section`) viene usato per fornire “dati mark” per le pagine a destra (dispari). Quando scrivi `\section{*section title*}` le `\sectionmark` il comando verrà chiamato per creare “dati mark” che riflettono la nuova sezione—contenenti il suo `*section title*` e numero. Qualsiasi dato mark fornito dal precedente `\chapter` non è influenzato da eventuali successivi comandi \section.

**\markboth e \markright**

I comandi mark specifici della sezione di LaTeX, come `\chaptermark` e `\sectionmark`, utilizzano altri due comandi chiamati `\markboth` e `\markright` che forniscono i dati mark effettivi per intestazioni e piè di pagina. `\markboth` e/o `\markright` può includere comandi per stilizzare il testo dell'intestazione o del piè di pagina, ad esempio rendendolo in maiuscolo.

Per documenti prodotti usando `libro` le impostazioni predefinite della classe (fronte-retro, `headings` stile di pagina), i comandi che generano i segni funzionano come segue:

* `\chaptermark` genera dati di segno usando `\markboth`
* `\sectionmark` genera dati di segno `\markright`

`\markboth` e `\markright` sono macro che, in definitiva, usano il primitivo (integrato, di basso livello) `\mark` comando per inserire effettivamente i segni generati all'interno dei comandi di sezionamento.

`\markboth` ha la forma

* **`\markboth{left}{right}`**: inserisce un segno (nodo) usando `\mark{{left}{right}}` risultando in un nodo di segno contenente una coppia di valori tra parentesi graffe `{left}{right}`.

`\markright` ha la forma

* **`\markright{newright}`**: inserisce un segno (nodo) usando `\mark{{currentleft}{newright}}`; vale a dire, cambia il valore corrente di `destra` su `newright` ma il valore corrente di `sinistra` (cioè, `currentleft`) non viene modificato, dando come risultato un nodo di segno contenente una coppia di valori tra parentesi graffe `{currentleft}{newright}`.

Il comportamento di `\markboth` e `\markright` supportano la gerarchia di sezioni a due livelli, come un documento contenente più sezioni all'interno di ogni capitolo.

A titolo di esempio per la classe di documento (a due facciate) `libro`  (usando lo stile di pagina headings):

* `\chaptermark` usa `\markboth` per impostare:
  * un `{left}` campo che compone CHAPTER . in maiuscolo.
  * un campo {right} che è vuoto (`{}`)
* `\sectionmark` usa `\markright` per impostare il `{right}` campo del segno da comporre, anch'esso in maiuscolo.

Per capire perché `\sectionmark` usa `\markright` possiamo osservare che ogni nuovo `\section` comando dovrebbe:

* inserire un nuovo segno contenente dati per questo `\section` (come il suo titolo e il suo numero).
* ma *non* influenzare i valori dei dati del segno per il corrente `\chapter` in cui quel particolare `\section` comando appare

Per questi motivi, il `\section` comando richiama `\sectionmark` che usa `\markright` per creare un segno `\section`-relativo: aggiorna il `{right}` campo dei dati del segno ma non influisce sul corrente `{left}` valore del campo dei dati del segno che è stato impostato dal corrente `\chapter`.

Nota: il codice sorgente LaTeX contiene l'avvertenza:

> I comandi di marcatura funzionano ragionevolmente bene per i segni di destra “numerati all'interno di” segni di sinistra—ad esempio, il segno di sinistra viene modificato da un comando \chapter e il segno di destra viene modificato da un comando \section. Tuttavia, produce risultati un po' anomali se 2 \markboth si verificano sulla stessa pagina.

**Comandi per la routine di output**

Il `\ps@headings` comando implementa le definizioni dei seguenti comandi

* `\@oddhead`
* `\@oddfoot`
* `\@evenhead`
* `\@evenfoot`

che sono usati dalla routine di output per aggiungere intestazioni e piè di pagina durante la fase finale della composizione della pagina. Per esempio, `book.cls` imposta `\@oddfoot` e `\@evenfoot` al valore `\@empty`, che è definito come `\def\@empty{}`, quindi `\ps@headings` produce piè di pagina vuoti sulle pagine pari e dispari:

```latex
\let\@oddfoot\@empty
\let\@evenfoot\@empty
```

Le intestazioni sono definite come:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
```

dove

* `\leftmark` estrae il `{left}` valore da una `{left}{right}` coppia di segni
* `\rightmark` estrae il `{right}` valore da una `{left}{right}` coppia di segni
* \thepage visualizza il numero di pagina corrente

In sostanza, queste implementazioni di `\@evenhead` e `\@oddhead` producono i seguenti risultati:

* `\@evenhead`: il numero di pagina appare a sinistra dell'intestazione e il contenuto di `\leftmark`, formattato con il comando di font `\slshape`, viene riportato a destra dell'intestazione—lo spazio bianco intermedio è fornito dal molto flessibile `\hfil` glue.
* `\@oddhead`: il contenuto di `\rightmark`, formattato con il comando di font `\slshape`, appare a sinistra dell'intestazione e il numero di pagina corrente è riportato a destra dell'intestazione—di nuovo, lo spazio bianco intermedio è fornito da `\hfil` glue.

Tuttavia, resta una domanda chiave: *quale* `{left}{right}` coppia di segni viene usata da `\leftmark` e `\rightmark`: in altre parole, da dove ricavano i loro valori dei dati di segno?

Come [notato sopra](#filtering) ma [spiegato di seguito](#explainfiltering), durante le fasi finali di composizione della pagina, eventuali segni contenuti nelle pagine del documento vengono “filtrati” e usati per impostare il valore di tre variabili globali di segno: `\botmark`, `\topmark` e `\firstmark`. A causa della [struttura dei segni di LaTeX](#latexs-model-of-headers-and-footers), ciascuna di queste 3 variabili di segno conterrà infine un valore di `{left}{right}` per una qualche coppia di valori `{left}` e `{right}` ed è questa che fornisce la reale `{left}{right}` coppia di segni (campi) per `\leftmark` e `\rightmark`:

* `\leftmark` estrae il `sinistra` valore dalla `{left}{right}` coppia di segni (campi) fornita da `\botmark`
* `\rightmark` estrae il `destra` valore dalla `{left}{right}` coppia di segni fornita da `\firstmark`

Nota `\markboth` e `\markright` può contenere comandi per stilizzare il testo dell'intestazione e del piè di pagina, ad esempio la conversione in maiuscolo.

### Esempi che usano comandi LaTeX di livello inferiore

I seguenti esempi dimostrano come apportare modifiche agli stili di pagina o alle intestazioni e ai piè di pagina ridefinendo alcuni dei comandi LaTeX di basso livello (interni) discussi in questo articolo (quelli che contengono il simbolo @). Non stiamo raccomandando questo metodo per modificare intestazioni e piè di pagina, ma è disponibile per chi ne ha bisogno (ad es. gli autori dei pacchetti). La soluzione preferita per modificare intestazioni e piè di pagina è usare il [`fancyhdr` che fornisce i comandi e le funzionalità necessarie per includere file grafici esterni. L'esempio sopra carica il](https://ctan.org/pkg/fancyhdr?lang=en), che è discusso in un [articolo di supporto di Overleaf](/latex/it/formattazione/02-headers-and-footers.md).

#### Definire uno stile di pagina minimo

L'esempio seguente definisce un nuovo, estremamente minimale stile di pagina chiamato `demostyle` che usa testo statico per definire le intestazioni e i piè di pagina e non si basa sui comandi di sezionamento (`\chapter`, `\section` ecc.) per impostare il contenuto delle intestazioni e dei piè di pagina.

L'esempio inizia cambiando il codice di categoria del `@` carattere a 11 in modo che possa essere usato all'interno dei nomi delle macro. Il `\ps@demostyle` comando implementa il nostro stile di pagina minimale ridefinendo i comandi usati (nella routine di output) per produrre intestazioni e piè di pagina: `\@oddhead`, `\@oddfoot`, `\@evenhead` e `\@evenfoot`. Si noti l' `twoside` opzione nella nostra `\documentclass` dichiarazione—che usa la `article` classe.

```latex
\documentclass[twoside]{article}
\catcode`@=11
\newcommand{\ps@demostyle}{%
\renewcommand\@oddfoot{\hfil Il piè di pagina delle pagine dispari\hfil}%
\renewcommand\@evenfoot{\hfil Il piè di pagina delle pagine pari\hfil}%
\renewcommand\@evenhead{\thepage\hfil L'intestazione delle pagine pari}%
\renewcommand\@oddhead{L'intestazione delle pagine dispari\hfil\thepage}}
\catcode`@=12
\title{Dimostrazione di uno stile di pagina}
\author{Overleaf}
\date{August 2022}
\begin{document}
\pagestyle{demostyle}
\maketitle
\newpage
\section{Introduzione}
\newpage
\section{Altro materiale}
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+new+page+style\&snip=%5Cdocumentclass%5Btwoside%5D%7Barticle%7D%0A%5Ccatcode%60%40%3D11%0A%5Cnewcommand%7B%5Cps%40demostyle%7D%7B%25%0A%5Crenewcommand%5C%40oddfoot%7B%5Chfil+The+odd-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenfoot%7B%5Chfil+The+even-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenhead%7B%5Cthepage%5Chfil+The+even-page+header%7D%25%0A%5Crenewcommand%5C%40oddhead%7BThe+odd-page+header%5Chfil%5Cthepage%7D%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+a+page+style%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bdemostyle%7D%0A%5Cmaketitle%0A%5Cnewpage%0A%5Csection%7BIntroduction%7D%0A%5Cnewpage%0A%5Csection%7BMore+material%7D%0A%5Cend%7Bdocument%7D)

#### Modificare le intestazioni per la classe book

L'esempio seguente modifica le intestazioni per la classe book ridefinendo `\@oddhead` e `\@evenhead` in modo che le intestazioni delle pagine pari e dispari contengano il numero di pagina corrente e il titolo del capitolo. Si noti come il secondo `\chapter` comando usi il titolo del capitolo breve opzionale `[Il titolo breve]` che ora fornisce il testo dell'intestazione, invece del titolo lungo.

`\section` comandi non hanno effetto sul contenuto dell'intestazione perché le nostre ridefinizioni dell'intestazione usano solo `\leftmark` che ottiene i dettagli del capitolo corrente. Per accedere ai dettagli della sezione corrente dovremmo usare `\rightmark` nella definizione di `\@oddhead` e/o `\evenhead`.

```latex
\documentclass{book}
% NB: il codice di categoria di '@' è temporaneamente cambiato in 11
% per abilitarne l'uso nei nomi dei comandi
\catcode `@=11
% Rendere \@oddfoot e \evenfoot equivalenti a \@empty
% per renderli vuoti (empty)
\let\@oddfoot\empty\let\evenfoot\empty
% Ridefinire \@oddhead e \@evenhead
\renewcommand{\@oddhead}{\leftmark\hfil\thepage}
\renewcommand{\@evenhead}{\thepage\hfil\leftmark}
\catcode `@=12
% Usare una dimensione di pagina convenientemente piccola
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memorie di un utente di \TeX{}}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Questa è la prefazione che usa i numeri romani.
\mainmatter
\chapter{Da dove comincio?}
Capitolo 1: un capitolo breve.
\newpage
\section{All'inizio...}
Una sezione.
\chapter[Il titolo breve]{Un capitolo con un titolo molto lungo, che lo rende inadatto alle intestazioni}
\newpage
\section{Un'altra sezione}
Con poco contenuto.
\newpage
\section{Che cos'è, un'altra sezione?}
Anche questa con poco contenuto.
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Changing+headers+for+the+book+class\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%25+Let+%5C%40oddfoot+and+%5Cevenfoot+be+equivalent+to+%5C%40empty%0A%25+to+make+them+blank+%28empty%29%0A%5Clet%5C%40oddfoot%5Cempty%5Clet%5Cevenfoot%5Cempty%0A%25+Redefine+%5C%40oddhead+and+%5C%40evenhead%0A%5Crenewcommand%7B%5C%40oddhead%7D%7B%5Cleftmark%5Chfil%5Cthepage%7D%0A%5Crenewcommand%7B%5C%40evenhead%7D%7B%5Cthepage%5Chfil%5Cleftmark%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cchapter%5BThe+short+title%5D%7BA+chapter+with+a+very+long+title%2C+making+it+unsuitable+for+headers%7D%0A%5Cnewpage%0A%5Csection%7BAnother+section%7D%0AWith+little+content.%0A%5Cnewpage%0A%5Csection%7BWhat%2C+another+section%3F%7D%0AAlso+with+little+content.%0A%5Cend%7Bdocument%7D)

#### Usare i comandi di mark estesi di ε-TeX

Il `libro` la classe usa le seguenti definizioni di `\@evenhead` e `\@oddhead` per produrre intestazioni:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}
```

dove i comandi `\leftmark` e `\rightmark` sono definiti come

```latex
\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty}
\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty}
```

Usando i comandi estesi di ε-TeX, e l'equivalenza tra la classe di mark 0 di ε-TeX e i comandi originali di TeX, possiamo:

* riscrivere `\leftmark` per sostituire `\botmark` con `\botmarks0` equivalente, e
* riscrivere `\rightmark` per sostituire `\firstmark` con `\firstmarks0` equivalente

Queste ridefinizioni producono

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
```

Si noti l'uso di `\relax` per terminare la ricerca di TeX di ulteriori cifre—si può anche sostituire `\relax` con uno spazio da usare come terminatore.

L'esempio seguente produce un output identico alle definizioni originali di `\leftmark` e `\rightmark`.

```latex
\documentclass{book}
% Ridefinire \leftmark e \rightmark per usare
% \botmarks0 e \firstmarks0 rispettivamente
% NB: il codice di categoria di '@' è temporaneamente cambiato in 11
% per abilitarne l'uso nei nomi dei comandi
\catcode `@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
\catcode `@=12
% Usare una dimensione di pagina convenientemente piccola
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memorie di un utente di \TeX{}}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Questa è la prefazione che usa i numeri romani.
\mainmatter
\chapter{Da dove comincio?}
Capitolo 1: un capitolo breve.
\newpage
\section{All'inizio...}
Una sezione.
\newpage
Un'altra sezione.
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+%CE%B5-TeX%E2%80%99s+extended+marks+command\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks0+and+%5Cfirstmarks0+respectively%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cnewpage%0AAnother+section.%0A%5Cend%7Bdocument%7D)

**Note su ε-TeX**

Come [abbiamo osservato sopra](#etex), ε-TeX introduce il `\marks` di TeX:

```latex
\marks n {stuff to store}
```

che estende la caratteristica originale `\mark` del motore TeX di Knuth ed è disponibile in tutti e tre i principali motori TeX: pdfTeX, LuaTeX e XeTeX.

L'implementazione di ε-TeX introduce anche nuove variabili globali di mark `\firstmarks n`, `\botmarks n` e `\topmarks n`: una per ogni classe `n`. Queste variabili di mark basate su classi sono determinate [usando i meccanismi descritti sopra](#pre-output-checks-looking-for-mark-nodes), e possono tutte essere usate nella produzione di intestazioni e piè di pagina.

Si può usare qualsiasi delle $$2^{15}$$ = 32768 classi di mark, da 0 a 32767, all'interno delle ridefinizioni di `\leftmark` o `\rightmark`. Questo presuppone che tu abbia fornito (inserito) dati di mark adatti per la classe di mark scelta, `n`, tramite `\marks n{{left}{right}}`.

Si noti che LuaTeX fornisce $$2^{16}$$ = 65536 classi di mark, con `n` che vanno da 0 a 65535.

**Esempio che usa la classe di mark 10**

Questo esempio dimostra l'uso della classe di mark 10 (scelta casualmente) per creare intestazioni del documento. Il documento di esempio impagina 6 pagine che contengono la sequenza di mark presentata nell' [esempio svolto alla fine di questo articolo](#a-worked-example-to-show-how-tex-engines-determine-values-for-botmark-topmark-and-firstmark). Lo studio di tale esempio mostrerà perché il motore TeX ha selezionato un particolare mark, $$\alpha$$, $$\beta$$, $$\gamma$$ e $$\delta$$, da usare in ciascuna delle intestazioni.

Iniziamo definendo una macro di comodo, `\domark`, che usa `\marks 10` per inserire dati di mark che seguono la `{left}{right}` convenzione LaTeX:

```latex
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
```

I mark di classe 10 vengono resi accessibili al meccanismo di intestazione e piè di pagina di LaTeX ridefinendo `\leftmark` e `\rightmark`—con un po' di informazioni aggiuntive:

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (via \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (via \texttt{\string\firstmarks10})}
```

Dopo aver inserito un numero di mark (di classe 10), il motore TeX (qui, pdfTeX) crea prontamente variabili globali di mark per la classe 10—`\botmarks10`, `\topmarks10` e `\firstsmarks10` quale `\leftmark` e `\rightmark` da usare per produrre le intestazioni.

```latex
\documentclass{book}
% Un breve comando per usare mark con classe 10
% e seguendo la struttura dei mark di LaTeX {left}{right}
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
% Ridefinire \leftmark e \rightmark per usare
% \botmarks10 e \firstmarks10 rispettivamente
\catcode`@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (via \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (via \texttt{\string\firstmarks10})}
\catcode`@=12
\title{Dimostrare i mark migliorati di \(\varepsilon\)-\TeX}
\author{Overleaf}
\date{August 2022}
\begin{document}

Pagina 1: Nessun mark aggiunto, quindi tutte le variabili di mark rimangono nel loro stato inizializzato: vuoto (NULL).

\newpage
Pagina 2: mark \alpha aggiunto a questa pagina tramite

\verb|\domark{$\alpha$-left}{$\alpha$-right}|\domark{$\alpha$-left}{$\alpha$-right}

\newpage
Pagina 3: Nessun nuovo mark aggiunto a questa pagina.

\newpage
Pagina 4: mark \beta seguito da mark \gamma aggiunti a questa pagina tramite

\verb|\domark{$\beta$-left}{$\beta$-right}|

\verb|\domark{$\gamma$-left}{$\gamma$-right}|.
\domark{$\beta$-left}{$\beta$-right}
\domark{$\gamma$-left}{$\gamma$-right}

\newpage
Pagina 5: mark \delta aggiunto a questa pagina tramite

\verb|\domark{$\delta$-left}{$\delta$-right}|
\domark{$\delta$-left}{$\delta$-right}

\newpage
Pagina 6: Nessun mark aggiunto a questa pagina.
\end{document}
```

[Apri questo esempio in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+e-TeX+global+marks+variables\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+A+short+command+to+use+marks+with+class+10%0A%25+and+following+LaTeX%27s+mark+structure+%7Bleft%7D%7Bright%7D%0A%5Cnewcommand%7B%5Cdomark%7D%5B2%5D%7B%5Cmarks+10%7B%7B%231%7D%7B%232%7D%7D%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks10+and+%5Cfirstmarks10+respectively%0A%5Ccatcode%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cbotmarks10%7D%29%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cfirstmarks10%7D%29%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+%5C%28%5Cvarepsilon%5C%29-%5CTeX%E2%80%99s+enhanced+marks%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%0APage+1%3A+No+marks+added+so+all+mark+variables+remain+in+their+initialized+state%3A+empty+%28NULL%29.%0A%0A%5Cnewpage%0APage+2%3A+%24%5Calpha%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%0A%0A%5Cnewpage%0APage+3%3A+No+new+marks+added+to+this+page.%0A%0A%5Cnewpage%0APage+4%3A+%24%5Cbeta%24-mark+followed+by+%24%5Cgamma%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%7C%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%7C.%0A%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%0A%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%0A%0A%5Cnewpage%0APage+5%3A+%24%5Cdelta%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%7C%0A%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%0A%0A%5Cnewpage%0APage+6%3A+No+marks+added+to+this+page.%0A%5Cend%7Bdocument%7D)

Il seguente grafico mostra le intestazioni prodotte da questo esempio:

![Grafico che mostra l'output del codice LaTeX che usa Usare i comandi di mark estesi di ε-TeX](/files/ee9f9745fac407bd80b0c7d847daad506f1ce4d7)

* **Nota**: L'intestazione della pagina 1 viene creata quando tutte e tre le variabili di mark per la classe 10—`\botmarks10`, `\topmarks10` e `\firstsmarks10`—sono vuote. Il risultato finale è che `\rightmark` (per la pagina 1) inserisce solo l'ultimo frammento dell'intestazione: `(tramite \texttt{\string\firstmarks10})`, come mostrato nel grafico sopra.

## Un esempio svolto per mostrare come i motori TeX determinano i valori di \botmark, \topmark e \firstmark

![Db.gif](/files/43b2601588b67acbc04e42451c92832188af3e00)![Db.gif](/files/43b2601588b67acbc04e42451c92832188af3e00) Sembra opportuno replicare l'uso di Knuth dei doppi segni di pericolo inclinati (immagine per gentile concessione di [questo sito web](http://www.truetex.com/db.htm)) perché il materiale è piuttosto di basso livello e “sbircia sotto il cofano”—anche se speriamo che possa interessare ai lettori più intraprendenti che desiderano capire qualche dettaglio in più.

La seguente discussione si basa strettamente sull'ultimo esempio a pagina 258 del [Il TeXbook](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489). Qui, abbiamo modificato e re-impaginato quell'esempio per chi non ha accesso a The TeXbook:

![Una versione modificata e re-impaginata di un esempio da pagina 258 del TeXbook](/files/e4d8e4cd019187dfa59fdd1971df38c9cf79a84c)

La tabella presentata in questo grafico è riprodotta da una fornita da Knuth ma, come l'originale, non c'è spiegazione di come sia stata ricavata. Qui affronteremo questo aspetto per fornire ulteriori dettagli che mostrano come quei valori di `\botmark`, `\topmark` e `\firstmark` siano stati determinati—per ottenere questi dettagli è stato necessario esplorare il codice sorgente di un motore TeX!

Il processo di impostazione dei valori per `\botmark`, `\topmark` e `\firstmark` può essere riassunto in 3 brevi frammenti di pseudocodice come mostrato nel diagramma seguente e nelle successive spiegazioni:

1. Controllo pre-contenuto
2. Ciclo del contenuto
3. Controllo post-contenuto

Nota:

* I test nella fase 1 “Controllo pre-contenuto” e nella fase 3 “Controllo post-contenuto” sono eseguiti una volta per pagina.
* La fase 2 “Ciclo del contenuto” comporta che TeX scorra il contenuto della pagina alla ricerca di nodi di mark e li usi per impostare i valori delle variabili di mark come mostrato.

![Immagine che mostra versioni in pseudocodice del codice usato per impostare i valori delle tre variabili globali di mark usate dai motori TeX](/files/11e16c8abeba75881e5781297cf62d8a3d59e217)

Ogni volta che TeX trova un'interruzione di pagina adatta invia il contenuto di quella pagina per l'elaborazione finale, eseguendo queste (tre) fasi di elaborazione dei mark per ogni pagina del documento. Le fasi di elaborazione etichettate 1, 2 e 3 sono richiamate nel diagramma finale in questa sezione.

Si noti che:

* prima che la prima pagina sia stata elaborata, tutte e tre le variabili globali di mark `\botmark`, `\topmark` e `\firstmark` sono state inizializzate come vuote (NULL).
* i valori finali di `\botmark`, `\topmark` e `\firstmark` determinati alla fine della *precedente* pagina diventano i valori (di input) per l'elaborazione della *dimensione* pagina—quella in elaborazione.

I seguenti frammenti di codice sono ***pseudocodice*** derivati (riassunti) dal codice sorgente reale del motore TeX. L'obiettivo è fornire un riassunto conciso del codice che aiuti a dimostrare i principi chiave coinvolti.

**Fase 1: Controllo pre-contenuto** Prima che TeX esamini il contenuto effettivo della pagina corrente, controlla se il corrente `\botmark` valore—cioè, risultante dalla *precedente* pagina—è vuoto (NULL):

```latex
if(\botmark != NULL)
{
   \topmark = \botmark;
   \firstmark= NULL;
}
```

In questo test, se `\botmark` (dalla *precedente* pagina) è *non* vuoto:

* `\topmark` per la *dimensione* pagina viene impostato al *precedente* della pagina `\botmark` valore
* `\firstmark`, per la *dimensione* pagina (in elaborazione), viene impostato su vuoto (NULL): inizia questa pagina assumendo che non ci siano `\mark` nodi.

Si noti che questo test viene eseguito *una volta* per ogni pagina in elaborazione.

**Fase 2: Ciclo del contenuto** Poi, TeX scorre il contenuto della pagina; parte di quel ciclo include la ricerca di `\mark` nodi:

```latex
if(type(node)==mark_node)
{
   if(\firstmark==NULL)
   {
      \firstmark=node(text);
   }
   \botmark= node(text);
}
```

Questo test viene applicato a ogni nodo di mark individuato all'interno (contenuto in) della pagina corrente. Il test precedente (Fase 1, sopra) potrebbe aver impostato `\firstmark` su vuoto, così il primissimo mark trovato nella pagina corrente diventa il valore di `\firstmark` e `\botmark`. Qualsiasi *successivo* `\mark` nodo rilevato mentre si esegue questo ciclo non cambierà il valore di `\firstmark`, perché non è più vuoto (NULL), ma `\botmark` viene aggiornato—perché questo è lo scopo di `\botmark`: memorizzare l'ultimo `\mark` nodo visto per questa pagina.

**Fase 3: Controllo post-contenuto** Una volta terminato il ciclo sul contenuto della pagina, TeX applica il seguente test finale, eseguito anch'esso una volta per pagina:

```latex
if((\topmark != NULL)&&(\firstmark==NULL))
{
	\firstmark= \topmark;
}
```

* Se `\topmark` non è vuoto (NULL) sappiamo, dalla Fase 1, che `\botmark` perché la pagina precedente non era vuota (NULL).
* Se `\firstmark` è ancora vuoto, allora non abbiamo visto alcun `\mark` nodi perché il test nel Passo 2 non è stato attivato; di conseguenza, `\firstmark` è impostato al valore di `\topmark` che è anche il valore di `\botmark` dalla pagina precedente.

Dopo l'applicazione sequenziale di questi tre passaggi a tutte le 6 pagine del nostro esempio, i valori di `\botmark`, `\topmark` e `\firstmark` sono derivati usando le transizioni mostrate nel diagramma seguente, in cui:

* i rettangoli arrotondati azzurri rappresentano i valori finali delle variabili di mark per ciascuna pagina
* i quadrati arrotondati grigio chiaro rappresentano i valori intermedi che emergono durante l'elaborazione
* le frecce etichettate rappresentano i cambiamenti nei valori delle variabili di marker secondo i passi 1, 2 o 3 nel diagramma sopra—oppure un valore non è stato modificato da nessuno dei passi; etichettate “nessun cambiamento”.

Il seguente diagramma mostra come i tre frammenti di pseudocodice generano i valori finali di `\botmark`, `\topmark` e `\firstmark` elencati nella tabella contenuta a pagina 258 di The TeXbook.

![Un diagramma di transizione a corredo dell'esempio di pagina 258 del TeXbook, che mostra le transizioni interne mentre alle variabili globali di mark vengono assegnati i loro valori](/files/0742e59d7f086411fbc96438777f47d9f3825587)


---

# 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/23-how-does-latex-typeset-headers-and-footers.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.
