Un bug di LaTeX nella composizione delle didascalie

  • Creatore
    Topic
  • #48213
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      Carissimi, LaTeX è il non plus ultra nella composizione di documenti scientifici, e i documenti scientifici sono ricchissimi di tabelle. Quindi LaTeX gestisce le tabelle in maniera impeccabile. Giusto?

      Ripensateci. 🙁

      A giudicare da quello che si ottiene compilando il codice seguente, si direbbe che chi ha progettato le classi standard non abbia mai scritto una tabella in vita sua. 🙁
      `\documentclass{article}
      \usepackage{booktabs}
      %\usepackage{caption}
      %\captionsetup[table]{position=top}

      \begin{document}

      \begin{table}[tp]
      \caption{Didascalia.}
      \centering
      %\medskip
      \begin{tabular}{ll}
      \toprule
      Alcaloide & Origine \\
      \midrule
      atropina & belladonna \\
      chinina & china \\
      morfina & papavero \\
      nicotina & tabacco \\
      \bottomrule
      \end{tabular}

      \end{table}

      \begin{table}[tp]
      \caption{Didascalia.}
      %\vspace{-\bigskipamount}
      \[
      \begin{array}{ll}
      \toprule
      f(x) & f’(x) \\
      \midrule
      k & 0 \\
      x^n & nx^{n-1} \\
      e^x & e^x \\
      \sin x & \cos x \\
      \bottomrule
      \end{array}
      \]
      \end{table}

      \end{document}`

      Lo spazio tra la didascalia e la tabella è nel primo caso (tabella testuale prodotta con tabular) insufficiente, nel secondo (tabella matematica prodotta con array) esagerato. (Evidentemente chi ha progettato le classi standard ignorava, oltre alle tabelle, anche il motto latino “in medio stat virtus”…) 👿

      Soluzioni?

      1. Per curare la tabella fatta con tabular basta inserire un \medskip tra la dida e tabular, ma questa non è vita: un \medskip puà sempre sfuggire, e occuparsi della forma dovrebbe essere compito di LaTeX e non dell’utente.

      2. Caricare il pacchetto caption con l’impostazione \captionsetup

      {position=top} cura il problema con tabular: ora non è più necessario dare \medskip ogni volta! Però l’autore di caption ha fatto le cose a metà: la tabella con array resta mal composta, ed è necessario rimediare a mano dando un bel \vspace{-\bigskipamount} ogni volta. 🙁

      È così difficile dire a LaTeX: “se trovi un ambiente array dentro a table, riduci sempre la spaziatura di un \bigskipamount?

      È così difficile scrivere un codice così e integrarlo non dico nelle classi standard, ma almeno in caption?

      Sopratutto, non è ora che chi sa farlo progetti una classe moderna fatta come dio comanda, senza i difettucci delle classi standard?

      A voi,
      L.

    Visualizzazione 11 filoni di risposte
    • Autore
      Risposte
      • #48214
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao Lorenzo,
          ho fatto alcune prove e ti riporto le mie impressioni:

          * Per il caso della tabella standard il guaio viene causato da booktabs, quindi se vogliamo i suoi filetti, occorre caricare caption (secondo me l’opzione position=top non influisce sulla posizione della didascalia).

          * per il caso della tabella matematica, penso che sia un caso anomalo perché l’ambiente flottante table si aspetta una tabella standard. La soluzione è appunto affrontare direttamente il problema tentando di generare un ambiente flottante apposito per queste tabelle matematiche, chiamato per esempio mathtable.

          Questo che hai incontrato penso sia un problema di fondo strettamente inerente al linguaggio. Molte moltissime volte, ho dovuto ricredermi sull’effetto che avrebbe avuto un comando, avendo immaginato un comportamento a volte molto diverso da quello reale di LaTeX (per esempio la mia lotta con gli spazi verticali o con i parametri di layout della pagina).

          Nuovi linguaggi da mettere alla prova quello del nuovo LaTeX3 e quello di ConTeXt mark iv (se solo riuscissi ad installarlo sul mio sistema…), forse daranno nuovo impulso grazie ad una miglior sintassi.

          LaTeX3 avrà un interfaccia verso TeX più coerente e, anche se non ho ancora capito come, dovrebbe ovviare ai problemi derivanti dall’ecosistema dei pacchetti (un arcipelago di dialetti).
          ConTeXt, ha il vantaggio che fin dalla nascita ha fatto suo un linguaggio assai compatto e coerente, facile da utilizzare (se solo si disponesse di una documentazione migliore…), e molto flessibile.
          Due filosofie diverse, una forse più orientata alla tipografia e l’altra più orientata alla produzione di documenti in ambienti tecnici ed aziendali.

          Speriamo che Luke Skywalker riporti equilibrio nella forza …
          Roberto.

          Ps. Se solo disponessi di una spada laser…anche se per il momento mi godo la vittoria sulla Morte Nera come ho scritto in questo post http://www.guit.sssup.it/phpBB2/viewtopic.php?t=8376

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

            Per il caso della tabella standard il guaio viene causato da booktabs

            Non direi. Anche usando \hline (peraltro orrido: ecco un altro difetto delle classi standard), il problema c’è:
            `\documentclass{article}

            \begin{document}

            \begin{table}[tp]
            \caption{Didascalia.}
            \centering
            \begin{tabular}{ll}
            \hline
            Alcaloide & Origine \\
            \hline
            atropina & belladonna \\
            chinina & china \\
            morfina & papavero \\
            nicotina & tabacco \\
            \hline
            \end{tabular}
            \end{table}

            \end{document}`

            per il caso della tabella matematica, penso che sia un caso anomalo perché l’ambiente flottante table si aspetta una tabella standard.

            L’ambiente array è standard (e le tabelle matematiche si usano spesso): ma table fa quel difetto lo stesso.

            A me, più che LaTeX3, basterebbe una classe che non avesse tutti i difettucci di quelle stadard: Enrico ci ha spiegato che, per ragioni di retro-compatibilità, è bene che le classi standard non vengano toccate, e va bene. Però sarebbe ora che venissero scritte tre classi (per gli articoli, le relazioni e i libri) senza i difetti noti di quelle standard. I pacchetti che rimediano, fra l’altro, ci sono già. Meglio usare una nuova classe che usare i pacchetti (caption, emptypage, booktabs…) come “pezze” per i difetti di quelle vecchie.

            Ciao,
            L.

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


              Si è vero, booktabs non influisce sulla distanza della didascalia dalla tabella come mi era parso nelle prove fatte.

              Naturalmente se si disponesse di tre nuove classi standard più efficaci sarebbe già un passo avanti, ma come ottenerle?

              Potrebbero essere scritte e caricate su CTAN da persone esterne al LaTeX3 Team come normale evoluzione del linguaggio LaTeX, oppure scritte in stretta collaborazione con il team.
              Ma se si decidesse di affrontare un tale lavoro, penso che convenga integrarlo con LaTeX3 e non con LaTeX2e. Tra l’altro il Team dovrà allegare al LaTeX3 qualche tipo di classe standard credo.

              Insomma, credo sia meglio sviluppare gli elementi importanti con la nuova piattaforma, e far lì tesoro dell’esperienza di questi così tanti anni di lavoro.
              Bye.

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

                Ma se si decidesse di affrontare un tale lavoro, penso che convenga integrarlo con LaTeX3 e non con LaTeX2e.

                Non mi pronuncio: LaTeX3 ancora non c’è, per ora sospendo il giudizio. Restano aperti due problemi:
                a) come rimediare oggi al bug delle tabelle con array, senza dover scrivere \vspace{-\bigskipamount} ogni volta;
                b) per il futuro, incrociare le dita per nuove classi migliori di quelle standard (magari apro un topic con la mia wishing list).

                Ciao,
                L.

              • #48218
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Il comportamente della classe book, ma va bene anche report o article, lamentato da Lorenzo discende da due o tre fatti storici.

                  1) le classi originarie sono state scritte inizialmente per gli americani che mettono la didascalia sotto alle tabelle come anche sotto alle figure (vedi anche Introduzione).

                  2) per motivi di retrocompatibilità il LaTeX3 Team si rifiuta di modificare le classi standard; si rifiuta anche di correggere gli errori plateali come quello dell’ambiente eqnarray, oltre a quello della didascalia solamente inferiore.

                  3) l’array va introdotto in ambiente matematico e \[…\] introduce gli spazi mancanti; per altro l’ambiente table non viene quasi mai usato per introdurre array, quindi l’esempio di Lorenzo, correttissimo, è esoterco, nel senso che esisterebbero in quei pochi casi, quand’anche \caption funzionasse bene, degli altri sistemi, per esempio mettere l’array dentro una \makebox di larghezza pari a \textwidth, specificando il modo matematico in linea ma dichiarandovi dentro \displaystyle. sarebbe una operazione di cui ricordarsi, ma che si eseguirebbe una volta al mille (forse costringendo gli utenti a non usare array dentro table).

                  4) In realtà esistono già altre classi che realizzano quello che Lorenzo vorrebbe: le quattro classi della collezione KOMAscript, scrbook, scrreprt, scrartcl, scrlttr2; sono scritte da un europeo dove le convenzioni tipografiche statunitensi vengono “corrette” per venire incontro alle nostre esigenze. C’è anche la classe memoir, che fa di tutto, anche quella di mettere la didascalia sopra alle tabelle e sotto alale figure; magari richiede qualche setting iniziale, ma quando uno ha un piccolo file con i setting che preferisce, legge sempre quello e il gioco è fatto.

                  Per altro sono d’accordo con Lorenzo: è mai possibile che a 16 anni dal “defungimento” di LaTeX209, di default \caption lavori ancora come 26 anni fa?

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

                    1) le classi originarie sono state scritte inizialmente per gli americani che mettono la didascalia sotto alle tabelle come anche sotto alle figure (vedi anche Introduzione).

                    Ok, buono a sapersi.

                    2) per motivi di retrocompatibilità il LaTeX3 Team si rifiuta di modificare le classi standard; si rifiuta anche di correggere gli errori plateali come quello dell’ambiente eqnarray, oltre a quello della didascalia solamente inferiore.

                    E va bene: nessuno tocchi “article” e “book”. Però sarebbe ora di scrivere nuove classi prive di quei difetti. Ho appena controllato, il problema si presenta anche con le classi AMS, e anzi lì è ancora più grave:
                    `\documentclass{amsart}
                    \usepackage{booktabs}
                    %\usepackage{caption}

                    \begin{document}

                    \begin{table}[tp]
                    \caption{Didascalia.}
                    \centering
                    \begin{tabular}{ll}
                    \toprule
                    Alcaloide & Origine \\
                    \midrule
                    atropina & belladonna \\
                    chinina & china \\
                    morfina & papavero \\
                    nicotina & tabacco \\
                    \bottomrule
                    \end{tabular}

                    \end{table}

                    \begin{table}[tp]
                    \caption{Didascalia.}
                    \vspace{-\bigskipamount}
                    \[
                    \begin{array}{ll}
                    \toprule
                    f(x) & f’(x) \\
                    \midrule
                    k & 0 \\
                    x^n & nx^{n-1} \\
                    e^x & e^x \\
                    \sin x & \cos x \\
                    \bottomrule
                    \end{array}
                    \]
                    \end{table}

                    \end{document}`
                    Tuttavia, se non altro lì basta caricare caption e si è a posto sia con tabular che con array. ma questa non è vita.

                    3) l’array va introdotto in ambiente matematico e \[…\] introduce gli spazi mancanti; per altro l’ambiente table non viene quasi mai usato per introdurre array […].

                    in realtà, le tabelle matematiche (con didascalia) si usano spesso, nei documenti scientifici. Ho sotto mano la Garzantina delle Scienze (un solo libro): sono un centinaio.

                    Per scrivere una tabella matematica il modo più naturale è usare l’ambiente array (che è uno standard di LaTeX). Certo, si può sempre usare tabular con colonne ad hoc definite con \newcolumntype, ma è un giro più difficile e meno “naturale”.

                    4) In realtà esistono già altre classi che realizzano quello che Lorenzo vorrebbe: le quattro classi della collezione KOMAscript, scrbook, scrreprt, scrartcl, scrlttr2; sono scritte da un europeo dove le convenzioni tipografiche statunitensi vengono “corrette” per venire incontro alle nostre esigenze. C’è anche la classe memoir, che fa di tutto, anche quella di mettere la didascalia sopra alle tabelle e sotto alale figure; magari richiede qualche setting iniziale, ma quando uno ha un piccolo file con i setting che preferisce, legge sempre quello e il gioco è fatto.

                    Molto bene. In realtà, ho provato il codice precedente con
                    `\documentclass{scrreprt} `
                    ma trovo lo spazio (uguale nei due casi, se non altro) davvero troppo risicato.

                    Per altro sono d’accordo con Lorenzo: è mai possibile che a 16 anni dal “defungimento” di LaTeX209, di default \caption lavori ancora come 26 anni fa?

                    Sono contento per averci preso. Ma scontento per LaTeX: i suoi sviluppatori son troppo conservatori, per me. 👿

                    In conclusione, se si usano le classi standard e si vuole mettere un array dentro a table, bisogna spaziarlo a mano ogni volta. 🙁 Provo a scrivere all’autore di caption, magari ci mette una pezza.

                    Grazie mille,
                    L.

                  • #48220
                    Up
                    0
                    Down
                    ::

                    E va bene: nessuno tocchi “article” e “book”.

                    In realtà sarebbe banale aggiornare article e book ma lasciarle compatibili con
                    i vecchi documenti. Con Lorenzo ed Enrico avevamo già discusso la questione
                    in un vecchio post. Basta usare un’opzione per specificare la versione, come
                    nel pacchetto mhchem.
                    `\documentclass[ver=2]{book}`

                    Sono d’accordo con Lorenzo, gli sviluppatori sono troppo conservatori.
                    Per esempio, ritengo che ci siano una serie di funzionalità che
                    oramai potrebbero essere integrate in LaTeX stesso (graphicx, caption, booktabs, ecc. . .).
                    Questo, unito a delle classi più moderne,
                    allargherebbe sicuramente il bacino degli utenti di LaTeX.
                    Speriamo che il futuro di LuaTeX e XeTeX vada in questa direzione.

                    Ciao ciao.
                    Fra

                  • #48221
                    Up
                    0
                    Down
                    ::

                    Ho appena controllato, il problema si presenta anche con le classi AMS, e anzi lì è ancora più grave:

                    le classi AMS sono chiaramente scritte per lo standard americano, non puoi pretendere che funzionino con la caption nel posto “sbagliato”.

                    Sono contento per averci preso. Ma scontento per LaTeX: i suoi sviluppatori son troppo conservatori, per me. 👿

                    Il fatto che LaTeX sia utilizzato con cosi’ grande diffusione e’ merito anche della sua mancanza di innovazione. Il suo numero di versione tende ad una costante matematica non a caso: le cose sono cosi’ e rimarranno cosi’.
                    Non frantedetemi: io sono uno della filosofia bleeding edge e innovazione, ma accetto la volonta’ di avere una base stabile e affidabile.
                    Quando c’e’ la possibilita’ di estendere e creare tutto quello di cui si ha bisogno, e’ solo questione di capacita’ tecniche e tempo a disposizione, troppo facile dire “dovrebbero pensarci gli sviluppatori di LaTeX”.
                    Non c’e’ nessuno retribuito per quel lavoro.

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

                      le classi AMS sono chiaramente scritte per lo standard americano, non puoi pretendere che funzionino con la caption nel posto “sbagliato”.

                      Bene.

                      Non frantedetemi: io sono uno della filosofia bleeding edge e innovazione, ma accetto la volonta’ di avere una base stabile e affidabile.

                      Ok per la base “solida e affidabile”: nessuno tocchi article e book (se proprio crea tutti questi sconquassi). Ma, dopo più di vent’anni dalla sua introduzione, penso che sia giunta l’ora di avere due/tre classi, per articoli, relazioni e libri prive dei difettucci ormai ben noti.

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

                        Il fatto che LaTeX sia utilizzato con cosi’ grande diffusione e’ merito anche della sua mancanza di innovazione. Il suo numero di versione tende ad una costante matematica non a caso: le cose sono cosi’ e rimarranno cosi’.
                        Non frantedetemi: io sono uno della filosofia bleeding edge e innovazione, ma accetto la volonta’ di avere una base stabile e affidabile.
                        Quando c’e’ la possibilita’ di estendere e creare tutto quello di cui si ha bisogno, e’ solo questione di capacita’ tecniche e tempo a disposizione, troppo facile dire “dovrebbero pensarci gli sviluppatori di LaTeX”.
                        Non c’e’ nessuno retribuito per quel lavoro.

                        Ma qui non sono in discussione le capacità tecniche od il tempo a disposizione.
                        Stiamo parlando di far si che LaTeX2e od un suo compagno futuro, possa essere utilizzato da sempre più persone e in un numero di settori sempre maggiore.

                        Immagino che tu utilizzi LaTeX e non TeX. E per quale motivo fai questa scelta?
                        Con TeX puoi fare tutto per definizione stessa del formato LaTeX.

                        Sono invece d’accordo sulla stabilità del linguaggio. Le modifiche ad esso si pagano sempre. Quando da LaTeX 209 si è passati a LaTeX2e si è rischiato molto come ha raccontato lo stesso Frank Mittelbach, ed è comprensibile che il team non voglia più correrli (la responsabilità rende prudenti).

                        Del resto, l’innovazione è altrettanto indispensabile, dunque a mio avviso, la strada da percorrere è quella di puntare tutto sul salto di versione.

                        Penso quindi che il momento sia delicato ed avevo condiviso questa mia opinione nel post http://www.guit.sssup.it/phpBB2/viewtopic.php?t=7616 dal titolo “Futuro di LaTeX”.

                        Da un lato LaTeX3 procede lentamente basandosi in pratica solo su TeX e navigando in acque sicure, dall’altro invece, ConTeXt affronta l’oceano spinto dal vento di luatex.

                        La sfida di Coppa America è iniziata.
                        R.

                      • #48224
                        Up
                        0
                        Down
                        ::

                        Ma qui non sono in discussione le capacità tecniche od il tempo a disposizione.
                        Stiamo parlando di far si che LaTeX2e od un suo compagno futuro, possa essere utilizzato da sempre più persone e in un numero di settori sempre maggiore.

                        L’avere delle classi base “obsolete” non pregiudica tutto questo.
                        ogni installazione di LaTeX ha a disposizione ben piu’ di article, book e letter.
                        basta che gli utenti siano coscienti di queste opzioni.
                        se poi non sono di nostro gusto, perche’ ad esempio uno spazio e’ troppo piccolo per i nostri canoni, si prepara una classe soddisfacente dal proprio punto di vista e la si sottomette su CTAN.
                        se quella classe e’ valida ed utilizzata da altri entrera’ nelle distribuzioni e quindi nei computer di tutti gli utilizzatori di LaTeX in automatico, come e’ successo per le koma.

                        Sono invece d’accordo sulla stabilità del linguaggio. Le modifiche ad esso si pagano sempre. Quando da LaTeX 209 si è passati a LaTeX2e si è rischiato molto come ha raccontato lo stesso Frank Mittelbach, ed è comprensibile che il team non voglia più correrli (la responsabilità rende prudenti).

                        Del resto, l’innovazione è altrettanto indispensabile, dunque a mio avviso, la strada da percorrere è quella di puntare tutto sul salto di versione.

                        La stabilita’ e la retrocompatibilita’ non possono essere in discussione.
                        tutto deve funzionare coi documenti preparati 10 anni fa e produrre lo stesso risultato.
                        e’ cosi’ in ogni aspetto della programmazione, da bash a gcc, da python a perl.

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

                          ogni installazione di LaTeX ha a disposizione ben piu’ di article, book e letter. basta che gli utenti siano coscienti di queste opzioni.

                          Giusto. Forse la colpa è mia. Purtroppo non ho molta esperienza di classi: uso quelle standard e le KOMA -queste ultime, però, attraverso ClassicThesis.

                          Le classi standard sono molto didattiche, anche se con i noti difettucci. ClassicThesis produce un risultato splendido, ma il codice è terribile (lo sconsiglio a chi inizia).

                          se poi non sono di nostro gusto, perche’ ad esempio uno spazio e’ troppo piccolo per i nostri canoni, si prepara una classe soddisfacente dal proprio punto di vista e la si sottomette su CTAN. se quella classe e’ valida ed utilizzata da altri entrera’ nelle distribuzioni e quindi nei computer di tutti gli utilizzatori di LaTeX in automatico, come e’ successo per le koma.

                          Appunto. Sarebbe ora che quelle classi vengano scritte. Sul forum c’è chi sa farlo, per di più. 🙂

                          Ciao,
                          L.

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

                      Go to top