problema xtab

  • Creatore
    Topic
  • #35532
    Up
    0
    Down
    ::


    Ciao
    ho bisogno di generare una tabella che è troppo grande per rientrare in un’unica pagina; ho scoperto che per risolvere il mio problema bisogna includere il pacchetto xtab. Poi vado a creare la suddetta tabella e il cosice che scrico è :

    \begin{table}[h!]
    \begin{center}
    \begin{xtabular}{|c||c|c|c|}
    \hline \hline

    \textbf{Regione} & \textbf{Lago} &\textbf{Categoria} & \textbf{Cordinate} \\ \hline \hline
    Abbruzzo & Barrea & B & $41°46′-13°58’$ \\ \hline
    & Bomba & A & $41°59′-14°22’$ \\ \hline
    .
    .
    .

    Val D’Aosta & Place Moulin & A & $45°54′-07°30’$ \\ \hline

    \end{xtabular}
    \end{center}
    \caption{\small{Bacini idrici ‘A’ e ‘B’ nel territorio italiano}}
    \label{tab_laghi_A_B}
    \end{table}

    Il risultato che ottengo è pessimo; prima che sia conclusa la prima pagina la tabella inizia a modificarsi come larghezza; poi termina esattamente a fine pagina senza lasciare neppure un millimetro libero dal fondo e non riprende a pagina successiva. Inoltre non viene neanche posizionata nel punto del testo in cui l’avevo inserita (avevo letto che a differenza di tabular, xtabular presentava questa caratteristica).
    Scusate se la domanda è cretina, ma non sono un esperto di latex.

