A capo “forzato” in una tabella

  • Creatore
    Topic
  • #79041
    Up
    0
    Down
    ::


    Ciao a tutti! Seguo da un po’ questo forum, e vi ho trovato già molte risposte a molti problemini durante l’uso di LaTeX; da qualche giorno però sto impazzendo su una minuzia che non sono riuscito a risolvere.

    Il problema è con una (e non solo una) tabella, che volevo comporre in questo modo: nella prima colonna indicare il tipo di soluzione usata, nella seconda le componenti e nelle ultime due il volume finale e il pH.

    Il problema sorge dal fatto che le componenti dei tre tamponi sono più di una, e dovrebbero quindi essere raggruppate e allineate al tampone corrispondente.

    Dall’immagine allegata si capisce molto meglio: ho modificato con un editor d’immagini la prima riga, spostando in basso la posizione delle celle “Tampone ammonico”, “1L” e “9.6” ed evidenziando grossolanamente l’allineamento che vorrei ottenere con la prima riga rossa (da LaTeX mi aspetto molto meglio ovviamente 😛 ). La terza riga invece presenta lo stato attuale del mio output: semplicemente ho creato due righe separate, in cui la seconda contiene soltanto la cella “23 g CH3COONa”. Ovviamente NON è il risultato che vorrei ottenere. La seconda riga invece andrebbe più o meno bene, visto che le componenti sono tre e creando tre righe separate l’allineamento è quello corretto.

    La soluzione più semplice, che risolverebbe in un colpo solo questo ed altri problemi in altre tabelle, sarebbe avere un comando che “mandi a capo”, forzandolo, il testo di una cella: ovviamente \\ non funziona, \newline nemmeno, e, incapsulando il testo della cella e dividendolo con uno dei due separatori appena citati, ottengo nel migliore dei casi una semplice spaziatura eccessiva fra le due parti della cella, nel peggiore un errore nella compilazione.

    Ho provato ad usare il pacchetto multirow, come spiegato nell’Arte, ma quel pacchetto è funzionale a creare una riga con n sottorighe in cui però soltanto la prima cella è unita e centrata correttamente, mentre io vorrei farlo anche nella terza e nella quarta.

    Un altro tentativo è stato usare una colonna p, ma il risultato sballa lo stesso, perché la dimensione forzata della colonna può andare bene, magari, per la prima riga in cui il testo è più corto, ma non è sufficiente per la terza, producendo un’ulteriore a capo indesiderato. Usando tabularx il risultato è più o meno lo stesso ottenuto con la colonna p a dimensione manuale. Stesso dicasi per la colonna X.

    Basterebbe semplicemente mandare a capo il testo dove dico io. Tutto qua.

    Spero di essermi spiegato a dovere, e mi scuso se, nonostante abbia cercato in lungo e in largo prima di postare, c’è già una risposta da qualche parte che, ahimé, mi deve essere sfuggita!

    Grazie!

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 14 filoni di risposte
  • Autore
    Risposte
    • #79042
      Liverpool
      Partecipante
        Up
        0
        Down
        ::


        Ma perché, così non va bene?
        `\multirow{2}*{Tampone ammonico} & \SI{4.4}{ml} HClO\ped{4} & \multirow{2}*{\SI{1}{L}} & \multirow{2}*{9.6}\\
        & \SI{6}{ml} NH\ped{3} & & \\`

      • #79043
        Up
        0
        Down
        ::


        Ottima soluzione, non ci avevo pensato!

        A titolo del tutto informativo (e forse anche pratico, visto che potrebbe servirmi più in là) non c’è un modo esplicito per ottenere ciò che avevo pensato in prima battuta, ovvero mandare a capo il contenuto di una cella?

        EDIT: come fare per centrare verticalmente una colonna nell’ambiente tabularx? Senza usare m{}, perché vorrei lasciare a LaTeX il dimensionamento delle celle!

      • #79044
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          `\begin{tabularx}{\textwidth}{*3{>{\centering}X}}` per tre colonne col contenuto centrato e la larghezza calcoalta automaticamente.

        • #79045
          Up
          0
          Down
          ::

          Rackbox” post=78187Ottima soluzione, non ci avevo pensato!

          A titolo del tutto informativo (e forse anche pratico, visto che potrebbe servirmi più in là) non c’è un modo esplicito per ottenere ciò che avevo pensato in prima battuta, ovvero mandare a capo il contenuto di una cella?

          EDIT: come fare per centrare verticalmente una colonna nell’ambiente tabularx? Senza usare m{}, perché vorrei lasciare a LaTeX il dimensionamento delle celle!

          `\documentclass{article}
          \usepackage[T1]{fontenc}
          \usepackage[utf8]{inputenc}
          \usepackage[italian]{babel}
          \usepackage{booktabs,siunitx}

          \newcommand{\quantities}[1]{%
          \begin{tabular}{@{}c@{}}\strut#1\strut\end{tabular}%
          }

          \begin{document}
          \begin{tabular}{cccS[table-format=1.1]}
          \toprule
          Soluzione & Quantità& Volume finale & {pH} \\
          \midrule
          Tampone ammonico &
          \quantities{\SI{4.4}{mL} HClO$_4$ \\ \SI{6}{mL} NH$_3$} &
          \SI{1}{L} &
          9.6 \\
          \midrule
          Tampone ammonico${}+{}$Na$_2$EDTA &
          \quantities{\SI{4.4}{mL} HClO$_4$ \\ \SI{6}{mL} NH$_3$ \\ \SI{0.372}{g} EDTA} &
          \SI{1}{L} &
          9.6 \\
          \midrule
          Tampone acetico &
          \quantities{\SI{5.5}{mL} CH$_2$COOH \\ \SI{23}{g} CH$_3$COONa} &
          \SI{1}{L} &
          9.6 \\
          \bottomrule
          \end{tabular}
          \end{document}`
          Non c’è alcun bisogno di [tt]\multirow[/tt], anzi in questo caso è proprio sbagliato: con [tt]\quantities[/tt] specifichi ciò che va insieme nello stesso posto. Le righe orizzontali mi sembrano necessarie; in alternativa aumenta la spaziatura verticale fra le varie righe.

          [attachment=463]tamponi.jpg[/attachment]

          Ciao
          Enrico

          Attachments:
          You must be logged in to view attached files.
        • #79046
          Up
          0
          Down
          ::

          OldClaudio” post=78188`\begin{tabularx}{\textwidth}{*3{>{\centering}X}}` per tre colonne col contenuto centrato e la larghezza calcoalta automaticamente.

          Ok, quello ero già riuscito a farlo… Il problema è nella tabella allegata: la prima è una colonna X, le altre delle semplici colonne c. La prima cella della terza riga viene correttamente mandata a capo e centrata come giustamente gli ho detto di fare (vedi codice). Le altre celle della terza riga vorrei che fossero centrate verticalmente[\i], senza però usare la colonna m, che forzerebbe la dimensione delle celle stesse, mentre LaTeX riesce a gestirla senza problemi!

          `\begin{table}[htbp]
          \centering
          \begin{tabularx}{\columnwidth}{>{\centering}Xcccc}
          \toprule
          Soluzione & Quantità & Volume Finale & Titolo & pH\\
          \midrule
          Zolfo in tampone ammonico & 16 mg di \ce{Na2S} & 250 mL & 0.5 mM & 9.6\\
          Rame in tampone ammonico & 22 mg di \ce{CuCl2} & 250 mL & 0.5 mM & 9.6\\
          Stagno in tampone ammonico + \ce{Na2EDTA} & 28 mg di \ce{SnCl2} & 250 mL & 0.5 mM & 9.6\\
          Zinco in tampone ammonico & 36 mg di \ce{ZnSO4} & 250 mL & 0.5 mM & 9.6\\
          \bottomrule
          \end{tabularx}
          \caption{Soluzioni usate per la deposizione elettrochimica.}
          \label{tab:metalli}
          \end{table}`


          @egreg9
          : fantastico, era proprio quello di cui avevo bisogno! Ma, per curiosità, come hai fatto ad elaborare una soluzione del genere? Per me il codice della definizione di \quantities è del tutto incomprensibile, non avrei mai potuto scriverlo da solo… Grazie di nuovo!

          Attachments:
          You must be logged in to view attached files.
        • #79047
          Up
          0
          Down
          ::


          Mi permetto di uppare… Nessuno sa darmi una mano con la riga centrata verticalmente? Potete dare un’occhiata all’immagine del post precedente: si vede la terza riga la cui prima cella (essendo una colonna X) è stata spezzata correttamente da tabularx, ma il resto della riga rimane allineato in alto, e non centrato verticalmente come vorrei…

          Grazie!

        • #79048
          Up
          0
          Down
          ::

          Rackbox” post=78552Mi permetto di uppare… Nessuno sa darmi una mano con la riga centrata verticalmente? Potete dare un’occhiata all’immagine del post precedente: si vede la terza riga la cui prima cella (essendo una colonna X) è stata spezzata correttamente da tabularx, ma il resto della riga rimane allineato in alto, e non centrato verticalmente come vorrei…

          Non c’è alcun bisogno di usare colonne X:
          `\newcommand{\multicell}[2][l]{\begin{tabular}{@{}#1@{}}#2\end{tabular}} % nel preambolo
          \begin{table}[htbp]
          \centering
          \begin{tabular}{lcccc}
          \toprule
          Soluzione & Quantità & Volume Finale & Titolo & pH\\
          \midrule
          Zolfo in tampone ammonico & 16 mg di \ce{Na2S} & 250 mL & 0.5 mM & 9.6\\
          Rame in tampone ammonico & 22 mg di \ce{CuCl2} & 250 mL & 0.5 mM & 9.6\\
          \multicell{Stagno in tampone ammonico\\\qquad+ \ce{Na2EDTA}} & 28 mg di \ce{SnCl2} & 250 mL & 0.5 mM & 9.6\\
          Zinco in tampone ammonico & 36 mg di \ce{ZnSO4} & 250 mL & 0.5 mM & 9.6\\
          \bottomrule
          \end{tabular}
          \caption{Soluzioni usate per la deposizione elettrochimica.}
          \label{tab:metalli}
          \end{table}`
          Sinceramente vedrei molto meglio la colonna di sinistra con allineamento a sinistra. Se proprio insisti a volerla centrata, usa \multicell[c]{…} ed elimina [tt]\qquad[/tt].

          Ciao
          Enrico

        • #79049
          Up
          0
          Down
          ::

          egreg9″ post=78557

          Mi permetto di uppare… Nessuno sa darmi una mano con la riga centrata verticalmente? Potete dare un’occhiata all’immagine del post precedente: si vede la terza riga la cui prima cella (essendo una colonna X) è stata spezzata correttamente da tabularx, ma il resto della riga rimane allineato in alto, e non centrato verticalmente come vorrei…

          Non c’è alcun bisogno di usare colonne X:
          `\newcommand{\multicell}[2][l]{\begin{tabular}{@{}#1@{}}#2\end{tabular}} % nel preambolo
          \begin{table}[htbp]
          \centering
          \begin{tabular}{lcccc}
          \toprule
          Soluzione & Quantità & Volume Finale & Titolo & pH\\
          \midrule
          Zolfo in tampone ammonico & 16 mg di \ce{Na2S} & 250 mL & 0.5 mM & 9.6\\
          Rame in tampone ammonico & 22 mg di \ce{CuCl2} & 250 mL & 0.5 mM & 9.6\\
          \multicell{Stagno in tampone ammonico\\\qquad+ \ce{Na2EDTA}} & 28 mg di \ce{SnCl2} & 250 mL & 0.5 mM & 9.6\\
          Zinco in tampone ammonico & 36 mg di \ce{ZnSO4} & 250 mL & 0.5 mM & 9.6\\
          \bottomrule
          \end{tabular}
          \caption{Soluzioni usate per la deposizione elettrochimica.}
          \label{tab:metalli}
          \end{table}`
          Sinceramente vedrei molto meglio la colonna di sinistra con allineamento a sinistra. Se proprio insisti a volerla centrata, usa \multicell[c]{…} ed elimina [tt]\qquad[/tt].

          Ciao
          Enrico

          Perfetto, funziona! Però sono ancora sempre sbalordito da queste soluzioni un po’ “magiche” per me: come fare a “inventarsele” da soli, senza dover disturbare qua sul forum? Grazie!

        • #79050
          Up
          0
          Down
          ::

          Rackbox” post=78948Perfetto, funziona! Però sono ancora sempre sbalordito da queste soluzioni un po’ “magiche” per me: come fare a “inventarsele” da soli, senza dover disturbare qua sul forum? Grazie!

          Fra vent’anni ne saprai abbastanza anche tu. 🙂 Già, ho cominciato a usare LaTeX vent’anni fa. E TeX cinque/sei anni prima.

          Più seriamente: come in tutte le cose occorre farsi esperienza e sbattere il naso sui problemi.

          Ciao
          Enrico

        • #79051
          franen
          Partecipante
            Up
            0
            Down
            ::


            Approfitto dell’argomento per un discorso generale.
            Liverpool ha proposto di usare [tt]\multirow[/tt] per risolvere la prima richiesta. Anche quest’ultimo problema poteva essere risolto con [tt]\multirow[/tt].
            In entrambi i casi, Enrico, hai scelto di inserire una tabular all’interno delle celle in cui dovevano stare più righe, affermando che l’uso di [tt]\multirow[/tt]è addirittura sbagliato.

            Vorresti dirmi perché è preferibile inserire una tabella piuttosto che “unire” due celle?

            Fran

          • #79052
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Tabular senza opzioni di allineamento verticale produce una scatola il cui punto di riferimento è in un pnto tale che la tabella è centrata rispetto all’asse matematico; nelle celle adiacenti ci sono delle righe di testo appoggiate sulla loro linea di base e quindi con un certo asse matematico; Perciò i contenuti delle celle adiacenti di cui una contine una tabella, hanno gli assi matematici allineati e non bisogna andare a tentativi per centrare la cella di due righe con le celle adiacenti; se le celle adiacenti fossero delle celle di tipo m{…} la cella di due righe sarebbe comunque allineata con le celle adiacenti.
              Con \moltirow succede troppo spesso che sia necessario cercare sperimentalmente il numerino da inserire nell’argomento facoltativo per allineare correttamente i contenuti delle celle.

              Se poi la multicell contiene più di due righe, valgono ragionamenti simili.

              Secondo me, nonostante la soluzione perfetta di Enrico, sarebbe sempre meglio cercare di mettere assieme tabelle che non richiedano celle di più righe rese con \multirow o con \multicell. Per altro le tabelle sono sempre state difficili da comporre bene anche quando esistevano i maestri compositori con i i caratteri mobili.

            • #79053
              franen
              Partecipante
                Up
                0
                Down
                ::


                Grazie Claudio. Mi è tutto chiaro.
                Ho usato talmente poco \multirow che non mi è mai capitato di notare imprecisioni nel centraggio del testo nelle celle 🙂

                Fran

              • #79054
                Nino
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Salve a tutti! Non so perché, ma se provo ad utilizzare >{\centering}X nell’ultima cella della riga, mi dà un messaggio di errore e non compila:

                  extra alignment tab has been changed to \cr \end{tabularx}

                  Qualche suggerimento?

                • #79055
                  Up
                  0
                  Down
                  ::

                  Nino.” post=79178Salve a tutti! Non so perché, ma se provo ad utilizzare >{\centering}X nell’ultima cella della riga, mi dà un messaggio di errore e non compila:

                  extra alignment tab has been changed to \cr \end{tabularx}

                  Qualche suggerimento?

                  `>{\centering\arraybackslash}X`

                  Il problema è che [tt]\centering[/tt] ridefinisce [tt]\\[/tt].

                  Avviso Abusare delle colonne [tt]X[/tt] nuoce gravemente alla salute. In altre parole, le tabelle non devono necessariamente essere larghe quanto una riga di stampa; in generale devono essere larghe quanto serve.

                  Ciao
                  Enrico

                • #79056
                  Nino
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Grazie! Ora va tutto come dovrebbe, ma il risultato (come peraltro prevedibile) è migliore con 3 colonne c.
                    Volevo semplicemente fare una prova.:D

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

                Go to top