Evidenziare più righe di una tabella con una graffa

  • Creatore
    Topic
  • #22331
    Up
    0
    Down
    ::


    Ispirato da questo topic ho realizzato la seguente tabella:
    `
    \documentclass[a4paper]{article}
    \usepackage{multirow}

    \begin{document}
    \begin{table}[tb]
    \centering
    \begin{tabular}{ll}
    Abitante & Descrizione\\
    \hline
    Paperon de Paperoni & Fantastiliardario\\
    Paolino Paperino & Nipote sfaticato di PdP\\
    Qui & \multirow{3}{*}{$\left.\rule{0pt}{18pt}\right\}$Nipoti di Paperino}\\
    Quo & \\
    Qua & \\
    Paperina & Fidanzata di Paperino\\
    \end{tabular}
    \caption{Abitanti di Paperopoli}
    \label{tab:paperi}
    \end{table}
    \end{document}`
    (il vero contenuto non è esattamente questo, lo ammetto 🙂 ), mi chiedevo se c’è un modo per determinare automaticamente l’altezza della graffa invece che andare per tentativi con un valore numerico come ho fatto io.

    Ciao
    Matteo

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

      Ispirato da questo topic ho realizzato la seguente tabella:
      `
      \documentclass[a4paper]{article}
      \usepackage{multirow}

      \begin{document}
      \begin{table}[tb]
      \centering
      \begin{tabular}{ll}
      Abitante & Descrizione\\
      \hline
      Paperon de Paperoni & Fantastiliardario\\
      Paolino Paperino & Nipote sfaticato di PdP\\
      Qui & \multirow{3}{*}{$\left.\rule{0pt}{18pt}\right\}$Nipoti di Paperino}\\
      Quo & \\
      Qua & \\
      Paperina & Fidanzata di Paperino\\
      \end{tabular}
      \caption{Abitanti di Paperopoli}
      \label{tab:paperi}
      \end{table}
      \end{document}`
      (il vero contenuto non è esattamente questo, lo ammetto 🙂 ), mi chiedevo se c’è un modo per determinare automaticamente l’altezza della graffa invece che andare per tentativi con un valore numerico come ho fatto io.

      Non con multirow.
      `\newbox\bracedbox
      \newdimen\bracedboxht
      \newenvironment{braced}[1][l]
      {\setbox\bracedbox=\hbox\bgroup\begin{tabular}{@{}#1@{}}}
      {\end{tabular}\egroup
      \global\bracedboxht=\ht\bracedbox
      \global\advance\bracedboxht\dp\bracedbox
      \global\advance\bracedboxht-3pt
      \box\bracedbox}

      \newcommand\embrace[1]{%
      $\left\rbrace\vcenter{\hbox{\vrule width 0pt height\bracedboxht}}\right.$\ #1}`
      I nomi da raggruppare con la graffa vengono composti in una tabella a una colonna, ma prima questa è posta in una box che possiamo misurare. L’altezza complessiva di questa box è memorizzata (globalmente perché altrimenti TeX la dimenticherebbe passando alla cella successiva) e usata nella cella successiva per costruire una formula invisibile delle giuste dimensioni che possiamo circondare con \left e \right. Con una piccola riduzione che mi sembra adatta.
      `\begin{tabular}{ll}
      Abitante & Descrizione\\
      \hline
      Paperon de Paperoni & Fantastiliardario\\
      Paolino Paperino & Nipote sfaticato di PdP\\
      \begin{braced}
      Qui \\
      Quo \\
      Qua
      \end{braced} & \embrace{Nipoti di Paperino}\\
      Paperina & Fidanzata di Paperino
      \end{tabular}`
      Ciao
      Enrico

    • #22333
      Up
      0
      Down
      ::


      Perfetto, grazie mille.

      Ciao
      Matteo

    • #22334
      DMW
        Up
        0
        Down
        ::


        Il codice è molto semplice. Il \global davanti a quelle tre righe serve a rendere utilizzabile \bracedboxht (in maniera globale) da \embrace? O mi sbaglio?

        Ciao

        Andrea

        PS: non ho LaTeX sotto mano.

      • #22335
        Up
        0
        Down
        ::

        Il codice è molto semplice. Il \global davanti a quelle tre righe serve a rendere utilizzabile \bracedboxht (in maniera globale) da \embrace? O mi sbaglio?

        Certo: le celle di una tabella funzionano come gruppi e le modifiche ai parametri vengono annullate al di fuori della cella, se non sono date globalmente.

        Un’annotazione: per LaTeX le assegnazioni di valori ai contatori (\setcounter, \stepcounter, \refstepcounter e \addtocounter) sono sempre globali, mentre le altre non lo sono (\setlength, \addtolength, eccetera). Nel codice ho usato i comandi primitivi per assegnare valori alla lunghezza \bracedboxht, ma si possono usare anche \setlength e \addtolength con \global davanti.

        Ciao
        Enrico

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

    Go to top