Errori nel compilare una longtable

  • Creatore
    Topic
  • #55346
    Up
    0
    Down
    ::


    Ciao a tutti.
    Il titolo parla da sé: compilando questo codice, che a Lorenzo non dà problemi

    `\documentclass[12pt]{article}

    \usepackage{booktabs,longtable}

    \begin{document}
    \begin{longtable}{ll}
    % didascalia ed etichetta
    \caption{Un esempio di tabella ripartita su più pagine.}
    \label{tab:longtable} \\
    % intestazione iniziale
    \toprule
    Comando & Effetto \\
    \midrule
    \endfirsthead
    % intestazione normale
    \multicolumn{2}{l}{\footnotesize\itshape\tablename~\thetable:
    continua dalla pagina precedente} \\
    \toprule
    Comando & Effetto \\
    \midrule
    \endhead
    % piede normale
    \midrule
    \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
    continua nella prossima pagina} \\
    \endfoot
    % piede finale
    \bottomrule
    \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
    si conclude dalla pagina precedente} \\
    \endlastfoot
    % corpo della tabella
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    a & a \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    b & b \\
    c & c \\
    c & c \\
    c & c \\
    c & c \\
    c & c \\
    c & c \\
    c & c \\
    c & c \\
    \end{longtable}
    \end{document}`

    ottengo questo:

    `This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010)
    \write18 enabled.
    entering extended mode
    (./prova-longtable.tex
    LaTeX2e <2009/09/24>
    Babel and hyphenation patterns for english, dumylang, nohyphenation, ge
    rman-x-2009-06-19, ngerman-x-2009-06-19, afrikaans, ancientgreek, ibycus, arabi
    c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
    h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
    h, french, galician, german, ngerman, swissgerman, monogreek, greek, hungarian,
    icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, marathi, or
    iya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian, kurmanji,
    lao, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk, pol
    ish, portuguese, romanian, russian, sanskrit, serbian, slovak, slovenian, spani
    sh, swedish, turkish, turkmen, ukrainian, uppersorbian, welsh, loaded.
    (/usr/local/texlive/2010/texmf-dist/tex/latex/base/article.cls
    Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
    (/usr/local/texlive/2010/texmf-dist/tex/latex/base/size12.clo))
    (/usr/local/texlive/2010/texmf-dist/tex/latex/booktabs/booktabs.sty)
    (/usr/local/texlive/2010/texmf-dist/tex/latex/tools/longtable.sty)
    (./prova-longtable.aux)
    ! Misplaced \omit.
    \multispan ->\omit
    \@multispan
    l.8 …empio di tabella ripartita su più pagine.}

    ?`

    Ora, posto che ho un Mac con TeX Live 2010 aggiornata e uso TeXShop impostato su UTF-8, come sapete, e che l’errore non è nuovo, e che ho SEMPRE avuto problemi nel compilare una longtable, provo a rispondermi da solo:

    1. ho copiato e incollato questo codice dal mio server di posta elettronica, che forse usa un’altra codifica e ottengo qualche errore;

    2. manca qualche pacchetto che ignoro;

    3. potrei evitare una long table, lo so, ma questa serve proprio 😀

    4. aiutatemi.

    Informo anche che ho provato a commentare tutto progressivamente e a rimettere tutto progressivamente, ma ottengo comunque errori, specialmente con la didascalia. Forse che una tabella di questo tipo ha bisogno del pacchetto caption per qualche motivo?

    Ciao
    Tommaso

Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #55347
      Up
      0
      Down
      ::


      Ciao Tommaso

      formatta tutto! il tuo Mac è andato 😀
      A parte gli scherzi…il tuo codice non mi dà alcun problema. Per vedere se si tratta di problemi di codifica dovresti provare a creare una longtable direttamente nell’editor. Se anche questa blocca la compilazione non saprei

      Ciao
      Ivan

    • #55348
      Up
      0
      Down
      ::

      Ciao a tutti.
      Il titolo parla da sé: compilando questo codice, che a Lorenzo non dà problemi

      `\documentclass[12pt]{article}

      \usepackage{booktabs,longtable}

      \begin{document}
      \begin{longtable}{ll}
      % didascalia ed etichetta
      \caption{Un esempio di tabella ripartita su più pagine.}
      \label{tab:longtable} \\
      % intestazione iniziale
      \toprule
      Comando & Effetto \\
      \midrule
      \endfirsthead
      % intestazione normale
      \multicolumn{2}{l}{\footnotesize\itshape\tablename~\thetable:
      continua dalla pagina precedente} \\
      \toprule
      Comando & Effetto \\
      \midrule
      \endhead
      % piede normale
      \midrule
      \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
      continua nella prossima pagina} \\
      \endfoot
      % piede finale
      \bottomrule
      \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
      si conclude dalla pagina precedente} \\
      \endlastfoot
      % corpo della tabella
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      \end{longtable}
      \end{document}`

      ottengo questo:

      `This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010)
      \write18 enabled.
      entering extended mode
      (./prova-longtable.tex
      LaTeX2e <2009/09/24>
      Babel and hyphenation patterns for english, dumylang, nohyphenation, ge
      rman-x-2009-06-19, ngerman-x-2009-06-19, afrikaans, ancientgreek, ibycus, arabi
      c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
      h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
      h, french, galician, german, ngerman, swissgerman, monogreek, greek, hungarian,
      icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, marathi, or
      iya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian, kurmanji,
      lao, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk, pol
      ish, portuguese, romanian, russian, sanskrit, serbian, slovak, slovenian, spani
      sh, swedish, turkish, turkmen, ukrainian, uppersorbian, welsh, loaded.
      (/usr/local/texlive/2010/texmf-dist/tex/latex/base/article.cls
      Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
      (/usr/local/texlive/2010/texmf-dist/tex/latex/base/size12.clo))
      (/usr/local/texlive/2010/texmf-dist/tex/latex/booktabs/booktabs.sty)
      (/usr/local/texlive/2010/texmf-dist/tex/latex/tools/longtable.sty)
      (./prova-longtable.aux)
      ! Misplaced \omit.
      \multispan ->\omit
      \@multispan
      l.8 …empio di tabella ripartita su più pagine.}

      ?`

      Ora, posto che ho un Mac con TeX Live 2010 aggiornata e uso TeXShop impostato su UTF-8, come sapete, e che l’errore non è nuovo, e che ho SEMPRE avuto problemi nel compilare una longtable, provo a rispondermi da solo:

      1. ho copiato e incollato questo codice dal mio server di posta elettronica, che forse usa un’altra codifica e ottengo qualche errore;

      2. manca qualche pacchetto che ignoro;

      3. potrei evitare una long table, lo so, ma questa serve proprio 😀

      4. aiutatemi.

      Informo anche che ho provato a commentare tutto progressivamente e a rimettere tutto progressivamente, ma ottengo comunque errori, specialmente con la didascalia. Forse che una tabella di questo tipo ha bisogno del pacchetto caption per qualche motivo?

      Ciao
      Tommaso

      Propendo per la presenza di caratteri stravaganti. Se copio e incollo non ho problemi. Naturalmente la presenza di lettere accentate senza una corrispondente dichiarazione della codifica può dare risultati scorretti.

      Non sono riuscito a riprodurre l’errore, però. Quello che fa \caption dentro una longtable è di inserire la didascalia per mezzo di qualcosa equivalente a \multicolumn{}{c}{}, dove è il numero di colonne della tabella, che longtable sa calcolare da sé. Evidentemente c’è qualcosa tra la graffa di chiusura di {ll} e \caption (propendo per caratteri invisibili di fine riga). Un comando \multicolumn deve infatti comparire per primo all’inizio di una riga o dopo un &.

      Ciao
      Enrico

    • #55349
      Up
      0
      Down
      ::


      Eccheccavolo! 😀

      Copiando e incollando dal Forum ora le cose vanno! Naturalmente ho dovuto specificare la codifica per avere quella “ù” accentata. Avevo visto giusto 😉 A volte si ottengono errori eliminabili soltanto riscrivendo da capo il codice su un file pulito.

      Ciao
      Tommaso


      @Ivan
      : ara, seto…

    • #55350
      Up
      0
      Down
      ::


      Risolto il problema, ne pongo un altro.

      Caricare o meno booktabs (per avere i filetti ben composti) influenza la scrittura dei “preliminari” nel codice di una longtable. In particolare:

      1. caricandolo, bisogna sempre mettere \\ tra intestazioni/piedi e i comandi specifici che li terminano (\endfirsthead, \endhead, \endfoot e \endlastfoot);

      2. non caricandolo, i vari \\ si possono omettere tranne che dopo un’intestazione normale strutturata come nel nostro esempio; oppure si possono anche lasciare dappertutto, che male non fanno;

      3. sembra che dopo \caption (o \label) \\ ci vada in ogni caso;

      4. è vero anche che booktabs non è obbligatorio in una longtable, ma lo si potrebbe voler caricare almeno per uniformità con le rimanenti tabelle del documento;

      5. inutile arroccarsi su certe posizioni: anche i detrattori più sfegatati hanno dovuto mettere una tabella lunga almeno una volta nella vita. 😉

      Detto questo, dovendo proporre il codice di una long table completo di ogni sua parte in modo che chi non vuole booktabs possa semplicemente commentare la riga di chiamata del pacchetto e i comandi dei filetti, proporremmo il codice seguente (scelte di codifica a parte):

      `% !TEX encoding = UTF-8 Unicode
      % !TEX TS-program = pdflatex

      \documentclass[12pt]{article}
      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage[italian]{babel}

      \usepackage{longtable}
      \usepackage{booktabs}

      \begin{document}
      \begin{longtable}{ll}

      % didascalia ed etichetta
      \caption{Un esempio di tabella ripartita su più pagine.}
      \label{tab:longtable} \\

      % intestazione iniziale
      \toprule
      Comando & Effetto \\
      \midrule
      \endfirsthead

      % intestazione normale
      \multicolumn{2}{l}{\footnotesize\itshape\tablename~\thetable:
      continua dalla pagina precedente} \\
      \toprule
      Comando & Effetto \\
      \midrule
      \endhead

      % piede normale
      %\midrule
      \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
      continua nella prossima pagina} \\
      \endfoot

      % piede finale
      %\bottomrule
      \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
      si conclude dalla pagina precedente} \\
      \endlastfoot

      % corpo della tabella
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      \end{longtable}
      \end{document}`

      Che dite? Dove sbagliamo?

      Ciao
      Tommaso

    • #55351
      Up
      0
      Down
      ::

      Risolto il problema, ne pongo un altro.

      Caricare o meno booktabs (per avere i filetti ben composti) influenza la scrittura dei “preliminari” nel codice di una longtable. In particolare:

      1. caricandolo, bisogna sempre mettere \\ tra intestazioni/piedi e i comandi specifici che li terminano (\endfirsthead, \endhead, \endfoot e \endlastfoot);

      Non mi pare che tu lo faccia, nell’esempio. I fine riga \\ servono perché vuoi un filetto.

      2. non caricandolo, i vari \\ si possono omettere tranne che dopo un’intestazione normale strutturata come nel nostro esempio; oppure si possono anche lasciare dappertutto, che male non fanno;

      3. sembra che dopo \caption (o \label) \\ ci vada in ogni caso;

      No, se vuoi che la didascalia si ripeta. Nel tuo esempio la didascalia fa parte del “firsthead” che è composto da didascalia, filetto \toprule, riga di intestazione e filetto \midrule.

      4. è vero anche che booktabs non è obbligatorio in una longtable, ma lo si potrebbe voler caricare almeno per uniformità con le rimanenti tabelle del documento;

      Si veda alla voce “Jacques II de Chabannes, dit Jacques de La Palice”. 🙂

      5. inutile arroccarsi su certe posizioni: anche i detrattori più sfegatati hanno dovuto mettere una tabella lunga almeno una volta nella vita. 😉

      Detto questo, dovendo proporre il codice di una long table completo di ogni sua parte in modo che chi non vuole booktabs possa semplicemente commentare la riga di chiamata del pacchetto e i comandi dei filetti, proporremmo il codice seguente (scelte di codifica a parte):

      `% !TEX encoding = UTF-8 Unicode
      % !TEX TS-program = pdflatex

      \documentclass[12pt]{article}
      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage[italian]{babel}

      \usepackage{longtable}
      \usepackage{booktabs}

      \begin{document}
      \begin{longtable}{ll}

      % didascalia ed etichetta
      \caption{Un esempio di tabella ripartita su più pagine.}
      \label{tab:longtable} \\

      % intestazione iniziale
      \toprule
      Comando & Effetto \\
      \midrule
      \endfirsthead

      % intestazione normale
      \multicolumn{2}{l}{\footnotesize\itshape\tablename~\thetable:
      continua dalla pagina precedente} \\
      \toprule
      Comando & Effetto \\
      \midrule
      \endhead

      % piede normale
      %\midrule
      \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
      continua nella prossima pagina} \\
      \endfoot

      % piede finale
      %\bottomrule
      \multicolumn{2}{r}{\footnotesize\itshape\tablename~\thetable:
      si conclude dalla pagina precedente} \\
      \endlastfoot

      % corpo della tabella
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      a & a \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      b & b \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      c & c \\
      \end{longtable}
      \end{document}`

      Che dite? Dove sbagliamo?

      Ciao
      Tommaso

      Nel non prevedere che la didascalia possa essere ripetuta. Dipende non solo dai gusti, ma anche dalla tabella. Proprio il tuo esempio è di una tabella che dovrebbe avere la ripetizione della didascalia e non i “continua” e “si conclude”, perché noterai che queste scritte sono più lunghe della larghezza naturale del corpo della tabella e, come sempre succede in questi casi, quello che avanza va a finire nell’ultima colonna. Horribile visu oppure horresco videns, a scelta. 🙂

      La cosa importante è consigliare di usare longtable solo se non se ne può fare a meno: spesso una tabella “lunga” si può risparmiare a favore di una lista, quasi certamente se ci sono solo due colonne.

      Ciao
      Enrico

    • #55352
      Up
      0
      Down
      ::


      Non capisco perché la didascalia si debba ripetere, quando si può scrivere una cosa come “continua” o “prosegue”, più pertinente a una cosa che non occupa una pagina soltanto.

      Ma il motivo ci sarà. Ovviamente, poi, questo era soltanto un esempio minimo compilabile di qualcosa che andasse a finire su almeno due pagine, e non un esempio reale. 😀

      In quanto al punto di domanda, se levo booktabs e commento tutti i comandi, bastano soltanto due \\ perché la compilazione riesca: dopo \label e dopo quel \multicolumn di cui parlo.

      Ciao
      Tommaso

    • #55353
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Guarda che le lunghe tabelle quando servono si devono fare; in questo caso si devono fare bene, non in modo tale da sollevare le obbiezioni disgustate del lettore “Horribile visu!” oppure “Horresco videns!” (Enrico è sempre formidabile nelle esclamazioni, e anche nelle citazioni a Mr. De La Palice 🙂 ).

        Allora: secondo me sarebbe opportuno usare il pacchetto caption per poter disporre del comando \caption* che mette una didascalia senza al parte fissa in neretto con il numero, che va quindi sostituita con qualcosa di equivalente. Nelle didascalie delle pagine successive alla prima e scritte con \caption* basta inserire una sola volta e molto laconicamente in corsivo fra parentesi: (continua) — ripeto: solo nella didascalia.

        Non scriverei niente nel piede, ma metterei solo il filetto.

        Tutto questo però sarebbe inutile o sprecato se la lunga tabella avesse solo due colonne magroline come quelle dell’esempio; ci sarebbe sicuramente qualche altro modo per riportare l’informazione di una tabella lunga e stretta, che è già brutta di per sé, figuriamoci con testa e piede che la slargano in modo orribile come succede con la tabella del tuo esempio.

        Per una tabella lunga e stretta, basta comporla con diverse colonne affiancate, magari senza usare i bei filetti di booktabs, e usando i filetti verticali, più un numero adeguato di \strut personalizzati (puntelli di cui si siano specificati altezza e profondità) per distanziare i filetti orizzontali affinché non battano sopra le maiuscole o sotto i discendenti delle minuscole.. I filetti verticali, tanto vituperati, in questo caso sarebbero necessari per separare i gruppi di colonne, non ogni colonna da ogni altra colonna adiacente.

        Una tabella non deve assomigliare all’orario dei treni; e sì che anche la benemerita ditta Pozzo, che li pubblicava fino a non molti anni fa, doveva per forza fare lunghe tabelle, spesso con troppi filetti. Ma almeno sapevano come riempire le pagine 😉

      • #55354
        Up
        0
        Down
        ::


        Prima richiedete un codice minimo, poi dite che non va bene 😉

        Mi (ci) preme dare un codice standard corretto e completo di tutte le parti possibili, tutto qui 😀

        Spes ultima mori.

        Ciao
        Tommaso

      • #55355
        Up
        0
        Down
        ::

        Non capisco perché la didascalia si debba ripetere, quando si può scrivere una cosa come “continua” o “prosegue”, più pertinente a una cosa che non occupa una pagina soltanto.

        Ma il motivo ci sarà. Ovviamente, poi, questo era soltanto un esempio minimo compilabile di qualcosa che andasse a finire su almeno due pagine, e non un esempio reale. 😀

        In quanto al punto di domanda, se levo booktabs e commento tutti i comandi, bastano soltanto due \\ perché la compilazione riesca: dopo \label e dopo quel \multicolumn di cui parlo.

        Vediamo: con o senza booktabs una specificazione come
        `\caption{testo}\label{xxx}
        \endfirsthead`
        funziona perfettamente. Naturalmente, se oltre alla didascalia vuoi nel firsthead anche una riga di tabella, dovrai specificare quando finisce la didascalia e lo fai aggiungendo \\. Contrariamente a quello che pensi, nel tuo esempio
        `% didascalia ed etichetta
        \caption{Un esempio di tabella ripartita su più pagine.}
        \label{tab:longtable} \\

        % intestazione iniziale
        \toprule
        Comando & Effetto \\
        \midrule
        \endfirsthead `
        tutto insieme costituisce il “firsthead”.

        Capisco che il tuo sia un esempio non reale, ma è venuto a fagiolo per mettere in evidenza certe particolarità di cui essere consapevoli.

        Ciao
        Enrico

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

    Go to top