Re: Numerazione pagine in fancyheader

#20326
Up
0
Down
::

Confermo che funziona perfettamente!

Bene, adesso spieghiamo come funziona.
`\makeatletter
\renewcommand{\frontmatter}{%
\cleardoublepage\@mainmatterfalse
\pagenumbering{smallRoman}}`
Qui c’è poco di importante: la definizione usuale di \frontmatter è la stessa solo che invece di \pagenumbering{smallRoman} c’è \pagenumbering{roman}. Si potrebbe pensare di scrivere semplicemente \pagenumbering{Roman}, ma le cifre maiuscole sono pesanti. Meglio rimpicciolirle.
`\def\smallRoman#1{\expandafter\@smallRoman\csname c@#1\endcsname}
\def\@smallRoman#1{\@smrc{\expandafter\@slowromansmallcap\romannumeral #1@}}`
Niente di particolare nemmeno qui: sono i soliti comandi analoghi a \arabic, \roman, eccetera (livello utente) e a \@arabic, \@roman, eccetera (livello interno).
`\DeclareRobustCommand{\@smrc}[1]{%
\begingroup$\m@th$\fontsize{\sf@size}{\sf@size}\selectfont#1\endgroup}`
Definisco un comando robusto, perché questo comando \@smrc passa attraverso \write e quindi occorre proteggerlo. L’argomento viene composto in un gruppo in un font ridotto rispetto al contesto; la formula vuota serve per insegnare a LaTeX quali sono le grandezze dei font delle formule; a questo punto posso usare \sf@size (il corpo usato per apici e pedici) come argomento di \fontsize (c’è anche un secondo argomento, non ha importanza che dimensione si usa). Con \selectfont il font è attivato.
`\def\@slowromansmallcap#1{\ifx @#1% then terminate
\else
\if i#1I\else
\if v#1V\else
\if x#1X\else
\if l#1L\else
\if c#1C\else
\if d#1D\else
\if m#1M\else
#1\fi\fi\fi\fi\fi\fi\fi
\expandafter\@slowromansmallcap
\fi
}
\makeatother`
Questo è copiato dall’analogo comando per le cifre romane maiuscole. Supponiamo che foo sia un contatore il cui valore attuale è 14 e vediamo l’espansione di \smallRoman{foo} (ogni riga è l’espansione della precedente; trascuro quella di \@smrc, perché in un \write non viene espanso mai):
`\smallRoman{foo}
\expandafter\@smallRoman\csname c@foo\endcsname
\@smallRoman\c@foo
\@smrc{\expandafter\@slowromansmallcap\romannumeral\c@foo @}
\@smrc{\@slowromansmallcap xiv@}`
A questo punto entra in azione \@slowromansmallcap che esamina il primo token che segue: è x che viene trasformato in X, poi viene chiamato di nuovo \@slowromansmallcap e così via fino a trovare @ che termina la ricorsione. Perciò l’espansione finale è
`\@smrc{XIV}`
In effetti, quando si dà \label{bar} a pagina 14, nel file .aux comparirà \@smrc{XIV}.

È importante, in queste cose, che i comandi siano “completamente espandibili”; nel file .aux deve andare non il riferimento al contatore, ma al suo valore.

Toptesi usa un altro sistema, che però è incompatibile con altri pacchetti, per esempio lipsum.

Ciao
Enrico

Go to top