Costruzione dinamica tabella

  • Creatore
    Topic
  • #11533
    Up
    0
    Down
    ::


    Ciao a tutti,

    premetto che sono abbastanza scarso nell’uso di Latex (perdonatemi).
    Avrei un quesito/necessità.

    In breve: dovrei creare delle macro per poter creare una tabella in modo iterativo ed in punti diversi del documento.

    Mi spiego meglio. Vorrei creare una macro (od insieme di macro) che mi permetta di aggiungere delle righe alla tabella (che contiene informazioni tipo: data, versione, commento, …) in modo disgiunto dall’implementazione “tipografica”. Il codice di utilizzo dovrebbe essere:

    `
    \addlogentry{30/06/2006}{1.0}{Prima releas ufficiale}
    \addlogentry{1/07/2006}{1.1}{Correzione baco di sicurezza}
    \addlogentry{2/08/2006}{1.0}{Aggiornamento libreria pincopallo}

    `

    Poi, da qualche parte nel documento:

    `
    \makelogtable
    `

    che genera la tabella con i datti caricati.

    Non voglio assolutamente che qualcuno mi faccia la soluzione. Quello che chiedo, invece, sono dei riferimenti a codice che fa robe simili e che possa studiarlo.

    Ho fatto vari tentativi (senza successo, non essendo un “programmatore latex”), per esempio (uno dei tanti tentativi…):

    `
    \makeatletter

    % Gestione di un vettore
    \newcounter{@vectorgetitemcounter}%
    \newcommand{\vectorgetitem}[2]{%
    \setcounter{@vectorgetitemcounter}{#2}%
    \@for\@iii:=#1\do{%
    \addtocounter{@vectorgetitemcounter}{-1}%
    \ifnum\value{@vectorgetitemcounter}=0{\@iii}\fi%
    }}

    \newcounter{rt@size}
    \setcounter{rt@size}{0}

    \gdef\rt@date{}
    \gdef\rt@ver{}
    \gdef\rt@status{}
    \gdef\rt@comment{}
    \gdef\rt@author{}

    \newcommand{\rt@addrow}[5]{
    {\addtocounter{rt@size}{1}%
    \xdef\rt@date{\ifx\rt@date\empty #1\else \rt@date,#1\fi}%
    \xdef\rt@ver{\ifx\rt@ver\empty #2\else \rt@ver,#2\fi}%
    \xdef\rt@status{\ifx\rt@status\empty #3\else \rt@status,#3\fi}%
    \xdef\rt@comment{\ifx\rt@comment\empty #4\else \rt@comment,#4\fi}%
    \xdef\rt@author{\ifx\rt@author\empty #5\else \rt@author,#5\fi}%
    }
    }

    \newcommand{\makelogtable}{
    \begin{tabular}{|r|l|}
    \@for \iiii:=1,2 \do{
    \vectorgetitem{\rt@date}{\iii} & \vectorgetitem{\rt@ver}{\iii}%
    }
    \end{tabular}
    }

    %\makeatother

    \rt@addrow{30/06/2006}{0.1}{pre}{C1}{Luigi Mantellini}
    \rt@addrow{30/01/2006}{0.2}{pre}{C2}{Napoleone}
    \rt@addrow{30/03/2006}{0.3}{pre}{C3}{Cartesio}
    \rt@addrow{30/04/2006}{0.3beta}{beta}{C4}{Rubbia}

    … (in document)
    \makelogtable%

    `

    … inutile dire che non funziona.

    Vi ringrazio per tutto il materiale che vorrete fornirmi.

    luigi

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

      premetto che sono abbastanza scarso nell’uso di Latex (perdonatemi).
      Avrei un quesito/necessità.

      In breve: dovrei creare delle macro per poter creare una tabella in modo iterativo ed in punti diversi del documento.

      Mi spiego meglio. Vorrei creare una macro (od insieme di macro) che mi permetta di aggiungere delle righe alla tabella (che contiene informazioni tipo: data, versione, commento, …) in modo disgiunto dall’implementazione “tipografica”. Il codice di utilizzo dovrebbe essere:
      `\addlogentry{30/06/2006}{1.0}{Prima releas ufficiale}
      \addlogentry{1/07/2006}{1.1}{Correzione baco di sicurezza}
      \addlogentry{2/08/2006}{1.0}{Aggiornamento libreria pincopallo}
      …`
      Poi, da qualche parte nel documento:
      `\makelogtable`
      che genera la tabella con i datti caricati.
      […]

      Direi che qui ci vuole una “token list”, ma si va su cose non documentate in LaTeX e che trovi sul TeXbook.
      `\makeatletter
      \newtoks\logentrytoks
      \newcommand{\addlogentry}[5]{%
      \logentrytoks=\expandafter{\the\logentrytoks
      \rt@entry
      \rt@date{#1}\rt@ver{#2}\rt@status{#3}\rt@comment{#4}\rt@author{#5}%
      \rt@endentry}
      }

      \def\makelogtable{%
      \begingroup
      \let\rt@entry\relax
      \def\rt@date##1{##1&}%
      \let\rt@ver\@gobble
      \let\rt@status\@gobble
      \let\rt@comment\@gobble
      \def\rt@author##1{##1}%
      \def\rt@endentry{\\}
      \begin{tabular}{rl}
      Data & autore\\
      \hline
      \the\logentrytoks
      \hline
      \end{tabular}%
      \endgroup}
      \makeatother`
      A ogni chiamata di \addlogentry, alla token list viene aggiunta una nuova lista di token, ben strutturata in modo che poi si possano usare i dati come ci pare. Definisco allora \makelogtable dicendo che il comando \rt@entry non fa niente, i comandi \rt@ver, \rt@status e \rt@comment si mangiano il loro argomento, mentre usiamo solo i campi \rt@date e \rt@author.

      Puoi ottenere tabelle che usano i dati come preferisci. Così solo nell’ordine in cui compaiono, ma si può ridefinire \rt@entry in modo che si possa anche modificare l’ordine. O anche che numeri automaticamente i vari elementi, eccetera.

      Ciao
      Enrico

      PS: Ho spostato il topic nel forum più appropriato.

    • #11535
      Up
      0
      Down
      ::

      dovrei creare delle macro per poter creare una tabella in modo iterativo ed in punti diversi del documento

      Non molto tempo fa anche io ho posto a questo forum una domanda del genere. Anzi direi praticamente la stessa. Non ricevendo alcuna risposta, mi sono rivolto al forum di Google su latex. Li mi hanno suggerito almeno un paio di soluzioni e parecchi spunti interessanti. Fosse anche solo per curiosita’, ti consiglio di darci un’occhiata. Il link diretto al post e’

      http://groups.google.com/group/comp.text.tex/browse_thread/thread/fba499da79663d53/0a66824de3a7bbb0?lnk=gst&q=pvarisco&rnum=1#0a66824de3a7bbb0

      Saluti

    • #11536
      Up
      0
      Down
      ::


      grazie molte per gli spunti!.

      ciao

      luigi

    • #11537
      Up
      0
      Down
      ::

      grazie molte per gli spunti!.

      Non va dimenticato neppure l’approccio con makeindex, se poi vuoi che la tabella sia anche riordinata. Trovi un esempio in doc.sty, dove usano makeindex insieme a uno stile non standard. Non è molto semplice, però.

      Ciao
      Enrico

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

Go to top