Ciao a tutti.
Ultimamente sto cercando di realizzare una classe per le tesi del dottorato di ricerca in Fisica dell’Università la “Sapienza” di Roma. Vorrei dedicare il topic allo sviluppo di questa classe. Ringrazio fin da subito chiunque mi aiuti nella risoluzione dei problemi che via via si presenteranno.
Primo problema: memoria esaurita se uso contemporaneamente babel e il comando \tableofcontents.
Esempio minimale:
`
\documentclass{sapthesis}
\usepackage[italian,english]{babel}
\begin{document}
\tableofcontentsciao ciao
\end{document}
`Errore restituito:
`
! TeX capacity exceeded, sorry [input stack size=5000].
\protect ->\noexpand \protect
\noexpand
l.6 \tableofcontents
`Credo si tratti di una ridefinizione di qualche comando, ma non riesco a capire quale.
Il comando \tableofcontents nella classe book si preoccupa da sé di definire i marcatori; quella ridefinizione di \chapter* non va affatto bene. Se ti serve solo per mettere nell’indice la bibliografia, carica il pacchetto tocbibind. Se poi vuoi anche l’introduzione non numerata nell’indice, definisciti un comando \introduzione che usi \chapter* e \markboth.
Non capisco molto bene che cosa vuoi ottenere con le definizioni del tipo
`\renewcommand{\title}[1]{\ifx\@empty#1\@empty\else\def\@title{#1}\fi}`
Se infatti dai \title{}, il risultato è di non ridefinire \@title. Infatti al posto di #1 non viene messo niente; dunque TeX confronta \@empty con \@empty e il test \ifx è vero, quindi TeX non fa assolutamente nulla, perché prima di \else non c’è altro.
La definizione iniziale di \@title è di dare un errore se non si dichiara un titolo; \@author invece dà un avviso. Questi due dovrebbero rimanere come sono (titolo e autore sono richiesti, immagino). Per gli altri puoi fare come nel seguente schema:
`\newcommand\@cycle{\ClassWarningNoLine{sapthesis}{You need to specify the Ph.D. cycle}}
\newcommand{\cycle}[1]{\renewcommand\@cycle{#1}}`
Così non c’è bisogno di quei test con \@ifundefined. O, se vuoi essere più cattivo, userai \ClassError, ma non mi sembra il caso.
Ciao
Enrico