tocloft… e indice elaborato

  • Creatore
    Topic
  • #25374
    Up
    0
    Down
    ::


    Ciao a tutti.
    Ultimo problema (spero), con cui tediarvi 😕
    Il mi libro degli atti del convegno, in 17×24 cm.Ho sistemato più o meno tutto, prendendo pezzi qua e la. Ora devo formattare in maniera accettabile il toc.
    il codice che uso è il seguente:
    `
    \documentclass[10pt, twoside]{book}
    ….
    \usepackage{tocloft}
    ….
    \newtoks\auth@toks\newtoks\affil@toks\newtoks\authN@toks\newtoks\KeyW@toks

    \newcommand{\Author}[3]{% per inserire gli autori + index
    \auth@toks=\expandafter{\the\auth@toks\@authoraff{#1}{#2 #3}, }%
    \authN@toks=\expandafter{\the\authN@toks {#2 #3}, } %autore senza lettera in apice
    \index{#3@\textit{#3, #2}}
    }
    \newcommand{\LastAuthor}[3]{% per inserire l'ultimo autore + index
    \auth@toks=\expandafter{\the\auth@toks\@authoraff{#1}{#2 #3}}%
    \authN@toks=\expandafter{\the\authN@toks {#2 #3}} %aut0ore senza lettera in apice
    \index{#3@\textit{#3, #2}}
    }
    \newcommand{\Address}[2]{% indirizzo affiliazione
    \affil@toks=\expandafter{\the\affil@toks\@affil{#1}{\parbox[t]{11cm}{#2}}}%
    }
    \newcommand{\Keywords}[1]{% keywords
    \KeyW@toks= {#1}}

    %ambiente testo abstract
    \newenvironment{AmbAbstract}{\vspace{0,3cm}}{\vspace{0,3cm} \clearpage}
    \newcommand{\TxAbstract}[1]{\begin{AmbAbstract} {#1} \end{AmbAbstract}}

    %struttura per formattazione autori, keywords e address
    \def\LTabstract{\auth@toks{}\affil@toks{}}
    \def\endLTabstract{\vbox{
    {\noindent\textbf{Autori:} {\normalsize\itshape\parbox[t]{11cm} {\the\auth@toks}}\par} %%autori
    {\addtocontents{toc}{di \protect{\the\authN@toks}}} %-aggiungo gli autori al toc…
    \vspace{0,3 cm}

    {\small\the\affil@toks\par}
    \vspace{0,3cm}
    {\noindent \textbf{Keywords:} \the\KeyW@toks\par}
    %\box\abs@box}\vspace{8ex plus 4ex minus 2ex}\goodbreak}
    }}

    \def\@authoraff#1#2{{#2}\,\textsuperscript{\itshape#1}}
    \def\@affil#1#2{\textsuperscript{\itshape#1}\ #2\par\medskip}

    \newcommand{\titolo}[1]{\section[#1]{#1}} %comando x inserire il titolo
    \newcommand{\paragrafi}[1]{\subsubsection{#1}} %paragrafi
    `
    che poi, si traduce in tex così:`\titolo{titolo dell'abstrac}
    \begin{LTabstract}

    \Author{a}{C.}{tizio}
    \LastAuthor{b}{S.}{semprionio}
    \Address{a}{Università di fantasia}
    \Keywords{pizza}
    \end{LTabstract}

    \TxAbstract{
    \paragrafi{Abstract}
    la pizza è buona,,, }`
    Nell’insieme non viene male, devo dire.
    Quello di cui avrei bisogno è un aiutino per sistemare il TOC. A parte la formattazione, ho già dato un occhio a tocloft, e credo di farcela, quello che mi servirebbe è una cosa del genere:
    ` A.1 titolo titolo titolo di tizio, caio e semprioni ………………………. 1 `
    In sostanza, per come è ora mi stampa già il titolo, ma io vorrei aggiungere gli autori.
    Ho già visto che basta fare una cosa del tipo \section[titolo e autori]{titolo} ma vorrei sapere se fosse possibile agire sul codice e recuperare gli autori dal \the\auth@toks, senza dover rivedere tutti gli abstract (sono 180), per aggiungere gli autori nel titolo a mano. Quindi? Superguru ? Pensavo di ringraziare ufficilmente il GUiT nel libro..
    Ciao e Grazie!
    Ho visto che c’è il comando \addtocontents ma mi aggiunge i nomi sotto, dopo il numero di pagina. Non è un granche… 😳 😥

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #25375
      Up
      0
      Down
      ::

      Ciao a tutti.
      Ultimo problema (spero), con cui tediarvi 😕
      Il mi libro degli atti del convegno, in 17×24 cm.Ho sistemato più o meno tutto, prendendo pezzi qua e la. Ora devo formattare in maniera accettabile il toc.
      il codice che uso è il seguente:
      `
      \documentclass[10pt, twoside]{book}
      ….
      \usepackage{tocloft}
      ….
      \newtoks\auth@toks\newtoks\affil@toks\newtoks\authN@toks\newtoks\KeyW@toks

      \newcommand{\Author}[3]{% per inserire gli autori + index
      \auth@toks=\expandafter{\the\auth@toks\@authoraff{#1}{#2 #3}, }%
      \authN@toks=\expandafter{\the\authN@toks {#2 #3}, } %autore senza lettera in apice
      \index{#3@\textit{#3, #2}}
      }
      \newcommand{\LastAuthor}[3]{% per inserire l'ultimo autore + index
      \auth@toks=\expandafter{\the\auth@toks\@authoraff{#1}{#2 #3}}%
      \authN@toks=\expandafter{\the\authN@toks {#2 #3}} %aut0ore senza lettera in apice
      \index{#3@\textit{#3, #2}}
      }
      \newcommand{\Address}[2]{% indirizzo affiliazione
      \affil@toks=\expandafter{\the\affil@toks\@affil{#1}{\parbox[t]{11cm}{#2}}}%
      }
      \newcommand{\Keywords}[1]{% keywords
      \KeyW@toks= {#1}}

      %ambiente testo abstract
      \newenvironment{AmbAbstract}{\vspace{0,3cm}}{\vspace{0,3cm} \clearpage}
      \newcommand{\TxAbstract}[1]{\begin{AmbAbstract} {#1} \end{AmbAbstract}}

      %struttura per formattazione autori, keywords e address
      \def\LTabstract{\auth@toks{}\affil@toks{}}
      \def\endLTabstract{\vbox{
      {\noindent\textbf{Autori:} {\normalsize\itshape\parbox[t]{11cm} {\the\auth@toks}}\par} %%autori
      {\addtocontents{toc}{di \protect{\the\authN@toks}}} %-aggiungo gli autori al toc…
      \vspace{0,3 cm}

      {\small\the\affil@toks\par}
      \vspace{0,3cm}
      {\noindent \textbf{Keywords:} \the\KeyW@toks\par}
      %\box\abs@box}\vspace{8ex plus 4ex minus 2ex}\goodbreak}
      }}

      \def\@authoraff#1#2{{#2}\,\textsuperscript{\itshape#1}}
      \def\@affil#1#2{\textsuperscript{\itshape#1}\ #2\par\medskip}

      \newcommand{\titolo}[1]{\section[#1]{#1}} %comando x inserire il titolo
      \newcommand{\paragrafi}[1]{\subsubsection{#1}} %paragrafi
      `
      che poi, si traduce in tex così:`\titolo{titolo dell'abstrac}
      \begin{LTabstract}

      \Author{a}{C.}{tizio}
      \LastAuthor{b}{S.}{semprionio}
      \Address{a}{Università di fantasia}
      \Keywords{pizza}
      \end{LTabstract}

      \TxAbstract{
      \paragrafi{Abstract}
      la pizza è buona,,, }`
      Nell’insieme non viene male, devo dire.
      Quello di cui avrei bisogno è un aiutino per sistemare il TOC. A parte la formattazione, ho già dato un occhio a tocloft, e credo di farcela, quello che mi servirebbe è una cosa del genere:
      ` A.1 titolo titolo titolo di tizio, caio e semprioni ………………………. 1 `
      In sostanza, per come è ora mi stampa già il titolo, ma io vorrei aggiungere gli autori.
      Ho già visto che basta fare una cosa del tipo \section[titolo e autori]{titolo} ma vorrei sapere se fosse possibile agire sul codice e recuperare gli autori dal \the\auth@toks, senza dover rivedere tutti gli abstract (sono 180), per aggiungere gli autori nel titolo a mano. Quindi? Superguru ? Pensavo di ringraziare ufficilmente il GUiT nel libro..
      Ciao e Grazie!
      Ho visto che c’è il comando \addtocontents ma mi aggiunge i nomi sotto, dopo il numero di pagina. Non è un granche… 😳 😥

      Userei l’argomento opzionale di \section, che ora impieghi male:
      `\newcommand{\titolo}[1]{\section[\the\authN@toks, #1]{#1}}`
      Se usi il titolo dell’abstract nella testatina, puoi aggiungere un \markright{#1} al codice, altrimenti verrebbe usato l’argomento opzionale.

      Il problema è che al momento di dare \titolo non sono ancora conosciuti gli autori. Perciò devi spostare il comando \titolo all’interno dell’ambiente LTabstract, dopo che gli autori sono stati dati, e farlo eseguire da \end{LTabstract}.

      Probabilmente il modo migliore è di definire
      `\def\titolo#1{\def\@titolo{#1}}`
      e nel codice di \end{LTabstract} aggiungere, all’inizio,
      `\section[\the\authN@toks, \@titolo]{\@titolo}`
      eventualmente con il \markright{\@titolo}.

      Ciao
      Enrico

    • #25376
      Up
      0
      Down
      ::

      Userei l’argomento opzionale di \section, che ora impieghi male:
      `\newcommand{\titolo}[1]{\section[\the\authN@toks, #1]{#1}}`
      Se usi il titolo dell’abstract nella testatina, puoi aggiungere un \markright{#1} al codice, altrimenti verrebbe usato l’argomento opzionale.

      Il problema è che al momento di dare \titolo non sono ancora conosciuti gli autori. Perciò devi spostare il comando \titolo all’interno dell’ambiente LTabstract, dopo che gli autori sono stati dati, e farlo eseguire da \end{LTabstract}.

      Probabilmente il modo migliore è di definire
      `\def\titolo#1{\def\@titolo{#1}}`
      e nel codice di \end{LTabstract} aggiungere, all’inizio,
      `\section[\the\authN@toks, \@titolo]{\@titolo}`
      eventualmente con il \markright{\@titolo}.

      Ciao
      Enrico

      Enrico.. cioè… 😯 è Perfetto! Grazie…
      Ho usato il codice che mi hai suggerito e..
      Tra l’altro ero preoccupato di dover spostare il comando \titolo all’interno dell’ambiente \begin{LTabstract}, quando inserivo gli abstract, e invece funziona lo stesso. Non mi è molto chiaro perchè, visto che ho inserito il codice:`
      \def\LTabstract{\auth@toks{}\affil@toks{}}
      \def\endLTabstract{\vbox{
      {\noindent\textbf{Autori:} {\normalsize\itshape\parbox[t]{11cm} {\the\auth@toks}}\par} %%autori \section[\the\authN@toks, \@titolo]{\@titolo}`
      Mi aspettavo che come le definizioni di \Author, anche titolo andasse messo dentro la defizione dell’ambiente. Ma forse è il comando
      \def\titolo#1{\def\@titolo{#1}} [/code] messo prima che fa la differenza…

      Ti chiedo l’ultima cosa.. anche se forse è un po’ troppo… 😉 Ma da quello che ho capito, i toks si comportano come array, giusto? Non sarebbe possibile modificare o creare un toks che contiene solo i primi 3 autori? Cioè, se in abstact ne ho 2, inserisco solo qui 2, ma se sono 5, sarebbe possibile far si che nel comando
      `
      \section[\the\authN@toks, \@titolo]{\@titolo}`
      siano inseriti solo i primi 3 autori ? Che poi nell’indice risulti:
      A.1 Titolo titolo titolo di autore 1, autore 2, autore 3 ? Togliendo gli altri? Una specie di if, che restituisce i primi 3 elementi dell’array (sempre se ho capito giusto!!!)
      Forse è chiedere davvero troppo, è 🙄
      VAbbè grazie mille comunque per l’aiuto. Questo forum mi è stato veramente indispensabile![/code][code]

    • #25377
      Up
      0
      Down
      ::

      Ti chiedo l’ultima cosa.. anche se forse è un po’ troppo… 😉 Ma da quello che ho capito, i toks si comportano come array, giusto? Non sarebbe possibile modificare o creare un toks che contiene solo i primi 3 autori? Cioè, se in abstact ne ho 2, inserisco solo qui 2, ma se sono 5, sarebbe possibile far si che nel comando
      `
      \section[\the\authN@toks, \@titolo]{\@titolo}`
      siano inseriti solo i primi 3 autori ? Che poi nell’indice risulti:
      A.1 Titolo titolo titolo di autore 1, autore 2, autore 3 ? Togliendo gli altri? Una specie di if, che restituisce i primi 3 elementi dell’array (sempre se ho capito giusto!!!)
      Forse è chiedere davvero troppo, è 🙄

      Aggiungi nel tuo codice, subito dopo le chiamate di \newtoks,
      `\newcount\auth@count`
      Poi cambia la riga \authN@toks=\expandafter{\the…} in
      `\ifnum\auth@count<3
      \authN@toks=\expandafter{\the\authN@toks {#2 #3}}%
      \advance\auth@count\@ne
      \fi`
      In questo modo solo i primi tre autori vengono inseriti, quando il contatore vale, rispettivamente, 0, 1 e 2. Siccome il comando viene usato solo all’interno di un ambiente, non dovrebbe essere necessario azzerare il contatore. Questo ammesso che non usi \authN@toks per altri scopi. Se questo è il caso, definisci un altro registro token. Altre soluzioni sono poco robuste e bisogna ricordare che devi usare la faccenda in un argomento mobile.

      Ciao
      Enrico

    • #25378
      Up
      0
      Down
      ::

      Aggiungi nel tuo codice, subito dopo le chiamate di \newtoks,
      `\newcount\auth@count`
      Poi cambia la riga \authN@toks=\expandafter{\the…} in
      `\ifnum\auth@count<3
      \authN@toks=\expandafter{\the\authN@toks {#2 #3}}%
      \advance\auth@count\@ne
      \fi`
      In questo modo solo i primi tre autori vengono inseriti, quando il contatore vale, rispettivamente, 0, 1 e 2. Siccome il comando viene usato solo all’interno di un ambiente, non dovrebbe essere necessario azzerare il contatore. Questo ammesso che non usi \authN@toks per altri scopi. Se questo è il caso, definisci un altro registro token. Altre soluzioni sono poco robuste e bisogna ricordare che devi usare la faccenda in un argomento mobile.

      Ciao
      Enrico

      Grazie mille. Al momento non ho LaTex sotto mano, ma appena posso provo. Mi sa che definitò un nuovo token, da utilizzare per raggruppare solo i primi 3 autori. Perchè nell’abstract voglio che appaiano tutti i nomi mentre vorrei avere i primi 3 solo per quanto riguarda l’indice. Quindi, lasciare inalterato \authN@toks, e creare un’altro token specifico per quello, con il quale usare il codice che mi hai suggerito, con l’IF e il contatore. Proverò.
      Grazie mille Enrico! 🙂 🙂

    • #25379
      Up
      0
      Down
      ::


      Ciao Enrico.
      Torno scrivere qui per avere un chiarimento ! 😕
      Dopo che avevo metto il tuo codice, per inserire gli autori nell’indice con il comando \section[…] mi era sparita la testatina di sinistra..
      Riguardando il codice ho trovato l’appunto che mi avevi messo tu:

      eventualmente con il \markright{\@titolo}.

      E li ho dovuto sistemare la marca, inserendola nella riga
      `\def\titolo#1{\def\@titolo{#1}\markright{\thechapter}
      `
      perchè se scrivevo qualcosa quando definivo le testatine con le solite istruzioni di fancy, non succedeva niente.
      L’istuzione solita `\renewcommand{\sectionmark}[1]{\markright{\thechapter}} `
      posso anche commentarla, è inutile.
      Come mai? 😕
      Spero non sorgano inghippi…

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

Go to top