Re: Curiosità: alcuni “bug” di LaTeX

#26654
Up
0
Down
::

[quote]
1. Le didascalie delle figure e delle tabelle non sono automaticamente in corpo più piccolo rispetto al testo, né incolonnate sotto la prima linea del testo, se formate da almeno due righe. (Per farlo, occorre caricare il pacchetto caption con le opzioni font=small e format=hang.)

2. Inoltre, LaTeX non separa automaticamente la didascalia di una tabella dalla tabella stessa (di regola, la didascalia si scrive sopra la tabella, ma LaTeX “non lo sa”): bisogna provvedere con del codice ad hoc (per esempio caricando il pacchetto caption e, una volta per tutte, scrivendo nel preambolo \captionsetup

{position=top}).

Scelte del progettista della classe.

Sono scelte, certo, ma le trovo assai poco felici.

Pensa che il caporedattore di una casa editrice per cui lavoravo (avevo il compito di migliorare l’impaginazione dei documenti inviati dai loro autori) mi disse di aver ricevuto un documento particolarmente brutto, con “addiruttura, le didascalie scritte non in corpo più piccolo rispetto al resto”…

Ai miei occhi (ma non solo ai miei!), questi sono difetti, anche se certo qui siamo nell’ambito dei giudizi soggettivi di cui dicevo all’inizio.[/quote]
Le classi standard sono pensate per essere contenitori generici, da sostituire poi con chiamate della classe più adatta alla pubblicazione. Quindi forniscono solo un minimo essenziale. È vero che, in passato, non c’erano moltissime classi più specifiche fra cui scegliere, ma non è un difetto di LaTeX, quanto degli utenti di alto livello (editori) che non le hanno sviluppate.

[quote]4. La spaziatura dell’ambiente eqnarray è inconsistente. (Vanno usati gli appositi ambienti di amsmath.) Anche la scelta di non correggere, nelle recenti versioni di LaTeX, quell’ambiente vistosamente bacato, solo per mantenere la retro-compatibilità, mi sembra piuttosto discutibile.

Purtroppo Lamport decise di definire eqnarray in quel modo. È troppo tardi per modificare.

Perché troppo tardi? Che cosa potrebbe accadere di male nel ridefinire la spaziatura dell’ambiente? Problemi TeXnici? A livello di impaginazione, non credo che l’utente finale, con un vecchio documento che usa eqnarray ridefinito, avrebbe problemi particolari…[/quote]
L’argomento è stato molto dibattuto; gli sviluppatori hanno deciso di lasciare eqnarray come sta, avvisando che c’è di meglio. Sarebbe come cercare di raddrizzare la torre di Pisa, con la differenza che almeno quella è bella: il rimedio potrebbe rivelarsi peggiore del male.

Il progetto di Lamport non mirava certo a un programma per scrivere testi con molta matematica.

Non si finisce mai di imparare! Pensavo che TeX e LaTeX fossero nati fin da subito per scrivere (anche) testi con molta matematica! Ti andrebbe di sviluppare un po’ la tua affermazione?

Per chi scriveva matematica “pesante” c’era Plain. Lamport voleva rivolgersi a un pubblico diverso: gente non troppo propensa a cercare di risolvere le difficoltà.

Può darsi che abbia impostato male la faccenda, ma che ci si può fare?

[quote]7. È possibile inserire direttamente i caratteri accentati, gestire lingue diverse dall’inglese e inserire immagini solo caricando pacchetti specifici (inputenc, babel, graphicx).

8. I font standard di LaTeX non contengono caratteri speciali per la maggior parte delle lettere accentate usate nelle lingue europee. (Per rimediare, com’è noto, è sufficiente servirsi dei font EC, attivati caricando il pacchetto fontenc con l’opzione T1.)

9. Le eventuali pagine bianche inserite alla fine di un capitolo, quando si seleziona l’opzione openright, hanno testatina e piè di pagina (bleah!). (Perché siano vuote, bisogna ridefinire il comando \cleardoublepage, aggiungendo nel preambolo del codice “di basso livello”. Le classi KOMA risolvono il problema in modo più elegante.)

Questo non avresti nemmeno dovuto pensarlo. Adesso rifletti sul perché ti dico così. 🙂

