- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 18 anni, 10 mesi fa da .
-
Topic
-
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
crea un nuovo paragrafo, rimuove gli ultimi skip (ciò rimuove eventuali glue presenti) e crea uno skip di \z (cioé 0 pt) è giusto?
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. 😳
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{%
\if@noskipsec \leavevmode \fi
\par \@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi \if@nobreak \everypar{}\else \addpenalty\@secpenalty\addvspace\@tempskipa\fi \@ifstar{\@dblarg{\@sect{#1}{\@m}{#3}{#4}{#5}{#6}}}% {\@dblarg{\@sect{#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{% \ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\if@trailingperiod
\protect\numberline{\csname the#1\endcsname.}%
\else
\protect\numberline{\csname the#1\endcsname}%
\fi
\fi
#8}%
\else
\def\@svsechd{%
#6{\hskip #3\relax
\@svsec #8}%
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\if@trailingperiod
\protect\numberline{\csname the#1\endcsname.}%
\else
\protect\numberline{\csname the#1\endcsname}%
\fi
\fi
#8}}%
\fi
\@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.
- Devi essere connesso per rispondere a questo topic.