Re: Numerazione capitoli

#13459
Up
0
Down
::

Se io inserisco prima di ogni capitolo di Levi:
`\chapter*{Titolo di Levi}
\addcontentsline{toc}{chapter}{Titolo di Levi}`
Funziona tutto (cioè non compare “Capitolo x”), ma il problema rimanente è che nelle testatine continua ad essere riportato il titolo del capitolo precedente (quello di commento scritto da me).

`\chapter*{Titolo di Levi}
\markboth{Titolo di Levi}{Titolo di Levi}
\addcontentsline{toc}{chapter}{Titolo di Levi}`
A questo punto conviene definire un comando apposito:
`\newcommand{\levichapter}[1]{\chapter*{#1}
\markboth{#1}{#1}
\addcontentsline{toc}{chapter}{#1}}`
Nel caso tu dovessi usare titoli abbreviati nelle testatine occorre qualcosa di più
`\newcommand{\levitest}{}
\newcommand{\leviempty}{}
\newcommand{\levichapter}[2][]{\chapter*{#2}
\renewcommand{\levitest}{#1}
\ifx\levitest\leviempty
\markboth{#2}{#2}
\else
\markboth{#1}{#1}
\fi
\addcontentsline{toc}{chapter}{#2}}`
In questo modo puoi scegliere una delle due forme seguenti
`\levichapter{Titolo}
\levichapter[Titolo breve]{Titolo lungo}`
Nel secondo caso avrai il titolo breve nelle testatine, quello completo nell’intestazione del capitolo e nell’indice.

Nota: non è il codice più efficiente possibile, ma almeno si capisce abbastanza ciò che fa. Sapendo che \markboth{A}{B} mette nella testatina sinistra “A” e in quella destra “B” (se non c’è una sezione che emette il comando \markright), ho definito il comando con un argomento opzionale che è normalmente vuoto. Confronto con l’argomento eventualmente dato (\ifx\levitest\leviempty); se l’argomento opzionale è presente e non vuoto, viene emesso il comando \markboth{arg opz}{arg opz}, altrimenti viene emesso il comando \markboth{titolo}{titolo} come nella definizione del comando semplificato proposto prima.

Una soluzione efficiente usa il comando interno \@dblarg
`\makeatletter
\def\levichapter{\@dblarg\@levichapter}
\def\@levichapter[#1]#2{\chapter*{#2}
\markboth{#1}{#1}
\addcontentsline{toc}{chapter}{#2}}
\makeatother`
Una chiamata come \levichapter[A]{B} si espande come
`\@dblarg\@levichapter[A]{B}`
In tal caso \@dblarg “vede” la parentesi quadra, si toglie di mezzo e non fa nulla; con una chiamata come \levichapter{C}, l’espansione è
`\@dblarg\@levichapter{C}`
Qui \@dblarg non trova la parentesi quadra e quindi inserisce “[C]” fra “\@levichapter” e “{C}”, ottenendo la lista di token
`\@levichapter[C]{C}`
che è ciò che si desidera

Ciao
Enrico

Go to top