::
`\setcounter{tocdepth}{1}
\tableofcontents
…
\setcounter{tocdepth}{3}
\tableofcontents`
Sarà meglio vedere perché non funziona. Il file .toc viene prodotto solo quando è presente il comando \tableofcontents; questo comando fa le seguenti cose:
1 – legge (tramite \input), se esiste, il file \jobname.toc (\jobname sta per il nome del file .tex principale);
2 – durante questa lettura compila l’indice, omettendo tutti i riferimenti la cui “profondità” ecceda il valore di tocdepth;
3 – alla fine della lettura/composizione dell’indice, ordina che sia aperto in scrittura il file \jobname.toc e questa operazione crea un file \jobname.toc vuoto, che prende il posto del precedente.
Va poi tenuto presente che il file .toc viene effettivamente scritto solo durante l’esecuzione di \end{document}, quando LaTeX legge il file .aux dove sono contenuti anche i comandi \@writefile{toc}{…}.
È chiaro adesso, spero, perché due comandi \tableofcontents producono un effetto inatteso: il primo produce effettivamente l’indice, ma azzera anche il contenuto del .toc; quando viene eseguito il secondo \tableofcontents, il file .toc è del tutto vuoto.
Il pacchetto \shorttoc mette a disposizione il comando \shorttableofcontents che funziona più o meno come \tableofcontents, ma si limita a leggere il .toc con la profondità data come secondo argomento (il primo è il titolo da dare a questo indice). La documentazione specifica chiaramente che questo comando deve comparire prima del comando \tableofcontents, che a sua volta deve essere presente nel documento. Se non ci fosse, o se \shorttableofcontents (abbreviabile in \shorttoc) venisse dopo, saremmo nella situazione descritta prima: il .toc sarebbe inesistente oppure vuoto, rispettivamente.
Ciao
Enrico