OldClaudio ha scritto
Non ti basterebbe rendere \capo equivalente a \section e \punto equivalente a \subsection?
egreg9 ha scritto:
Ma perché non usare titlesec e modificare \section e \subsection?
si, forse è una soluzione più praticabile per un neofita. ci farò delle prove. grazie.
egreg9 ha scritto:
… aggiungi prima di \makeatother la magia …
la magia funziona. potresti dirmi in due parole cosa fa il comando \@gobble ? googlando non sono riuscito a trovare nulla di immediatamente esplicativo. Grazie.
Fra i suoi vari compiti il comando \@startsection ha la responsabilità di passare il titolo a un’altra macro in modo che questo titolo possa essere usato per la testatina. Lo fa eseguendo l’istruzione
`\csname
dove
`\@startsection{capo}{1}{1em}{\baselineskip}{-2em}{\normalfont\normalsize\bfseries}{Premessa}`
e quindi, fra le altre cose, viene eseguito
`\csname capomark\endcsname{Premessa}`
La costruzione \csname capomark\endcsname è equivalente a \capomark se questo comando è definito, a \relax se \capomark non è definito. Per questo trovavi il “raddoppiamento”: nel tuo codice non c’era alcuna definizione di \capomark.
La soluzione di scrivere \let\capomark\@gobble è quasi equivalente a
`\newcommand{\capomark}[1]{}`
cioè \capomark semplicemente butta via il suo argomento. Infatti la definizione di \@gobble è
`\newcommand{\@gobble}[1]{}`
Con \let invece di \newcommand si risparmia un po’ di memoria.
Nel nucleo di LaTeX si trova infatti
`\let\sectionmark\@gobble
\let\subsectionmark\@gobble
\let\subsubsectionmark\@gobble
\let\paragraphmark\@gobble
\let\subparagraphmark\@gobble`
Sono poi le classi a definire come preferiscono i comandi \sectionmark e così via. La classe article definisce solo \sectionmark.
Ciao
Enrico