Re: modificare la struttura dell’indice

#34174
Up
0
Down
::

Perfetto, ti sono debitore!!!!

Adesso proviamo a spiegare l’arcano mistero. In verde ci sono le parti della definizione, in blu altro codice per le spiegazioni.

Sezione 1
`\makeatletter
\let\@@l@chapter\l@chapter`
Solito cappello per poter usare i nomi interni. Il comando \l@chapter è quello responsabile della produzione delle righe dell’indice: la riga
`\contentsline{chapter}{}{}`
viene trasformata in
`\l@chapter{}{}`
Si tratta adesso di ridefinire \l@chapter; le righe nel .toc sono di due tipi:
`\contentsline{chapter}{Introduzione}{iii}
\contentsline{\numberline {1}Titolo}{1}
`
cioè quando il capitolo è numerato c’è un comando \numberline.

Sezione 2
`\def\l@chapter#1#2{\dopage{#2}\checknumberline#1\numberline{}\@nil}`
Ecco la ridefinizione di \l@chapter; memorizziamo il secondo argomento (cioè il numero di pagina) passandolo a \dopage, il primo viene invece trattato con \checknumberline.

Sezione 3
`\def\checknumberline#1\numberline#2#3\@nil{% `
Esaminiamo la definizione di \checknumberline, prima la parte dei parametri. Il comando ha tre argomenti; il primo è delimitato da \numberline, il secondo non è delimitato e il terzo è delimitato da \@nil. Vediamo che cosa si trova davanti TeX nei due casi di prima.

Caso del capitolo non numerato:
`\checknumber Introduzione\numberline{}\@nil`
Qui il primo argomento di \checknumber è “Introduzione”, il secondo è la coppia di graffe mentre il terzo è vuoto.

Caso del capitolo non numerato:
`\checknumber\numberline{1}Titolo\numberline{}\@nil`
Qui il primo argomento è vuoto, il secondo è “{1}” e il terzo è “Titolo\numberline{}”.

Sezione 4
`\def\checknumberline#1\numberline#2#3\@nil{%
\def\next{#1}%
\ifx\next\@empty % \numberline is present
\addpenalty{-\@highpenalty}%
\begin{center}\bfseries\let\numberline\@gobble
\chaptername\ #2\\
% \hbox to\hsize{\hss#3\hss\llap{\keptpage}}
#3
\end{center}\par
\penalty\@highpenalty
\else % \numberline is not present
\@@l@chapter{#1}{\keptpage}
\fi
}`
Ora vediamo che cosa fa \checknumberline dei suoi argomenti. Per prima cosa definisce \next come il primo argomento; poi guarda se questo argomento è vuoto.

Se il primo argomento è vuoto, siamo nel caso di un capitolo numerato. Si emette una penalità per facilitare un cambio pagina prima della riga nell’indice poi si apre un ambiente center nel quale imponiamo il carattere nero e ridefiniamo (localmente) \numberline in modo che quel pezzo che rimane nel terzo argomento si espanda a niente. Nella prima riga di center mettiamo “\chaptername\ #2”, cioè “Capitolo 1” nel caso in esame; nella seconda riga mettiamo #3 (si veda più sotto per l’alternativa commentata).

Chiudiamo center ed emettiamo un \par per azzerare i parametri di costruzione del paragrafo, è questo il trucco che permette i rientri delle righe seguenti relative alle sezioni. Poi una penalità alta per scoraggiare un cambio pagina.

Se il primo argomento non è vuoto, siamo nel caso di un capitolo non numerato e quindi eseguiamo \@@l@chapter{#1}{\keptpage}; \keptpage si espande al numero di pagina che avevamo passato a \dopage; in altre parole, facciamo lo stesso lavoro che farebbe \l@chapter originale.

Sezione 5
`\def\dopage#1{\def\keptpage{#1}}
\makeatother`
Questa è appunto la definizione di \dopage che memorizza in \keptpage il numero di pagina. Poi chiudiamo la faccenda con il solito \makeatother, cioè “fine dell’incantesimo”.

Sezione 6
Nella forma alternativa, abbiamo, invece che #3 nella seconda riga del center,
`\hbox to\hsize{\hss#3\hss\llap{\keptpage}}`
Una riga larga come la giustezza, in cui il titolo del capitolo è centrato e il numero di pagina è allineato al margine destro.

Ciao
Enrico

Go to top