I primi due punti (con l’eccezione di graphicx) erano più che altro una provocazione! Il punto 9. però non capisco come “non avrei dovuto pensarlo”. Quella “testatina sul nulla” (che si ottiene con lo stile di pagina predefinito della classe book) l’ho sempre trovata più surreale di un quadro di Magritte!
`\documentclass{book}
\usepackage{lipsum}
\begin{document}
\chapter{Magritte}
\lipsum[1-2]
\section{Boh}
\lipsum
\chapter{Bah}
\lipsum
\end{document} `
Qui devi proprio spiegarmi che cosa vuoi dire!![/quote]
Quando LaTeX è nato, si rivolgeva a gente che scriveva solo in inglese americano. E le codifiche a 8 bit non esistevano. E poi ne hanno inventate a centinaia. E su decine di sistemi operativi incompatibili. Non va trascurato anche che TeX era strettamente a 7 bit.

Quando poi ci si è evoluti, i rimedi sono stati trovati. Nella seconda edizione del manuale di Lamport, queste faccende sono menzionate.

La testatina sul nulla è conseguenza di quanto detto prima. Le classi standard sono solo un modello di vestito, per intenderci quelli disegnati su carta: nessuno li indossa, ma vanno usati per tagliare e cucire il vestito vero.

[quote]10. L’indice analitico nella classe book non inizia automaticamente in una pagina destra. (Bisogna inserire un \cleardoublepage.) Più che una scelta deliberata di chi ha scritto quella classe, mi sembra una semplice dimenticanza (càpita: ma perché non rimediare?).

Dimenticanza, suppongo. Di fatto all’epoca \cleardoublepage non esisteva.

Beh, all’epoca magari no, ma oggi sì! Del resto, quando è stato scritta la prima versione di LaTeX non esistevano neanche i telefoni cellulari, ma non mi pare un buon motivo per non usarli oggi… 😯 Spiegati meglio![/quote]
Gli sviluppatori vogliono garantirsi che, per quanto possibile, i documenti possano essere sempre compilati così come sono. Prova ad aprire con un word processor di oggi un file di dieci anni fa.

[quote]11. Le colonne dell’ultima pagina dell’indice analitico non sono bilanciate automaticamente. (Occorre del codice ad hoc; serve anche il pacchetto multicol.)

Sacrificio alla semplicità.

Come sopra. Knuth e Lamport hanno fatto anche troppo! Tuttavia il loro lavoro può essere migliorato! Vale anche per Galileo, per Newton, per Einstein![/quote]
È esattamente ciò che devono fare i pacchetti aggiuntivi.

[quote]13. I messaggi d’errore di LaTeX sono a volte criptici. Per esempio, il seguente
`\documentclass{article}
\renewcommand{\fi}{Firenze}
\begin{document}
Boh!
\end{document}`
produce un enigmatico
`! LaTeX Error: Missing \begin{document}.`

Questo esempio è fuorviante: stai ridefinendo un comando che non compare nell’indice analitico del manuale di LaTeX e c’è un chiaro avviso a non fare mai una cosa del genere.

“Tutti noi commettiamo errori, e tutti noi ne paghiamo le conseguenze”, dice il Dr. House… Chi ridefinisce \fi non lo fa certo apposta! Tuttavia, sarebbe il caso che il messaggio d’errore fosse più chiaro. [/quote]
Impossibile, in questo caso e in molti altri: se si ridefinisce un comando di quel tipo le possibilità di errori pazzeschi diventano innumerevoli. Ti assicuro che i messaggi di errore sono davvero molto più informativi rispetto a quelli degli inizi.

L’impianto elettrico di casa tua toglie corrente quando c’è un sovraccarico, mica ti dice anche dove c’è stato il sovraccarico: può forse “sapere” quale errore hai commesso?

Nel caso di \fi, l’errore viene scoperto quando TeX cerca di comporre un capoverso durante l’espansione di \document, perché trova un comando orizzontale il quale causa l’espansione del contenuto di \everypar: a quel punto il registro \everypar contiene ancora il codice che emette il messaggio di errore “Missing \begin{document}”; questo registro viene modificato proprio alla fine dell’espansione di \document, perché allora si possono comporre capoversi senza problemi. Spero che tu ti renda conto che è del tutto improponibile caricare \renewcommand con la verifica di tutti i comandi “pericolosi”.

La situazione potrebbe cambiare con LaTeX3, nel quale ogni primitiva di TeX verrà chiamata internamente con un altro nome. Di fatto, però, ridefinire \fi o \box sarà sempre piuttosto pericoloso, perché sarebbe incompatibile con molti pacchetti LaTeX2 che si potranno ancora usare.

Ciao
Enrico

Go to top