Visualizzazione 20 filoni di risposte
  • Autore
    Risposte
    • #35533
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::

        ho bisogno di generare una tabella che è troppo grande per rientrare in un’unica pagina; ho scoperto che per risolvere il mio problema bisogna includere il pacchetto xtab. Poi vado a creare la suddetta tabella e il cosice che scrico è :
        `\begin{table}[h!]
        \begin{center}
        \begin{xtabular}{|c||c|c|c|}
        \hline \hline
        […]`Il risultato che ottengo è pessimo; prima che sia conclusa la prima pagina la tabella inizia a modificarsi come larghezza; poi termina esattamente a fine pagina senza lasciare neppure un millimetro libero dal fondo e non riprende a pagina successiva. Inoltre non viene neanche posizionata nel punto del testo in cui l’avevo inserita (avevo letto che a differenza di tabular, xtabular presentava questa caratteristica).
        Scusate se la domanda è cretina, ma non sono un esperto di latex.

        Ci sono parecche cose che non vanno.

        • Se la tabella è troppo grande, esistono diversi modi per affrontare il problema (li trovi descritti nell’Arte, quassù, con dovizia di esempi). Spezzarla su più pagine è uno di questi metodi. Personalmente, lo farei solo se gli altri sono davvero impraticabili.

        • Se hai deciso di ripartire una tabella su più pagine, esistono diversi pacchetti: xtab è uno di questi, ma ne estono anche altri, come ad esempio longtable.

        • Se usi xtab e inserisci una tabella con xtabular, di sicuro questa non va messa dentro un ambiente table. Le tabelle dentro l’ambiente table sono mobili, quelle create con xtab no.

        Per il resto, ti rimando a questo articolo:
        http://www.lorenzopantieri.net/LaTeX_files/TabelleRipartite.pdf

        In base alla mia (scarsa) esperienza, per avere un buon risultato sono inevitabili svariati tentativi manuali (segui la procedura descritta nell’articolo).

        Ci sono anche altre cose. Per esempio, per ottenere una didascalia in corpo piccolo, non si fa così:
        `\caption{\small{Bacini idrici 'A' e 'B' nel territorio italiano}} `
        Anche i filetti verticali e quelli doppi sono da togliere.

        Trovi tutto spiegato nel paragrafo sulle tabelle, qui:
        http://www.lorenzopantieri.net/LaTeX_files/ArteLaTeX.pdf

        Ciao,
        L.

      • #35534
        Up
        0
        Down
        ::


        Ciao.
        Occhio che xtab non mantiene uniforme la larghezza della tabella da una pagina a quella successiva.
        Questo problema non si presenta usando longtab.

        Ciao
        Tommaso

      • #35535
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::

          Ciao.
          Occhio che xtab non mantiene uniforme la larghezza della tabella da una pagina a quella successiva.
          Questo problema non si presenta usando longtab.

          Ciao Tommaso, hai ragione, anche se penso che si tratti di un problema (una caratteristica?) facilmente rimediabile, per esempio definendo colonne di tipo p.

          Pittosto, la mia esperienza con xtab non è stata del tutto positiva per un altro problema: le tabelle con xtab a volte non arrivano fino alla fine della pagina, ma si interrompono (molto) prima, anche se ci sarebbe spazio per (tante) altre righe. Anche la tabella del mio articolo ha quel problema, anche se in forma abbastanza lieve: lì non si nota molto, ma altre volte si nota, e il risultato finale è inaccettabile.

          Ciao,
          L.

        • #35536
          Up
          0
          Down
          ::


          Innanzitutto vi ringrazio per le celeri risposte. Ho provato a usare al posto dell pachetto xtab, quello da voi consigliato: longtable; in questa maniera il problema relativo alla larghezza è stato superato. Permangono invece gli altri problemi: la tabella non continua alla pagina successiva ma viene interrotta sull’unica pagina che viene riempita, e termina esattamente al limite inferiore della pagina.

        • #35537
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            Innanzitutto vi ringrazio per le celeri risposte. Ho provato a usare al posto dell pachetto xtab, quello da voi consigliato: longtable; in questa maniera il problema relativo alla larghezza è stato superato. Permangono invece gli altri problemi: la tabella non continua alla pagina successiva ma viene interrotta sull’unica pagina che viene riempita, e termina esattamente al limite inferiore della pagina.

            In realtà non è che ti abbia consigliato longtable, che peraltro conosco solo di fama. Come ti dicevo, per risolvere il problema della larghezza (sempre ammesso che sia un problema), basta usare delle colonne di tipo p. Qualcosa come
            `\begin{xtabular}{p{0.4\textwidth} p{0.4\textwidth}}`
            Ciao,
            L.

          • #35538
            Up
            0
            Down
            ::


            Grazie per i consigli. Ho risolto, il problema era che inserivo tutto in table. Grazie ancora per la disponibilità

          • #35539
            Up
            0
            Down
            ::

            Innanzitutto vi ringrazio per le celeri risposte. Ho provato a usare al posto dell pachetto xtab, quello da voi consigliato: longtable; in questa maniera il problema relativo alla larghezza è stato superato. Permangono invece gli altri problemi: la tabella non continua alla pagina successiva ma viene interrotta sull’unica pagina che viene riempita, e termina esattamente al limite inferiore della pagina.

            In realtà non è che ti abbia consigliato longtable, che peraltro conosco solo di fama. Come ti dicevo, per risolvere il problema della larghezza (sempre ammesso che sia un problema), basta usare delle colonne di tipo p. Qualcosa come
            `\begin{xtabular}{p{0.4\textwidth} p{0.4\textwidth}}`
            Ciao,
            L.

            Io insisto che questo modo di procedere è inaccettabile: le colonne di una tabella devono avere la loro larghezza, non una stabilita in modo forzatamente arbitrario. Se xtab non permette tabelle lunghe con le stesse larghezze di colonna su pagine diverse, la risposta è una sola: non usarlo e preferire longtable che questo problema non ce l’ha (ed è migliore anche sotto altri aspetti).

            Ciao
            Enrico

          • #35540
            lorenzo.pantieri
            Partecipante
              Up
              0
              Down
              ::

              Io insisto che questo modo di procedere è inaccettabile: le colonne di una tabella devono avere la loro larghezza, non una stabilita in modo forzatamente arbitrario. Se xtab non permette tabelle lunghe con le stesse larghezze di colonna su pagine diverse, la risposta è una sola: non usarlo e preferire longtable che questo problema non ce l’ha (ed è migliore anche sotto altri aspetti).

              Ciao Enrico, sono a venuto a conoscenza per la prima volta della possibilità di ripartire una tabella su più pagine con LaTeX dall’articolo di Mori sulle tabelle (su ArsTeXnica), in cui si menzionava il pacchetto supertabular. Poi, nel forum sono a venuto a conoscenza di xtab, che ne è uno sviluppo, e di longtable. Alla fine (ma che fine non è, come vedrai subito!), ho (avevo) optato per xtab: è più recente -pensavo- (longtable è del 1996, xtab del 2008) e anche più configurabile (per esempio, con xtab si possono impostare intestazione e piede iniziale, normale e finale, mentre longtable ha solo l’intestazione iniziale e normale e il piede normale e finale).

              Però la mia esperienza nel comporre tabelle con xtab non è stata positiva: il pacchetto fa fatica a spezzare nel punto giusto una tabella neppure troppo lunga, e per avere un risultato appena decente bisogna intervenire manualmente. In definitiva, una gran perdita di tempo. Nei mesi scorsi, ho visto che consigliavi longtable, ma per pigrizia non l’avevo considerato.

              Ieri pomeriggio, finalmente, ho ascoltato il tuo consiglio. Ho provato longtable, trovandolo decisamente migliore di xtab.

              Ho ache riscritto completamente il mio articolino:

              http://www.lorenzopantieri.net/LaTeX_files/TabelleRipartite.pdf

              Non ce ne sarebbe stato bisogno, visto che longtable è spiegato sulla tua Breve guida (e l’articolo ne è ora un semi-plagio). Però i miei lavori (guide comprese!) sono solo appunti, senza alcuna pretesa di originalità: servono prima di tutto a me per fissare quello che man mano imparo usando LaTeX. Poi li metto a disposizione di tutti, e se qualcuno li trova utili, meglio! 😉

              Ovviamente, mi piacerebbe che “qualcuno” desse un’occhiata al lavoro. In particolare, avrei bisogno di una conferma sul seguente passo, che vorrei inserire nella prossima versione dell’Arte, che (ancora) consiglia xtab.

              L’ambiente longtable si comporta come il normale tabular, ma controlla le dimensioni in altezza della tabella ad ogni riga: se queste dimensioni superano quelle dell’intera pagina, vengono inseriti automaticamente il contenuto opzionale del piede e il comando \end{tabular}, e la tabella viene fatta continuare su una nuova pagina inserendo il contenuto opzionale dell’intestazione. Il piede può essere usato per scrivere alla fine di ogni pagina in cui è presente la tabella l’indicazione “continua nella prossima pagina” (o “si conclude dalla pagina precedente”), mentre l’intestazione permette di scrivere l’indicazione “continua dalla pagina precedente”.

              Grazie mille,
              L.

            • #35541
              lorenzo.pantieri
              Partecipante
                Up
                0
                Down
                ::


                Aggiungo qualche altra domanda su longtable.

                1. Il pacchetto cerca di rendere uguali la larghezza delle diverse pagine della tabella. Per esempio, la tabella dell’articolo, ottenuta con
                `\begin{logntable}{l p{0.5\textwidth}}`
                si estende in realtà per tutta la larghezza della pagina. Succede sempre? UQali strategie adotta longtable per rendere uguale la larghezza delle celle (superando il limite di xtab, per intederci)?

                2. C’è modo di allineare il piede (normale e finale) al margine destro? Ho provato con \raggedleft, ma non funziona.

                Grazie,
                L.

              • #35542
                Up
                0
                Down
                ::

                Aggiungo qualche altra domanda su longtable.

                1. Il pacchetto cerca di rendere uguali la larghezza delle diverse pagine della tabella. Per esempio, la tabella dell’articolo, ottenuta con
                `\begin{logntable}{l p{0.5\textwidth}}`
                si estende in realtà per tutta la larghezza della pagina. Succede sempre? UQali strategie adotta longtable per rendere uguale la larghezza delle celle (superando il limite di xtab, per intederci)?

                Non mi risulta. Di fatto la tua longtable è più larga della giustezza. Puoi indicare un esempio del codice che usi?

                2. C’è modo di allineare il piede (normale e finale) al margine destro? Ho provato con \raggedleft, ma non funziona.

                `\multicolumn{}{r}{Testo}\endfoot`

                Il passo che riporti nell’altro messaggio è corretto; non userei troppi “opzionale” lì: forse è meglio specificare una volta per tutte che intestazioni e piedi sono facoltativi. Intestazione e piede ci sono sempre, in realtà, solo che sono vuoti se non li si specifica esplicitamente. Il vantaggio rispetto a xtab è che li si specifica dentro longtable, così non occorre azzerarli come capita con xtab.

                Ciao
                Enrico

              • #35543
                lorenzo.pantieri
                Partecipante
                  Up
                  0
                  Down
                  ::

                  Di fatto la tua longtable è più larga della giustezza. Puoi indicare un esempio del codice che usi?

                  Accipicchia, non me ne ero accorto. Il codice che ho usato è riportato a pagina 5 dell’articolo:
                  http://www.lorenzopantieri.net/LaTeX_files/TabelleRipartite.pdf
                  `\begin{longtable}{lp{0.5\columnwidth}}
                  % didascalia ed etichetta
                  \caption{Un esempio di tabella ripartita su più pagine}
                  \label{tab:longtable} \\
                  % intestazione iniziale
                  \toprule
                  \multicolumn{1}{c}{Comando} & \multicolumn{1}{c}{Effetto} \\
                  \midrule
                  \endfirsthead
                  % intestazione normale
                  {\footnotesize\itshape\tablename~\thetable:
                  continua dalla pagina precedente} \\
                  \toprule
                  \multicolumn{1}{c}{Comando} & \multicolumn{1}{c}{Effetto} \\
                  \midrule
                  \endhead
                  % piede normale
                  \midrule
                  {\footnotesize\itshape\tablename~\thetable:
                  continua nella prossima pagina} \\
                  \endfoot
                  % piede finale
                  \bottomrule
                  {\footnotesize\itshape\tablename~\thetable:
                  si conclude dalla pagina precedente} \\
                  \endlastfoot
                  % corpo della tabella
                  … & … \\
                  … & … \\
                  … & … \\
                  … & … \\
                  \end{longtable}`

                  Il passo che riporti nell’altro messaggio è corretto; non userei troppi “opzionale” lì: forse è meglio specificare una volta per tutte che intestazioni e piedi sono facoltativi. Intestazione e piede ci sono sempre, in realtà, solo che sono vuoti se non li si specifica esplicitamente. Il vantaggio rispetto a xtab è che li si specifica dentro longtable, così non occorre azzerarli come capita con xtab.

                  Benissimo. Adesso riformulo.

                  Grazie,
                  L.

                • #35544
                  Up
                  0
                  Down
                  ::

                  Di fatto la tua longtable è più larga della giustezza. Puoi indicare un esempio del codice che usi?

                  Accipicchia, non me ne ero accorto. Il codice che ho usato è riportato a pagina 5 dell’articolo:
                  http://www.lorenzopantieri.net/LaTeX_files/TabelleRipartite.pdf
                  `\begin{longtable}{lp{0.5\columnwidth}}
                  % didascalia ed etichetta
                  \caption{Un esempio di tabella ripartita su più pagine}
                  \label{tab:longtable} \\
                  % intestazione iniziale
                  \toprule
                  \multicolumn{1}{c}{Comando} & \multicolumn{1}{c}{Effetto} \\
                  \midrule
                  \endfirsthead
                  % intestazione normale
                  {\footnotesize\itshape\tablename~\thetable:
                  continua dalla pagina precedente} \\
                  \toprule
                  \multicolumn{1}{c}{Comando} & \multicolumn{1}{c}{Effetto} \\
                  \midrule
                  \endhead
                  % piede normale
                  \midrule
                  {\footnotesize\itshape\tablename~\thetable:
                  continua nella prossima pagina} \\
                  \endfoot
                  % piede finale
                  \bottomrule
                  {\footnotesize\itshape\tablename~\thetable:
                  si conclude dalla pagina precedente} \\
                  \endlastfoot
                  % corpo della tabella
                  … & … \\
                  … & … \\
                  … & … \\
                  … & … \\
                  \end{longtable}`

                  Servirebbe anche un pezzo della tabella propriamente detta.

                  Ciao
                  Enrico

                • #35545
                  lorenzo.pantieri
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    Servirebbe anche un pezzo della tabella propriamente detta.

                    Questo è l’inzio:
                    `\lstinline!\begin{longtable}[!\meta{\dots}\lstinline!]{!\meta{\dots}\lstinline!}!
                    &
                    L’ambiente \ambiente{longtable} si comporta come il normale \ambiente{tabular}, ma controlla le dimensioni in altezza della tabella a ogni riga: se queste dimensioni superano quelle dell'intera pagina, vengono inseriti automaticamente il contenuto opzionale del piede e il comando \lstinline!\end{tabular}!, e la tabella viene fatta continuare su una nuova pagina inserendo il contenuto opzionale dell'intestazione. Il piede può essere usato per scrivere alla fine di ogni pagina in cui è presente la tabella l'indicazione “continua nella prossima pagina'' (o “si conclude dalla pagina precedente''), mentre l'intestazione permette di scrivere l'indicazione “continua dalla pagina precedente''. \\
                    \lstinline!\end{longtable}!
                    &
                    Conclude l'ambiente \ambiente{longtable}. Si noti che il pacchetto \pacchetto{longtable} cerca di fare in modo che la larghezza delle colonne della tabella non vari tra le diverse pagine. \\
                    &
                    \emph{Nota:} In mancanza di impostazioni specifiche, una tabella creata con \pacchetto{longtable} è automaticamente centrata. Se si desidera un comportamento differente, l'ambiente \ambiente{longtable} può essere richiamato con il parametro opzionale \texttt{[l]}, che allinea la tabella al margine sinistro, oppure \texttt{[r]}, che la allinea al margine destro. \\
                    \comando{caption}\texttt{[}\meta{\dots}\texttt{]}\texttt{\{}\meta{\dots}\texttt{\}}
                    &
                    Imposta la didascalia della tabella; va di regola nell'intestazione iniziale. (Il pacchetto offre anche la possibilità di scrivere più didascalie per una singola tabella; le didascalie, se presenti, possono essere uguali in ciascuna pagina o diverse sulla prima e quelle successive. Per maggiori dettagli si rimanda a~\citep[p.~16]{gregorio:breveguida}.) \\
                    &
                    \emph{Nota:} I seguenti quattro comandi sono opzionali. Ciascuno di essi va preceduto da un comando di fine riga \lstinline!\\! seguito, eventualmente, da una linea orizzontale. L’intestazione iniziale può coincidere con l’intestazione normale, così come il piede finale può coincidere con il piede normale. Ciascuno di questi elementi può mancare, ma è consigliabile che compaiano almeno le intestazioni o i piedi per aiutare il lettore a capire che la stessa tabella occupa più di una pagina. \\`
                    (Serve il pacchetto listings, ovviamente). Inoltre:
                    `\newcommand{\meta}[1]{$\langle${\normalfont\itshape#1}$\rangle$}

                    \DeclareRobustCommand*{\pacchetto}[1]{{\normalfont\sffamily#1}%
                    \index{Pacchetto!#1@\textsf{#1}}%
                    \index{#1@\textsf{#1}}}

                    \DeclareRobustCommand*{\ambiente}[1]{{\normalfont\ttfamily#1}%
                    \index{Ambiente!#1@\texttt{#1}}%
                    \index{#1@\texttt{#1}}}`
                    Ciao,
                    L:

                  • #35546
                    Up
                    0
                    Down
                    ::

                    Servirebbe anche un pezzo della tabella propriamente detta.

                    Questo è l’inizio:
                    `\lstinline!\begin{longtable}[!\meta{\dots}\lstinline!]{!\meta{\dots}\lstinline!}!
                    &
                    …`

                    La risposta è semplice: l’ampiezza della prima colonna è, usando Palatino a corpo 12, 167pt; la cella più ampia è proprio la prima. Con ClassicThesis la giustezza è 312pt, mentre \tabcolsep è 6pt. Adesso facciamo il conto:

                    6 + 167 + 6 + 6 + 156 + 6 = 347

                    che dà una sporgenza di 35pt, cioè 1,23cm se non ho fatto male il calcolo. Mi pare che corrisponda. A corpo 11 la sporgenza è di 21pt, cioè 7,4mm; a corpo 10 ti avanzerebbero 8pt.

                    Ciao
                    Enrico

                  • #35547
                    lorenzo.pantieri
                    Partecipante
                      Up
                      0
                      Down
                      ::

                      Il passo che riporti nell’altro messaggio è corretto; non userei troppi “opzionale” lì: forse è meglio specificare una volta per tutte che intestazioni e piedi sono facoltativi. Intestazione e piede ci sono sempre, in realtà, solo che sono vuoti se non li si specifica esplicitamente. Il vantaggio rispetto a xtab è che li si specifica dentro longtable, così non occorre azzerarli come capita con xtab.

                      Ecco la nuova versione di quel passo.

                      L’ambiente longtable si comporta come il normale tabular, ma controlla le dimensioni in altezza della tabella a ogni riga: se queste dimensioni superano quelle dell’intera pagina, vengono inseriti automaticamente il contenuto del piede e il comando \end{tabular}, e la tabella viene fatta continuare su una nuova pagina inserendo il contenuto dell’intestazione. Il piede può essere usato per scrivere alla fine di ogni pagina in cui è presente la tabella l’indicazione “continua nella prossima pagina” (o “si conclude dalla pagina precedente”), mentre l’intestazione permette di scrivere l’indicazione “continua dalla pagina precedente”. Piedi e intestazioni sono facoltativi (se non li si specifica esplicitamente sono vuoti e non viene stampato nulla), ma è consigliabile che compaiano almeno le intestazioni (o i piedi) per aiutare il lettore a capire che la stessa tabella occupa più di una pagina.

                      Ora questo passo è presente, pari pari, nell’Arte. Un motivo in più per cui vi chiedo di darci un’occhiata.

                      La risposta è semplice: l’ampiezza della prima colonna è, usando Palatino a corpo 12, 167pt; la cella più ampia è proprio la prima.

                      Chiarissimo, Enrico. Ho appena riscritto la tabella (accorciando quella cella). Ora il problema non ci presenta più.

                      hhtp://www.lorenzopantieri.net/LaTeX_files/ArteLaTeX.pdf

                      Ho notato che il problema può presentarsi anche se il piede (o l’intestazione) è troppo lungo. Evidentemente, il pacchetto longtable conisdera il piede (e l’intestazione) come parte di una sola colonna. In altre parole, il piede (e l’intestazione) non si estende per più colonne: conviene scegliere un piede corto, quindi. Per esempio, nella tabella dell’articolo ho dovuto scrivere il piede in \scriptsize; in \footnotesize rendeva la prima colonna troppo larga, e la tabella sbordava ancora.

                      Mi sbaglio? C’è modo di rimediare (avendo un piede libero di estendersi per tutte le colonne della tabella?

                      `\multicolumn{}{r}{Testo}\endfoot`
                      Ancora una domanda: il valore
                      di questo codice è il numero delle colonne della tabella, giusto?

                      Grazie mille,
                      L.

                    • #35548
                      Up
                      0
                      Down
                      ::

                      Ho notato che il problema può presentarsi anche se il piede (o l’intestazione) è troppo lungo. Evidentemente, il pacchetto longtable conisdera il piede (e l’intestazione) come parte di una sola colonna. In altre parole, il piede (e l’intestazione) non si estende per più colonne: conviene scegliere un piede corto, quindi. Per esempio, nella tabella dell’articolo ho dovuto scrivere il piede in \scriptsize; in \footnotesize rendeva la prima colonna troppo larga, e la tabella sbordava ancora.

                      Mi sbaglio? C’è modo di rimediare (avendo un piede libero di estendersi per tutte le colonne della tabella?

                      `\multicolumn{}{r}{Testo}\endfoot`
                      Ancora una domanda: il valore
                      di questo codice è il numero delle colonne della tabella, giusto?

                      Quello che metti da un \\ (o all’inizio della tabella) e chiudi con \endhead, \endfirsthead, \endfoot o \endlastfoot è trattato come una riga di tabella allo stesso modo delle altre: longtable le memorizza e le usa quando servono. Quindi, se non ci metti &, quel testo fa parte della prima colonna, per questo ti ho indicato l’uso di \multicolumn. Come pensavi sta per il numero di colonne da “unificare”; direi che normalmente si usa il numero di colonne della tabella, ma non è obbligatorio.

                      Ciao
                      Enrico

                    • #35549
                      lorenzo.pantieri
                      Partecipante
                        Up
                        0
                        Down
                        ::

                        Quello che metti da un \\ (o all’inizio della tabella) e chiudi con \endhead, \endfirsthead, \endfoot o \endlastfoot è trattato come una riga di tabella allo stesso modo delle altre: longtable le memorizza e le usa quando servono. Quindi, se non ci metti &, quel testo fa parte della prima colonna, per questo ti ho indicato l’uso di \multicolumn. Come pensavi sta per il numero di colonne da “unificare”; direi che normalmente si usa il numero di colonne della tabella, ma non è obbligatorio.

                        Se ho capito bene, nella mia tabella a due colonne potrei scrivere
                        `\multicolumn{2}{r}{Testo lunghissimo}\endfoot`
                        per avere al piede un “testo lunghissimo” che si estende su entrambe le colonne della tabella? Ora non ho LaTeX sotto mano per verificare, ma non mi sembrava fosse così…

                        Grazie mill,
                        L:

                      • #35550
                        OldClaudio
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Io è un po’ di tempo che non uso più longtable; probabilmente faccio male, perché gli aggiornamenti vengono fatti appunto per eliminare gli inconvenienti che si presentano; se riprovassi a ricomporre con longtable le lunghe tabelle che mi avevano fatto preferire supertabular, forse oggi non incontrerei gli stessi inconvenienti che avevo incontrato allora. Questa premessa serve per fare la tara a ciò che sto per dire.

                          1) Specificare tutte le colonne di supertabular con il descrittore p{…} è metodologicamente scorretto, come ha fatto notare Enrico; tuttavia bisogna sempre apportare delle correzioni que a là, quindi non mi scandalizzo se così facendo e constatando il risultato, aggiusto le larghezze di ogni colonna per ottimizzare il tutto.
                          2)… Già, ma è proprio quello che fa longtable, solo che lo fa in modo automatico; gli occorrono due o tre compilazioni, ma alla fine ce la fa; poi bisogna ancora aggiustare qualche inturruzione di pagina non ottimale, ma insomma il più è fatto. Ci riproverò.
                          3) Lorenzo: \multicolumn{2}{r}{piede lunghissimo} non va bene, perché il piede lunghissimo viene comunque copmposto su una sola riga, la cui lunghezza, se maggiore della larghezza delle due colonne “normali”, stabilisce la larghezza dell’intera tabella, che può di nuovo uscire dai margini; se il titolo/piede/intestazione è davvero lunghissimo, allora diventa necessario comporlo su più righe e diventa quindi obbligatorio usare il descrittore p{…}; siamo di nuovo daccapo con la ricerca ottimale della larghezza da specificare procedendo a mano.

                          Conclusione: certamente riproverò ad usare longtable e vedrò se con le mie tabelle problematiche longtable va meglio di supertabular. In ogni caso va tenuto sempre presente che anche se alcune macro automatizzano qualche cosa, l’intervento manuale in molti casi con le tabelle molto lunghe continua ad essere necessario.

                        • #35551
                          Up
                          0
                          Down
                          ::

                          Io è un po’ di tempo che non uso più longtable; probabilmente faccio male, perché gli aggiornamenti vengono fatti appunto per eliminare gli inconvenienti che si presentano; se riprovassi a ricomporre con longtable le lunghe tabelle che mi avevano fatto preferire supertabular, forse oggi non incontrerei gli stessi inconvenienti che avevo incontrato allora. Questa premessa serve per fare la tara a ciò che sto per dire.

                          1) Specificare tutte le colonne di supertabular con il descrittore p{…} è metodologicamente scorretto, come ha fatto notare Enrico; tuttavia bisogna sempre apportare delle correzioni que a là, quindi non mi scandalizzo se così facendo e constatando il risultato, aggiusto le larghezze di ogni colonna per ottimizzare il tutto.
                          2)… Già, ma è proprio quello che fa longtable, solo che lo fa in modo automatico; gli occorrono due o tre compilazioni, ma alla fine ce la fa; poi bisogna ancora aggiustare qualche inturruzione di pagina non ottimale, ma insomma il più è fatto. Ci riproverò.
                          3) Lorenzo: \multicolumn{2}{r}{piede lunghissimo} non va bene, perché il piede lunghissimo viene comunque copmposto su una sola riga, la cui lunghezza, se maggiore della larghezza delle due colonne “normali”, stabilisce la larghezza dell’intera tabella, che può di nuovo uscire dai margini; se il titolo/piede/intestazione è davvero lunghissimo, allora diventa necessario comporlo su più righe e diventa quindi obbligatorio usare il descrittore p{…}; siamo di nuovo daccapo con la ricerca ottimale della larghezza da specificare procedendo a mano.

                          Conclusione: certamente riproverò ad usare longtable e vedrò se con le mie tabelle problematiche longtable va meglio di supertabular. In ogni caso va tenuto sempre presente che anche se alcune macro automatizzano qualche cosa, l’intervento manuale in molti casi con le tabelle molto lunghe continua ad essere necessario.

                          La guerra fra longtable e supertabular! C’è da quando esistono i due pacchetti! Devo dire che supertabular non mi ha mai convinto, ma in genere non mi convincono le tabelle a più pagine che cerco di evitare come la peste. 🙂 È quasi impossibile rendere una longtable larga quanto la giustezza senza usare colonne p e fare conti con \tabcolsep, sia con longtable che con supertabular (o xtab). Uno dei vantaggi di longtable è che cerca di centrare la tabella rispetto ai margini, rendendo spesso non indispensabile l’aggiustamento delle larghezze.

                          Per il problema del “piede/intestazione” lunghissimo, non è vietato che l’oggetto sia formato da più righe:
                          `\begin{longtable}{ccc}
                          abc & def\\
                          xyz & uvw
                          \endfoot
                          eee & fff & ggg\\
                          eee & fff & ggg\\
                          eee & fff & ggg\\

                          \end{longtable}`
                          usa quelle prime due righe come piede al termine di ogni pagina. Un piede o intestazione lunghi li vedrei davvero molto male, non parliamo poi di testo giustificato. 🙂

                          Ciao
                          Enrico

                        • #35552
                          lorenzo.pantieri
                          Partecipante
                            Up
                            0
                            Down
                            ::

                            La guerra fra longtable e supertabular!

                            Innanzitutto ringrazio Enrico e Claudio per il loro aiuto.

                            Arrossisco nel dire che avevo preso una cantonata. Definire un’intestazione o un piede con \multicolumn permette, naturalmente (non so proprio come ha fatto a sfuggirmi), di avere intestazione e piede che si estendono su tutte le colonne della tabella. Mi riferisco alla tabella del mio articolino, appena aggiornato.
                            http://ww.lorenzopantieri.net/LaTeX_files/ArteLaTeX.pdf
                            Come si può vedere, l’intestazione “Tabella 1: continua dalla pagina precedente” a pagina 4 e 5 si estende per l’intera lunghezza della tabella.

                            Il codice che ho usato per l’intestazione (normale) è questo:
                            `\multicolumn{2}{l}{\footnotesize\itshape\tablename~\thetable:
                            continua dalla pagina precedente}`
                            Il piede normale è così definito:
                            `\multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
                            continua nella prossima pagina}`
                            Il piede finale:
                            `\multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
                            si conclude dalla pagina precedente} `
                            Con questi codici -lo dico per i lettori principianti del forum!- le intestazioni sono allineate a sinistra e i piedi sono allineati a destra (come trovo logico che sia); piedi e intestazioni possono estendersi per l’intera larghezza della tabella.

                            Sono codici che funzionano benissimo, ma che hanno il piccolo difetto di essere “manuali”: il primo argomento di \multicolumn è l per le intestazioni e r per i piedi. Inoltre bisogna specificare, nel secondo argomento di \multicolumn, il numero delle colonne della tabella. Se ben ricordo, xtab pensa a far questo automaticamente, e in questo ha dunque un piccolissimo vantaggio su longtable.

                            Quanto a piedi e intestazioni su più righe (problema peraltro risolto da Enrico), trovo che non sia una buona idea: l’intestazione serve per dire “continua dalla pagina precedente”, il piede per dire “continua nella prossima pagina”. Altri usi mi sembrano inappropriati (tanto più che longtable dà anche la possibilità, se proprio lo si desidera, di avere più didascalie per una singola tabella).

                            Circa la guerra tra longtable e longtable/xtab, per quel poco che li ho usati trovo che sia migliore longtable: spezza meglio le tabelle, e il fatto di avere le pagine della tabella larghe uguali è una bella comodità.

                            Grazie mille,
                            L.

                          • #35553
                            OldClaudio
                            Partecipante
                              Up
                              0
                              Down
                              ::


                              Sì, ho provato e la presente versione di longtable funziona meglio di supertabular; davvero rende le colonne della stessa larghezza, cosa che supertabulr fa solo se tutte le colonne sono descritte con i descrittori p{…} standard, oppure m{…} e b{…} del pacchetto array. in compenso, a pari altre condizioni (larghezze fisse, tabcolsep, eccetera) mi pare che longtable prenda più spazio in orizzontale; poco poco, ma circa 1em in più su una tabella a tre clonne (vedi tabella B8 dell’appendice di Introduzione all’arte…). Probabilmente con supertabular avevo ridotto \tabcolsep e non ho fatto attenzione a questo dettaglio.

                              Concordo con Enrico che le tabelle su più pagine dovrebbero essere evitate; anche le tabelle routate di 90gradi; tuttavia capitano lunghi elenchi di cose che vanno comunque incolonnati e io trovo che sia sempre meno peggio usare una tabella su più pagine che un ambiente tabbing.

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

                          Go to top