Re: Come viene creato il sommario.

#18673
Up
0
Down
::

Sto cercando di capire come effettivamente viene creato il sommario per poter poi nitervenire e modificare ciò che mi serve.

alla chiamata di \tableofcontents nella classe che sto modificando (articoli delle Wiley per Phisica Status solidi A) corrisponde:
`\\newcommand\tableofcontents{%
\@starttoc{toc}\contentsname%
}`
che richiama il comando `\@starttoc ` passando due variabili toc e \contentsname.

\contentsname è definito come
`\newcommand\contentsname{Contents}
`e quindi viene passato il valore “Contents”

Veniamo quindi alla definizione di starttoc che è definito come:
`\def\@starttoc#1#2{\begingroup
\setTrue{#1}%
\par\removelastskip\vskip\z@skip
\@startsection{}{\@M}{\z@}{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}{\contentsnamefont}{#2}%
\ifx\contentsname#2%
\else \addcontentsline{toc}{section}{#2}\fi
\makeatletter
\@input{\jobname.#1}%
\if@filesw
\@xp\newwrite\csname tf@#1\endcsname
\immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
\fi
\global\@nobreakfalse \endgroup
\addvspace{32\p@\@plus14\p@}%
\let\tableofcontents\relax
}`
e qui cominciano le note dolenti.
\starttoc richiede due variabili (toc e Contents)
comincia con l’eseguire \setTrue{toc}
e in base alla sua definizione
`\newcommand{\setTrue}[1]{%
\expandafter\let\csname ?@#1\endcsname\@True
`crea il comando \@toctrue che può essere usato nelle condizioni \if \fi

Non direi. Crea il comando \?@toc che vale \@True; il comando \?@toc non può essere usato direttamente, ma solo come \csname ?@toc\endcsname

crea un nuovo paragrafo, rimuove gli ultimi skip (ciò rimuove eventuali glue presenti) e crea uno skip di \z (cioé 0 pt) è giusto?

Rimuove l’ultimo spazio verticale; se si sono usati sempre comandi \addvspace, vengono rimossi tutti. Se ne crea uno nullo per creare un punto dove dividere le pagine.

Richiama dunque il comando \@startsection con le sue 6 variabili (ci torniamo dopo).
Poi abbiamo una scelta condizionale
se il contenuto di \contentsname è uguale a quello dell’argomento #2 (come nel nostro caso) allora non far nulla altrimenti aggiungi una linea nel file toc.
abilitiamo @ e inseriamo il file nome del file.toc
il successivo \if mi è oscuro lo ammetto. 😳

Serve per cominciare a scrivere il file .toc; lo switch è falso se si è dato il comando \nofiles.

Chiude poi il gruppo, aggiunge uno spazio con la tolleranza e rende il comando \tableofcontents equivalente a \relax.

Torniamo alla definizione di \@startsection che è definito come:
`\def\@startsection#1#2#3#4#5#6{%

}`
E qui sono completamente perso. Capisco che il comando vuole 6 parametri… che sono {} \@M \z@ {-3.5ex \@plus -1ex \@minus -.2ex} {2.3ex \@plus.2ex}{\contentsnamefont}
che vengono utilizzati dal comando
`\def\@sect#1#2#3#4#5#6[#7]#8{%

\@xsect{#5}}`
Ma faccio fatica a seguire il funzionamento. Vorrei capire per poi poter cambiare la formattazione. (Ho bisogno di fare due indici con stili diversi, uno per l’interno della rivista e uno per la quarta di copertina).
Vi ringrazio per l’aiuto. Tra qualche giorno vi sottoporrò una bozza della rivista.

Lascia perdere di seguire l’espansione di \@startsection, l’importante è sapere che cosa se ne fa dei suoi argomenti.
`\@startsection{nome}{livello}{rientro}{spazio prima}{spazio dopo}{stile}`
“nome” è un contatore, nel nostro caso infatti è lasciato vuoto

“livello” è il livello della sezione (1 per \section, 2 per \subsection, eccetera); loro lo impostano a 10000, in modo che non sia influenzabile da eventuali modifiche di secnumdepth o tocdepth da parte degli autori dei documenti: sarà sempre più di quello che a un autore possa venire in mente di fissare

“rientro” è la distanza dell’intestazione dal margine sinistro

“spazio prima” è lo spazio bianco che precede l’intestazione; se l’argomento passato è negativo, come in questo caso, il rientro è annullato nel primo capoverso che segue

“spazio dopo” è lo spazio bianco che segue l’intestazione; però, se l’argomento è negativo, l’intestazione sarà “in corpo” e non su una riga a sé stante; non è questo il caso

“stile” sono le istruzioni per la composizione del testo dell’intestazione, di solito comandi per la scelta di varianti del carattere da usare

Quello che sembra un “settimo” argomento a \@startsection è in realtà l’argomento non opzionale per \@sect, per la precisione l’ottavo, che contiene l’intestazione vera e propria. Non serve sapere che cosa fa \@sect, solo che si occupa di comporre l’intestazione secondo le indicazioni fornite da \@startsection

Ciò che ti conviene fare, secondo me, è definire un comando \generaltableofcontents, sulla linea di questo, con le opportune modifiche.

Ciao
Enrico

Go to top