[RISOLTO] definizione di \tableofcontents

  • Creatore
    Topic
  • #20143
    Up
    0
    Down
    ::


    Ciao a tutti,
    dovrei creare molti riferimenti ai numeri di sezione e ai rispettivi titoli. Dato che queste informazioni vengono salvate nel file *.toc pensavo di riutilizzare parte del comando \tableofcontents e modificarlo.
    Per sapere se quello che ho in mente sia fattibile, mi piacerebbe dare un’occhiata alla definizione del comando \tableofcontents, ma non so dove trovarla.
    Sapreste darmi una indicazione?
    Grazie

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #20144
      Up
      0
      Down
      ::

      Ciao a tutti,
      dovrei creare molti riferimenti ai numeri di sezione e ai rispettivi titoli. Dato che queste informazioni vengono salvate nel file *.toc pensavo di riutilizzare parte del comando \tableofcontents e modificarlo.
      Per sapere se quello che ho in mente sia fattibile, mi piacerebbe dare un’occhiata alla definizione del comando \tableofcontents, ma non so dove trovarla.
      Sapreste darmi una indicazione?

      Il comando \tableofcontents, essenzialmente, equivale a \input{.toc}. Il lavoro lo fa il comando \contentsline, che a sua volta ne richiama altri.

      Puoi provare con questa magia:
      `\makeatletter
      \newcommand{\sectionwithref}[1]{\def\@thislabel{#1}\@dblarg{\@sectionwithref}}
      \def\@sectionwithref[#1]#2{%
      \section[#1]{#2}\expandafter\label\expandafter{\@thislabel}%
      \global\@namedef{titleref@\@thislabel}{#2}%
      \global\@namedef{abbrtitleref@\@thislabel}{#1}}
      \newcommand\titleref[1]{\@nameuse{titleref@#1}}
      \newcommand\abbrtitleref[1]{\@nameuse{abbrtitleref@#1}}
      \makeatother`
      L’uso è simile a quello di \section (ma non c’è la variante *); per introdurre una sezione scrivi cose del tipo
      `\sectionwithref{pippo}{Titolo della sezione}
      \sectionwithref{pluto}[Titolo breve]{Titolo lunghissimo di questa sezione}`
      dove il primo argomento è l’etichetta (corrisponde al solito \label). Se ti devi riferire al numero della sezione, usi semplicemente \ref{pippo}; se vuoi il titolo breve usi \abbrtitleref{pippo}, se vuoi il titolo lungo usi \titleref{pippo}.

      Nel caso della prima sezione, titolo lungo e breve coincidono; con \abbrtitleref{pluto}, invece, ottieni “Titolo breve” e con \titleref{pluto} ottieni il titolo lungo.

      Ciao
      Enrico

    • #20145
      Up
      0
      Down
      ::


      Sono sinceramente impressionato.
      Grazie per la risposta

    • #20146
      Up
      0
      Down
      ::

      Sono sinceramente impressionato.

      Ti assicuro che non è poi così difficile 🙂

      Vediamo come funziona: \sectionwithref è una macro con un solo argomento, anche se poi l’uso è come se fosse con un argomento obbligatorio, uno opzionale e un altro obbligatorio.

      Il lavoro di \sectionwithref è di raccogliere il primo argomento e immagazzinarlo in una macro per l’uso successivo. Poi chiama \@dblarg{\@sectionwithref}, un trucco per fare in modo che se non c’è l’argomento opzionale, sia implicitamente uguale a quello obbligatorio.

      Adesso definiamo la macro più importante, \@sectionwithref’; l’argomento “opzionale” è #1, mentre quello “obbligatorio” è #2. La prima cosa che si fa è di cominciare una sezione e definire l’etichetta con
      `\section[#1]{#2}\label{pippo}`
      (qui assumo che l’etichetta sia “pippo”).

      Poi definisco il comando \titleref@pippo che si espande al titolo lungo (#2) e analogamente il comando \abbrtitleref@pippo.

      A questi comandi non ci si riferisce direttamente, ma vengono chiamati con \titleref{pippo} e \abbrtitleref{pippo}.

      Ciao
      Enrico

    • #20147
      Up
      0
      Down
      ::


      Cortese e puntuale nella spiegazione.

Visualizzazione 3 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top