Problema con la formattazione di una tabella

  • Creatore
    Topic
  • #79640
    Up
    0
    Down
    ::


    Salve a tutti, ho un problema con una tabella. Io vorrei riportare questa tabella (senza colori) in LaTeX:

    Ho provato a mettere un po’ mano con i multicolumn e multirow ed il risultato è il seguente:

    Ho provato a guardare in rete, creando nuovi comandi ecc ma il risultato non cambia. La figura 2 mostra il meno peggio che sono riuscito ad ottenere e con il seguente codice:
    `
    \begin{table}[!htbp]
    \centering
    \begin{tabular}{p{1.7cm}C{1.1cm}C{1.2cm}C{1.1cm}C{1.1cm}C{1.1cm}C{1.1cm}C{1.1cm}C{1.1cm}}
    \textbf{Byte}&\textbf{MSB}&\multicolumn{6}{C{6.6cm}}{}&\textbf{LSB}\\ \toprule
    Byte$_1$ & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\ \midrule
    Byte$_2$ & 0 & \multicolumn{7}{C{7.7cm}}{Contatore acquisizioni EMG} \\ \midrule
    Byte$_3$ & 0 & \multicolumn{7}{m{7.7cm}}{\multirow{2}[21]{*}{\centering EMG filtrata – canale 1}} \\
    Byte$_4$ & 0 & \\
    Byte$_5$ & 0 & \\ \midrule
    Byte$_6$ & 0 & \multicolumn{7}{m{7.7cm}}{\multirow{2}[21]{*}{\centering EMG filtrata – canale 2}} \\
    Byte$_7$ & 0 & \\
    Byte$_8$ & 0 & \\ \midrule
    Byte$_9$ & 0 & \multicolumn{7}{m{7.7cm}}{\multirow{2}[21]{*}{\centering EMG filtrata – canale 3}} \\
    Byte$_{10}$ & 0 & \\
    Byte$_{11}$ & 0 & \\ \midrule
    Byte$_{12}$ & 0 & \multicolumn{7}{m{7.7cm}}{\multirow{2}[21]{*}{\centering EMG filtrata – canale 4}} \\
    Byte$_{13}$ & 0 & \\
    Byte$_{14}$ & 0 & \\ \midrule
    Byte$_{15}$ & 0 & 0 & \multicolumn{6}{m{6.6cm}}{\multirow{1}[12]{*}{\centering Riferimento di tensione}} \\
    Byte$_{16}$ & 0 & 0 & \\ \midrule
    Byte$_{14}$ & 0 & \multicolumn{7}{C{7.7cm}}{CRC} \\ \bottomrule
    \end{tabular}
    \caption{Struttura del messaggio per ricevere i dati dallo StiMyo}
    \label{tab:protSTPC}
    \end{table}
    `

    Il comando C è definito come
    `\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}`

    Escludendo il fatto che le celle contenenti Contatore acquisizioni EMG, Riferimento di tensione e CRC sembrano allineate al centro della tabella piuttosto che rispetto al centro della cella i problemi grossi sono per il blocco centrale.
    Avete qualche suggerimento su come centrare meglio il tutto?

    Grazie in anticipo,
    Massimo

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #79641
      franen
      Partecipante
        Up
        0
        Down
        ::


        Ciao e benvenuto.
        Se hai un numero dispari di righe non ha senso usare \multirow, basta scrivere il testo nella riga centrale!
        Se invece sono solo due righe multirow funziona bene, ma non come lo usi tu… Anche il tuo uso di \multicolum non è corretto.

        Ho modificato il tuo codice. Intanto il solito consiglio: leggi per bene il capitolo dell’”Arte di scrivere con LaTeX” relativo alle tabelle.

        Fran

        `\documentclass{article}
        \usepackage[italian]{babel}
        \usepackage{multirow}
        \usepackage{array}
        \usepackage{booktabs}
        \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
        \begin{document}
        Ecco qui:
        \begin{table}[!htbp]
        \centering
        \begin{tabular}{l c *{7}{C{0.8cm}}}
        \textbf{Byte}&\textbf{MSB}& &&&&&&\textbf{LSB}\\ \toprule
        Byte$_1$ & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\ \midrule
        Byte$_2$ & 0 & &\multicolumn{6}{c}{Contatore acquisizioni EMG} \\ \midrule
        Byte$_3$ & 0 & & & & & & & \\
        Byte$_4$ & 0 & & \multicolumn{6}{c}{EMG filtrata – canale 1} \\
        Byte$_5$ & 0 & & & & & & & \\ \midrule
        Byte$_6$ & 0 & & & & & & & \\
        Byte$_7$ & 0 & &\multicolumn{6}{c}{EMG filtrata – canale 2} \\
        Byte$_8$ & 0 & & & & & & & \\ \midrule
        Byte$_9$ & 0 & & & & & & & \\
        Byte$_{10}$ & 0 & &\multicolumn{6}{c}{EMG filtrata – canale 3} \\
        Byte$_{11}$ & 0 & & & & & & & \\ \midrule
        Byte$_{12}$ & 0 & &&&&&& \\
        Byte$_{13}$ & 0 & & \multicolumn{6}{c}{EMG filtrata – canale 4} \\
        Byte$_{14}$ & 0 & & & & & & & \\ \midrule
        Byte$_{15}$ & 0 & 0 & \multicolumn{6}{c}{\multirow{2}*{Riferimento di tensione}} \\
        Byte$_{16}$ & 0 & 0 & \\ \midrule
        Byte$_{14}$ & 0 & & \multicolumn{6}{c}{CRC} \\ \bottomrule
        \end{tabular}
        \caption{Struttura del messaggio per ricevere i dati dallo StiMyo}
        \label{tab:protSTPC}
        \end{table}
        \end{document}`

        EDIT:Une versione con tabularx, che mi piace di più. Grazie per avermi fatto incontrare il comando \arraybackslash
        `\documentclass{article}
        \usepackage[italian]{babel}
        \usepackage{multirow}
        \usepackage{tabularx}
        \usepackage{booktabs}
        \newcolumntype{C}{>{\centering\arraybackslash}X}
        \begin{document}
        Ecco qui:
        \begin{table}[tb]
        \centering
        \begin{tabularx}{\textwidth}{l c *{7}{C}}
        \textbf{Byte}&\textbf{MSB}& &&&&&&\textbf{LSB}\\
        \toprule
        Byte$_1$ & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\
        \midrule
        Byte$_2$ & 0 & &\multicolumn{6}{c}{Contatore acquisizioni EMG} \\
        \midrule
        Byte$_3$ & 0 \\
        Byte$_4$ & 0 & & \multicolumn{6}{c}{EMG filtrata – canale 1} \\
        Byte$_5$ & 0 & & & & & & & \\
        \midrule
        Byte$_6$ & 0 \\
        Byte$_7$ & 0 & &\multicolumn{6}{c}{EMG filtrata – canale 2} \\
        Byte$_8$ & 0 \\
        \midrule
        Byte$_9$ & 0 \\
        Byte$_{10}$ & 0 & &\multicolumn{6}{c}{EMG filtrata – canale 3} \\
        Byte$_{11}$ & 0 \\
        \midrule
        Byte$_{12}$ & 0 \\
        Byte$_{13}$ & 0 & & \multicolumn{6}{c}{EMG filtrata – canale 4} \\
        Byte$_{14}$ & 0 \\
        \midrule
        Byte$_{15}$ & 0 & 0 & \multicolumn{6}{c}{\multirow{2}*{Riferimento di tensione}} \\
        Byte$_{16}$ & 0 & 0 & \\ \midrule
        Byte$_{14}$ & 0 & & \multicolumn{6}{c}{CRC} \\ \bottomrule\\
        \end{tabularx}
        \caption{Struttura del messaggio per ricevere i dati dallo StiMyo}
        \label{tab:protSTPC}
        \end{table}
        \end{document}`

      • #79642
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao.
          La mia versione contiene qualche orrore, ma l’acceterei:
          `\documentclass{article}

          \usepackage[T1]{fontenc}
          \usepackage[utf8]{inputenc}
          \usepackage[italian]{babel}

          \usepackage{booktabs}
          \usepackage{multirow}

          \newdimen\lcol
          \lcol=12pt

          \begin{document}
          \begin{tabular}{l*{8}{c}}
          \small Bits:& \small\textsc{msb} &\rule{\lcol}{0pt}&\rule{\lcol}{0pt}&\rule{\lcol}{0pt}&\rule{\lcol}{0pt}&\rule{\lcol}{0pt}&\rule{\lcol}{0pt}& \small \textsc{lsb}\\
          \toprule
          Byte$_1$ & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\
          \midrule

          Byte$_2$ & 0 & \multicolumn{7}{c}{\small Contatore acquisizioni EMG}\\
          \midrule
          Byte$_3$ & 0 \\
          Byte$_4$ & 0 & \multicolumn{7}{c}{\small EMG filtrata – canale 1}\\
          Byte$_5$ & 0 \\
          \midrule
          Byte$_6$ & 0 \\
          Byte$_7$ & 0 & \multicolumn{7}{c}{\small EMG filtrata – canale 2}\\
          Byte$_8$ & 0 \\
          \midrule
          Byte$_9$ & 0 \\
          Byte$_{10}$ & 0 & \multicolumn{7}{c}{\small EMG filtrata – canale 3}\\
          Byte$_{11}$ & 0 \\
          \midrule
          Byte$_{12}$ & 0\\
          Byte$_{13}$ & 0 & \multicolumn{7}{c}{\small EMG filtrata – canale 4}\\
          Byte$_{14}$ & 0\\
          \midrule
          Byte$_{15}$ & 0 & 0 & \multicolumn{6}{c}{\multirow{2}{*}{\small Riferimento di tensione}} \\
          Byte$_{16}$ & 0 & 0\\
          \midrule
          Byte$_{17}$ & 0 & \multicolumn{7}{c}{CRC}\\
          \bottomrule
          \end{tabular}
          \end{document}`
          Saluti.
          R.

          Ps. forse l’ultimo Byte è il 17 e non il 14.

        • #79643
          Up
          0
          Down
          ::

          franen” post=78793Ciao e benvenuto.
          Se hai un numero dispari di righe non ha senso usare \multirow, basta scrivere il testo nella riga centrale!
          Se invece sono solo due righe multirow funziona bene, ma non come lo usi tu… Anche il tuo uso di \multicolum non è corretto.

          Ho modificato il tuo codice. Intanto il solito consiglio: leggi per bene il capitolo dell’”Arte di scrivere con LaTeX” relativo alle tabelle.

          Fran

          Effettivamente non avevo pensato di scrivere solo nella riga centrale, all’inizio pensavo di usare il multirow per le barre verticali che poi ho deciso di eliminare e quindi mi è rimasta la multirow.
          Grazie anche per il consiglio sul riferimento.

          robitex” post=78795Ciao.
          La mia versione contiene qualche orrore, ma l’acceterei:

          Saluti.
          R.

          Ps. forse l’ultimo Byte è il 17 e non il 14.

          Grazie anche a te, soprattutto per la correzione…non l’avevo notato! Maledetto il copia-incolla ^^

          Massimo

        • #79644
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::


            Dimenticavo (maledetta la fretta): benvenuto sul forum!
            R.

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

        Go to top