Definizione comando simile a \addcontents*

  • Creatore
    Topic
  • #24571
    Up
    0
    Down
    ::


    Salve a tutti,
    ho già postato questa richiesta su it.comp.software.tex, dove postano molti utenti presenti anche qui, quindi mi scuso con chi stia leggendo questa richiesta una seconda volta.

    Sto creando una nuova classe LaTeX per generare in maniera “semi-automagica” i PDF dei programmi didattici del mio Corso di Laurea. Un prototipo è qui.

    Ecco il problema: dovrei creare un comando \modulo{Modulo}{Docente}, che
    funzioni come \addcontentsline (o simili): io posso dare più \modulo{}{}, e
    alla fine tutti appaiono nel “sommario” in alto a destra. È possibile?

    Attualmente il sommario è così fatto (snippet):

    `
    \def\coordinatore#1{\def\thecoordinatore{#1}}
    \def\cfu#1{\def\thecfu{#1}}

    \newcommand\sommario{\begin{flushright}
    \begin{minipage}{6cm}
    \begin{tabular}{ll}
    \textbf{Coordinatore} & \textit{\thecoordinatore} \\
    \textbf{Crediti} & \textit{\thecfu}\\[10pt]
    \textbf{Moduli didattici} & \textbf{Docenti}\\
    \textbf{Foo}&\textit{Professore Bar}
    \end{tabular}
    \end{minipage}
    \end{flushright}
    }
    `

    Ho cercato con Google i “sorgenti” di \addcontentsline, ma non sono riuscito a
    trovare nulla (quello che ho trovato, ridefinisce — \renewcommand —
    \addcontentsline, usando \addcontentsline stesso. Non ho trovato il sorgente
    “originario”…)

    Grazie per ogni aiuto,
    David

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

      Salve a tutti,
      ho già postato questa richiesta su it.comp.software.tex, dove postano molti utenti presenti anche qui, quindi mi scuso con chi stia leggendo questa richiesta una seconda volta.

      Sto creando una nuova classe LaTeX per generare in maniera “semi-automagica” i PDF dei programmi didattici del mio Corso di Laurea. Un prototipo è qui.

      Ecco il problema: dovrei creare un comando \modulo{Modulo}{Docente}, che
      funzioni come \addcontentsline (o simili): io posso dare più \modulo{}{}, e
      alla fine tutti appaiono nel “sommario” in alto a destra. È possibile?

      Attualmente il sommario è così fatto (snippet):

      `
      \def\coordinatore#1{\def\thecoordinatore{#1}}
      \def\cfu#1{\def\thecfu{#1}}

      \newcommand\sommario{\begin{flushright}
      \begin{minipage}{6cm}
      \begin{tabular}{ll}
      \textbf{Coordinatore} & \textit{\thecoordinatore} \\
      \textbf{Crediti} & \textit{\thecfu}\\[10pt]
      \textbf{Moduli didattici} & \textbf{Docenti}\\
      \textbf{Foo}&\textit{Professore Bar}
      \end{tabular}
      \end{minipage}
      \end{flushright}
      }
      `

      Ho cercato con Google i “sorgenti” di \addcontentsline, ma non sono riuscito a
      trovare nulla (quello che ho trovato, ridefinisce — \renewcommand —
      \addcontentsline, usando \addcontentsline stesso. Non ho trovato il sorgente
      “originario”…)

      Grazie per ogni aiuto,
      David

      Scusa, ma come “prototipo” quel PDF mi sembra un po’ troppo scarno. Né si capisce davvero che cosa tu stia cercando di fare. Prova a essere un po’ più esplicito.

      Ciao
      Enrico

    • #24573
      Up
      0
      Down
      ::

      Scusa, ma come “prototipo” quel PDF mi sembra un po’ troppo scarno.

      Non deve essere nulla di particolare… ho fatto tutto in OOoWriter finora, ma vorrei automatizzare la cosa con un po’ di scripting appoggiandomi ad un database — per questo ho pensato che generare i PDF da LaTeX (un po’ di “sed magic” farebbe al caso mio) fosse la soluzione ideale.

      Né si capisce davvero che cosa tu stia cercando di fare. Prova a essere un po’ più esplicito.

      D’accordo. Non conosco bene LaTeX, per cui perdonami un’eventuale errata terminologia.

      Quello che mi serve definire è un comando che, ad ogni chiamata, aggiunga i suoi parametri ad una “lista”, che verrà poi mostrata da un secondo comando.

      Esempio:

      \modulo{Medicina Interna}{Prof. Uno}
      \modulo{Ematologia}{Prof. Due}
      \stampamoduli

      Va meglio così?

      Grazie,
      David

    • #24574
      Up
      0
      Down
      ::

      Scusa, ma come “prototipo” quel PDF mi sembra un po’ troppo scarno.

      Non deve essere nulla di particolare… ho fatto tutto in OOoWriter finora, ma vorrei automatizzare la cosa con un po’ di scripting appoggiandomi ad un database — per questo ho pensato che generare i PDF da LaTeX (un po’ di “sed magic” farebbe al caso mio) fosse la soluzione ideale.

      Né si capisce davvero che cosa tu stia cercando di fare. Prova a essere un po’ più esplicito.

      D’accordo. Non conosco bene LaTeX, per cui perdonami un’eventuale errata terminologia.

      Quello che mi serve definire è un comando che, ad ogni chiamata, aggiunga i suoi parametri ad una “lista”, che verrà poi mostrata da un secondo comando.

      Esempio:

      \modulo{Medicina Interna}{Prof. Uno}
      \modulo{Ematologia}{Prof. Due}
      \stampamoduli

      Va meglio così?

      Grazie,
      David

      Se non devi raccogliere i vari elementi qua e là per il documento e stamparli in modo ordinato all’inizio, non c’è bisogno di \addcontentsline o simili. Il modo più semplice è di usare una lista di token.
      `\makeatletter
      \newtoks\modtoks
      \newcommand\@modtitle{}
      \newcommand\@modprof{}
      \newcommand{\modulo}[2]{%
      \addto@hook\modtoks{\@modtitle{#1}\@modprof{#2}}
      \newcommand{\stampamoduli}{%
      \renewcommand\@modtitle[1]{……}%
      \renewcommand\@modprof[1]{…
      …}%
      }
      \makeatletter`
      Il fatto è che ancora non si capisce affatto che cosa ti serva.

      Ciao
      Enrico

    • #24575
      Up
      0
      Down
      ::

      Se non devi raccogliere i vari elementi qua e là per il documento e stamparli in modo ordinato all’inizio, non c’è bisogno di \addcontentsline o simili.

      \addcontentsline era un esempio di “comportamento” che dovrebbe avere la mia funzione…

      Il modo più semplice è di usare una lista di token.

      Ecco, vedi. Non ho la più pallida idea di cosa sia un token (almeno il LaTeX)… cercherò, grazie (anche per il pezzo di codice)

      Il fatto è che ancora non si capisce affatto che cosa ti serva.

      Credevo di essermi spiegato meglio 🙁

      Quello che dovrei poter fare è qualcosa di simile a:

      `
      \documentclass[a4paper]{miaclasse}
      \begin{document}
      \coordinatore{Prof. Tizio}
      \cfu{10}
      \modulo{Uno}{Prof. Uno}
      \modulo{Due}{Prof. Due}

      \sommario
      \end{document}
      `

      Dove \sommario sarebbe quello che ho scritto prima:

      `
      \newcommand\sommario{\begin{flushright}
      \begin{minipage}{6cm}
      \begin{tabular}{ll}
      \textbf{Coordinatore} & \textit{\thecoordinatore} \\
      \textbf{Crediti} & \textit{\thecfu}\\[10pt]
      \listamoduli
      \end{tabular}
      \end{minipage}
      \end{flushright}
      }
      `

      Qui ho cambiato un po’ il codice che ho postato in origine aggiungendo \listamoduli, che dovrebbe quindi elencare i moduli “aggiunti” con \modulo{}{}.

      Una cosa del tipo (pseudo-codice non-LaTeX):

      `
      aggiungi(“Modulo1”, “Professore1”);
      aggiungi(“Modulo2”, “Professore2”);
      stampalista();
      `

      Grazie per l’aiuto,
      David

    • #24576
      Up
      0
      Down
      ::

      Se non devi raccogliere i vari elementi qua e là per il documento e stamparli in modo ordinato all’inizio, non c’è bisogno di \addcontentsline o simili.

      \addcontentsline era un esempio di “comportamento” che dovrebbe avere la mia funzione…

      Il modo più semplice è di usare una lista di token.

      Ecco, vedi. Non ho la più pallida idea di cosa sia un token (almeno il LaTeX)… cercherò, grazie (anche per il pezzo di codice)

      Il fatto è che ancora non si capisce affatto che cosa ti serva.

      Credevo di essermi spiegato meglio 🙁

      Quello che dovrei poter fare è qualcosa di simile a:

      `
      \documentclass[a4paper]{miaclasse}
      \begin{document}
      \coordinatore{Prof. Tizio}
      \cfu{10}
      \modulo{Uno}{Prof. Uno}
      \modulo{Due}{Prof. Due}

      \sommario
      \end{document}
      `

      Dove \sommario sarebbe quello che ho scritto prima:

      `
      \newcommand\sommario{\begin{flushright}
      \begin{minipage}{6cm}
      \begin{tabular}{ll}
      \textbf{Coordinatore} & \textit{\thecoordinatore} \\
      \textbf{Crediti} & \textit{\thecfu}\\[10pt]
      \listamoduli
      \end{tabular}
      \end{minipage}
      \end{flushright}
      }
      `

      Qui ho cambiato un po’ il codice che ho postato in origine aggiungendo \listamoduli, che dovrebbe quindi elencare i moduli “aggiunti” con \modulo{}{}.

      Una cosa del tipo (pseudo-codice non-LaTeX):

      `
      aggiungi(“Modulo1”, “Professore1”);
      aggiungi(“Modulo2”, “Professore2”);
      stampalista();
      `

      Adesso va meglio: la cosa comincia a chiarirsi. Che cosa siano una lista di token e un registro token non è così importante, se il codice funziona. 🙂
      `\makeatletter
      \newcommand\coordinatore[1]{\def\@coordinatore{#1}}
      \newcommand\cfu[1]{\def\@cfu{#1}}
      \newtoks\modtoks
      \newcommand{\modulo}[2]{%
      \addto@hook\modtoks{\@modulotit{#1}&\@moduloprof{#2}\\}
      \newcommand\@modulotit[1]{Modulo #1}
      \newcommand\@moduloprof[1]{#1}
      \newcommand\sommario{%
      \begin{flushright}
      \begin{tabular}{ll@{}}
      \textbf{Coordinatore} & \textit{\@coordinatore} \\
      \textbf{Crediti} & \@cfu \\[10pt]
      \the\modtoks
      \end{tabular}
      \end{flushright}}
      \makeatother`
      Puoi modificare le definizioni di \@moduloprof e \@modulotit come più ti aggrada. Naturalmente i \makeat… non servono se il codice sta in un file .cls; immagino che avrai anche un comando per cominciare la pagina di un corso; in quella definizione devi aggiungere “\modtoks={}”, in modo da azzerare il registro.

      Noterai che ho eliminato la minipage che non serviva proprio a nulla; inoltre il preambolo della tabella è “ll@{}” in modo che la tabella sia a filo del margine destro (non lo sarebbe stata, altrimenti).

      Prova con
      `\coordinatore{Pinco Pallino}
      \cfu{24}
      \modulo{Uno}{A. Bcde}
      \modulo{Due}{F. Ghil}
      \modulo{Tre}{M. Nopq}
      \sommario`
      Ciao
      Enrico

    • #24577
      Up
      0
      Down
      ::

      Adesso va meglio: la cosa comincia a chiarirsi. Che cosa siano una lista di token e un registro token non è così importante, se il codice funziona. 🙂

      Il codice postato funziona, grazie mille 🙂
      Il problema, però, è che voglio _capire_ cosa siano una lista di token e un registro di token 😉

      Comunque, qualche ricerchina con Google non mi potrà far male.

      Grazie ancora,
      David

    • #24578
      Up
      0
      Down
      ::

      Adesso va meglio: la cosa comincia a chiarirsi. Che cosa siano una lista di token e un registro token non è così importante, se il codice funziona. 🙂

      Il codice postato funziona, grazie mille 🙂
      Il problema, però, è che voglio _capire_ cosa siano una lista di token e un registro di token 😉

      Ci sono articoli su ArsTeXnica e un libriccino di appunti

      Ciao
      Enrico

    • #24579
      Up
      0
      Down
      ::

      Ci sono articoli su ArsTeXnica e un libriccino di appunti

      Grazie mille!

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

Go to top