[Risolto] Tabella con righe colorate alternate

  • Creatore
    Topic
  • #115678
    Up
    0
    Down
    ::


    Buongiorno a tutti, ho una questione estetica per una tabella.

    La tabella in questione genera tante righe quante ne sono necessarie in base a determinati parametri, quindi non sono sempre uguali.
    Per renderla più facilmente leggibile, mi piacerebbe poter colorare/evidenziare le righe in modo alternato, ma non sapendo quali righe vengono stampate si complica un pochino.

    Ho quindi pensato a un contatore che se si stampa la riga questo aumenta di 1, e mi colora/evidenzia solo quando il contatore è un numero dispari (faccio partire il contatore da 2, così non evidenzio/coloro la prima riga che stampo).

    Ho provato a farlo direttamente nella tabella che mi serve e mi dava errore, quindi ho provato a fare un codice prova ad hoc e mi dà lo stesso errore. Vi mostro il codice:

    `
    \usepackage{color, colortbl}
    \usepackage{booktabs}
    \usepackage{ifthen}
    \usepackage{numprint}

    \newcounter{k}
    \setcounter{k}{2}
    \definecolor{gray}{gray}{0.8}
    \def\ecomm{&}

    \begin{center}
    \begin{tabular}{*3c}

    \ifthenelse{\isodd{\value{k}}}{
    \rowcolor{gray} Grigio\arabic{k} \ecomm Grigio\arabic{k} \ecomm Grigio\arabic{k}\\
    \midrule
    \addtocounter{k}{1}
    }
    {
    NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k}\\
    \midrule
    \addtocounter{k}{1}
    }

    \ifthenelse{\isodd{\value{k}}}{
    \rowcolor{gray} Grigio\arabic{k} \ecomm Grigio\arabic{k} \ecomm Grigio\arabic{k}\\
    \midrule
    \addtocounter{k}{1}
    }
    {
    NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k}\\
    \midrule
    \addtocounter{k}{1}
    }

    \end{tabular}
    \end{center}
    `

    Questo codice non funziona, mi dà come errore
    “}

    I expect to see \noalign only after the \cr of
    an alignment. Proceed, and I’ll ignore this case.”

    e mi dà errore solo quando entra nelle condizioni di dover colorare la riga: infatti se io cancello tutto il secondo \ifthenelse e quindi lascio solo
    `
    \newcounter{k}
    \setcounter{k}{2}
    \definecolor{gray}{gray}{0.8}
    \def\ecomm{&}

    \begin{center}
    \begin{tabular}{*3c}

    \ifthenelse{\isodd{\value{k}}}{
    \rowcolor{gray} Grigio\arabic{k} \ecomm Grigio\arabic{k} \ecomm Grigio\arabic{k}\\
    \midrule
    \addtocounter{k}{1}
    }
    {
    NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k}\\
    \midrule
    \addtocounter{k}{1}
    }

    \end{tabular}
    \end{center}

    `
    il programma gira senza problemi e mi stampa la riga “NonGrigio2 NonGrigio2 NonGrigio2” come dovrebbe fare: nel momento ad esempio in cui io cambio il contatore k e scrivo `\setcounter{k}{1}`, a quel punto il programma si blocca di nuovo e mi dà l’errore di prima.

    Questo è solo il codice prova, quindi mi aspetterei mi stampi la prima riga non colorata e la seconda sì.

    Qualcuno mi saprebbe indicare dove sbaglio?

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #115679
      mattiaca
      Partecipante
        Up
        0
        Down
        ::


        Hai provato a usare il pacchetto tabu?
        Risolveresti il problema più facilmente.
        Ciao.

      • #115680
        Up
        0
        Down
        ::

        mattiaca” post=116064Hai provato a usare il pacchetto tabu?
        Risolveresti il problema più facilmente.
        Ciao.

        non ne conoscevo neanche l’esistenza 😮 😮 vado subito a vedere le specifiche del pacchetto, grazie!

        Inoltre, ho provato ad usare anche la funzione \ifnumodd del pacchetto \etoolbox ma mi dà lo stesso errore

      • #115681
        Up
        0
        Down
        ::


        Non mi è chiaro come si usi il pacchetto tabu. In realtà temo non sia compreso nella versione che utilizziamo (usiamo Lyx per direttive aziendali), ho quindi provato a scaricare il pacchetto ma non capisco dove vada salvato perché Lyx lo riconosca e lo utilizzi.

        Con \tabular non è possibile? Perché quando entra nella condizione \rowcolor mi dà errore?

      • #115682
        Up
        0
        Down
        ::


        ho risolto da solo

        Se qualcuno volesse saperlo, anche se a quanto pare non interessa a nessuno, questo è ciò che ho fatto, ora il codice funziona. Una soluzione magari non ottima, ma efficace

        `
        \usepackage{color, colortbl}
        \usepackage{booktabs}
        \usepackage{ifthen}
        \usepackage{numprint}

        \newcounter{k}
        \setcounter{k}{1}
        \definecolor{gray}{gray}{0.8}
        \def\ecomm{&}

        \begin{center}
        \begin{tabular}{*3c}
        \whiledo{\value{k}<11}
        {
        \ifnumodd{\value{k}}
        {
        \\[-0.421cm]
        \rowcolor{gray} Grigio\arabic{k} \ecomm Grigio\arabic{k} \ecomm Grigio\arabic{k}\\
        \addtocounter{k}{1}
        }
        {
        \\[-0.421cm]
        NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k} \ecomm NonGrigio\arabic{k}\\
        \addtocounter{k}{1}}
        }

        \end{tabular}
        \end{center}
        `

        In poche parole, ho aggiunto `\\[-0.421cm]` e tutto è andato (a ‘sto giro ho usato il \whiledo perché mi serviva capire se andava anche dentro questa funzione per il mio scopo, ma il concetto è lo stesso)

        EDIT: Il [-0.421cm] è per ovviare allo spazio in più che si creerebbe

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

    Go to top