- Questo topic ha 12 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 16 anni, 1 mese fa da
lorenzo.pantieri.
-
CreatoreTopic
-
4 Agosto 2010 alle 7:08 #48213::
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.
-
CreatoreTopic
-
AutoreRisposte
-
-
4 Agosto 2010 alle 7:59 #48214::
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
-
4 Agosto 2010 alle 8:22 #48215::
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.
-
4 Agosto 2010 alle 9:31 #48216::
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.
-
4 Agosto 2010 alle 9:58 #48217::
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.
-
4 Agosto 2010 alle 16:28 #48218::
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?
-
4 Agosto 2010 alle 17:42 #48219::
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.
-
4 Agosto 2010 alle 19:34 #48220::
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
-
5 Agosto 2010 alle 10:17 #48221::
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.
-
5 Agosto 2010 alle 10:42 #48222::
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.
-
5 Agosto 2010 alle 11:03 #48223::
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.
-
5 Agosto 2010 alle 15:40 #48224::
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.
-
5 Agosto 2010 alle 16:25 #48225::
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.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.