simulare \thanks con molti \author nel documento [risolto]

  • Creatore
    Topic
  • #19346
    Up
    0
    Down
    ::


    Ciao a tutti,
    poiché ho cercato a lungo una soluzione a questo problema, e alla fine l’ho trovata, ho pensato che fosse utile metterla a disposizione di tutti qui.

    Sto curando la redazione degli atti di un convegno. Chi mi ha preceduto in questo improbo compito lo scorso anno ha usato la classe editor (di cui peraltro non ho trovato traccia in rete), e mi ha passato lo scheletro della pubblicazione dello scorso anno. Comunque, c’è un documento principale funziona da contenitore e ogni contributo viene inserito tramite \input. Mi pare di capire che il documento unico sia il mezzo per avere la numerazione delle pagine consecutiva.

    Quindi all’inizio di ogni pezzo c’è una sezione \title e \author con il suo buon \maketitle. Quello di cui ho bisogno è poter indicare in nota a pié di pagina l’istituto di provenienza dell’autore o degli autori, usando però non un numero, ma un simbolo tipo asterisco, dagger, etc.. (Questa è la convenzione accademica in archeologia, che vi devo dire…)

    Purtroppo (almeno a me, ma dovrebbe essere così per tutti), il comando \thanks non fa il suo mestiere, forse perché ci sono molti \author nel documento, non so. In ogni caso, non farebbe al caso mio, perché, ad esempio, se ho 3 autori tutti della stessa università, non devo avere 3 note, ma una sola (e un simbolo solo). Anche il pacchetto footmisc non è di aiuto.

    Ho quindi risolto, dopo un po’ di ricerche, in questo modo:

    `\renewcommand{\thefootnote}{\fnsymbol{footnote}}
    \author{

    Alessandro Bezzi\footnotemark[1],
    Luca Bezzi\footnotemark[1],
    Rupert Gietl\footnotemark[1],
    Wilfrid Allinger-Csollich\footnotemark[2],
    Sandra Heinsch\footnotemark[2],
    Walter Kuntner\footnotemark[2]
    }

    \date{}
    \maketitle

    \footnotetext[1]{Arc-Team s.n.c.}
    \footnotetext[2]{Dipartimento di Orientalistica e Storia Antica, Università di Innsbruck}
    \renewcommand{\thefootnote}{\arabic{footnote}}
    `

    Mi pare abbastanza pulito, è semplice da usare e soprattutto fa esattamente quello di cui ho bisogno. Spero che nessuno debba subire una tortura di questo genere (atti di un convegno, testi che arrivano in .doc, etc) , ma nel caso potrebbe essere un suggerimento utile.

    Ciao, Steko

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #19347
      Up
      0
      Down
      ::


      Ciao Steko,
      ti capisco perfettamente visto che quello che hai fatto lo sto facendo per una rivista. Per relaizzare ciò che hai fatto ho invece utilizzato soluzioni già in parte realizzate (ho copiato dal elsevier e revtex)

    • #19348
      Up
      0
      Down
      ::

      Ciao a tutti,
      poiché ho cercato a lungo una soluzione a questo problema, e alla fine l’ho trovata, ho pensato che fosse utile metterla a disposizione di tutti qui.

      Sto curando la redazione degli atti di un convegno. Chi mi ha preceduto in questo improbo compito lo scorso anno ha usato la classe editor (di cui peraltro non ho trovato traccia in rete), e mi ha passato lo scheletro della pubblicazione dello scorso anno. Comunque, c’è un documento principale funziona da contenitore e ogni contributo viene inserito tramite \input. Mi pare di capire che il documento unico sia il mezzo per avere la numerazione delle pagine consecutiva.

      Quindi all’inizio di ogni pezzo c’è una sezione \title e \author con il suo buon \maketitle. Quello di cui ho bisogno è poter indicare in nota a pié di pagina l’istituto di provenienza dell’autore o degli autori, usando però non un numero, ma un simbolo tipo asterisco, dagger, etc.. (Questa è la convenzione accademica in archeologia, che vi devo dire…)

      Purtroppo (almeno a me, ma dovrebbe essere così per tutti), il comando \thanks non fa il suo mestiere, forse perché ci sono molti \author nel documento, non so. In ogni caso, non farebbe al caso mio, perché, ad esempio, se ho 3 autori tutti della stessa università, non devo avere 3 note, ma una sola (e un simbolo solo). Anche il pacchetto footmisc non è di aiuto.

      Ho quindi risolto, dopo un po’ di ricerche, in questo modo:

      `\renewcommand{\thefootnote}{\fnsymbol{footnote}}
      \author{

      Alessandro Bezzi\footnotemark[1],
      Luca Bezzi\footnotemark[1],
      Rupert Gietl\footnotemark[1],
      Wilfrid Allinger-Csollich\footnotemark[2],
      Sandra Heinsch\footnotemark[2],
      Walter Kuntner\footnotemark[2]
      }

      \date{}
      \maketitle

      \footnotetext[1]{Arc-Team s.n.c.}
      \footnotetext[2]{Dipartimento di Orientalistica e Storia Antica, Università di Innsbruck}
      \renewcommand{\thefootnote}{\arabic{footnote}}
      `

      Mi pare abbastanza pulito, è semplice da usare e soprattutto fa esattamente quello di cui ho bisogno. Spero che nessuno debba subire una tortura di questo genere (atti di un convegno, testi che arrivano in .doc, etc) , ma nel caso potrebbe essere un suggerimento utile.

      Puoi evitare tutti quei comandi espliciti definendoti qualche comando, che metterai nella tua classe o in un file .sty che richiamerai per ogni lavoro:
      `\newtoks\@authortoks
      \@authortoks={\@gobble}
      \newcommand{\@authorcomma}{, }
      \let\orig@author\author
      \renewcommand\author[2]{%
      \@authortoks\expandafter{\the\@authortoks\@authorcomma#1\footnotemark[#2]}%
      }
      \newtoks\@addresstoks
      \newcommand{\address}[2]{%
      \@addresstoks\expandafter{\the\@addresstoks\footnotetext[#1]{#2}}}
      \let\orig@maketitle\maketitle
      \def\maketitle{%
      \orig@author{\the\@authortoks}
      \begingroup
      \renewcommand{\thefootnote}{\fnsymbol{footnote}}%
      \orig@maketitle
      \the\@addresstoks
      \endgroup}`
      Adesso puoi inserire i tuoi autori così:
      `\author{Alessandro Bezzi}{1}
      \author{Luca Bezzi}{1}
      \author{Wilfrid Allinger-Csollich}{2}
      \author{Rupert Gietl}{1}
      \author{Sandra Heinsch}{2}
      \author{Walter Kuntner}{2}

      \address{1}{Arc-Team s.n.c.}
      \address{2}{Dipartimento di Orientalistica e Storia Antica, Università di Innsbruck}

      \date{}
      \maketitle`
      Non funziona, ovviamente, con la classe article, perché il testo del campo “‘autore” non viene giustificato. Ma probabilmente la classe che usi si comporta diversamente.

      Qual è il vantaggio rispetto al tuo metodo? Che il codice è ancora più pulito e non rischi di dimenticarti qualcosa per la strada.

      Ciao
      Enrico

    • #19349
      Up
      0
      Down
      ::


      `
      \@authortoks={\@gobble}
      `
      Serve a mangiarsi la prima virgola, giusto?

      Grande Prof. per tutte le definizioni

    • #19350
      Up
      0
      Down
      ::

      `
      \@authortoks={\@gobble}
      `
      Serve a mangiarsi la prima virgola, giusto?

      Esattamente. Dando
      `\author{Pinco Pallino}{1}
      \author{Tizio Caio}{1}`
      il “vero” campo autore contiene
      `@gobble\@authorcomma Pinco Pallino\footnotemark[1]\@authorcomma
      Tizio Caio\footnotemark[1]`
      ma quando si usa \orig@author per la composizione il risultato è quello giusto.

      Si sarebbe potuto eseguire il test se si è al primo autore, ma non mi sembrava il caso.

      Ciao
      Enrico

    • #19351
      DMW
        Up
        0
        Down
        ::


        Ma non è più corretto scrivere così?
        `
        \makeatletter
        \newtoks\@authortoks
        \@authortoks={\@empty}
        \newcommand{\@authorcomma}{, }
        \let\orig@author\author
        \renewcommand\author[2]{%
        \@authortoks\expandafter{\the\@authortoks#1\footnotemark[#2]\space\@authorcomma}%
        }
        \newtoks\@addresstoks
        \newcommand{\address}[2]{%
        \@addresstoks\expandafter{\the\@addresstoks\footnotetext[#1]{#2}}}
        \let\orig@maketitle\maketitle
        \def\maketitle{%
        \orig@author{\the\@authortoks}
        \begingroup
        \renewcommand{\thefootnote}{\fnsymbol{footnote}}%
        \orig@maketitle
        \the\@addresstoks
        \endgroup}
        \makeatother`

        Ma mi spieghi meglio cosa fanno \@authortoks e \the\@authortoks dentro la ridefinizione di author e quale è la loro differenza?

        Ciao

        Andrea

      • #19352
        Up
        0
        Down
        ::

        Ma non è più corretto scrivere così?
        `
        \makeatletter
        \newtoks\@authortoks
        \@authortoks={\@empty}
        \newcommand{\@authorcomma}{, }
        \let\orig@author\author
        \renewcommand\author[2]{%
        \@authortoks\expandafter{\the\@authortoks#1\footnotemark[#2]\space\@authorcomma}%
        }
        \newtoks\@addresstoks
        \newcommand{\address}[2]{%
        \@addresstoks\expandafter{\the\@addresstoks\footnotetext[#1]{#2}}}
        \let\orig@maketitle\maketitle
        \def\maketitle{%
        \orig@author{\the\@authortoks}
        \begingroup
        \renewcommand{\thefootnote}{\fnsymbol{footnote}}%
        \orig@maketitle
        \the\@addresstoks
        \endgroup}
        \makeatother`

        No, così hai una virgola anche dopo l’ultimo.

        Ma mi spieghi meglio cosa fanno \@authortoks e \the\@authortoks dentro la ridefinizione di author e quale è la loro differenza?

        \@authortoks è il nome di un registro token, \the\@authortoks ne estrae il contenuto. Per assegnare un valore a un registro token si scrive
        `={}`
        dove il carattere = è opzionale. Siccome le regole di TeX prevedono che sia seguito da una parentesi graffa aperta, TeX espande i token successivi al nome finché trova una graffa aperta. Quindi con
        `\@authortoks\expandafter{\the\@authortoks}`
        la presenza di \@authortoks impone l’espansione di \expandafter, la quale causa l’espansione del token successivo a quello che segue \expandafter, quindi \the; così il contenuto di \@authortoks viene immesso nella lista di token tra le graffe e si ottiene il risultato voluto.

        Un po’ diverso se si desiderasse aggiungere qualcosa all’inizio della lista. Nella macro che segue, #1 è la lista di token da aggiungere, #2 il nome di un registro token.
        `\def\addinfrontof#1#2{%
        \toks0={#1}%
        #2\expandafter{\the\toks0\expandafter\space\the#2}}`
        È interessante capire perché funziona. Dopo aver caricato la lista nel registro token temporaneo \toks0, il passo successivo è come prima. Con una differenza: quando \expandafter causa l’espansione di \the, questo trova \toks e la regola vuole che \toks sia seguito da un numero. Quando TeX è in cerca di un numero trova le cifre espandendo i token finché ne trova uno inespandibile che non sia una cifra. Perciò qui, trovando uno 0, espande il token successivo che è \expandafter, il quale provoca quella del secondo \the, il quale estrae il contenuto del registro #2. Il token \space, alla fine, sparisce perché segue una costante. WOW.

        Ciao
        Enrico

        (Nota: ho modificato leggermente la macro perché, se per caso il registro token #2 avesse un contenuto che comincia con un numero si sarebbe nei pasticci.)

      • #19353
        Up
        0
        Down
        ::


        Grazie per la spiegazione!!!

      • #19354
        Up
        0
        Down
        ::


        Grazie per gli ottimi suggerimenti. Penso proprio che li adotterò, anche perché a breve altre persone dovranno aiutarmi in questo lavoro, e sono abbastanza alle prime armi con LaTeX.

        Saluti,
        Stefano

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

    Go to top