- Questo topic ha 2 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 2 mesi, 4 settimane fa da .
-
Topic
-
in un altro filone dedicato alla saturazione della memoria se si elabora un file CSV, si parla di:
Ho notato un problema diverso: la intestazione di pagina dovrebbe indicare, immagino, primo e ultimo lemma della pagina stessa, invece indica secondo e ultimo. Indica correttamente il primo solo se questo si presenta su una riga che non è la prima, perchè la voce precedente è spezzata in due pagine.
Il problema deriva dal modo di funzionare di LaTeX fin dalle sue origini; modo che ha moltissimi pregi, e qualche raro difetto, compreso quello che si presenta con certi dizionari.
Il pacchetto fancyhdr permette di gestire le testatine e i piedini in modo formidabile e fornisce tanti esempi, in particolare l’esempio 19 che riguarda le testatine dei dizionari; perfetto,ma… peccato che funzioni solo componendo ad una sola colonna.Componendo a due colonne con il metodo attuale di gestire la miriade di mark che Latex e Lualatex possono gestire, bisogna usare un raro comando interno che si chiama \if@firstcolumn che serve per testare se si sta componendo la prima colonna (documentazione verso la fine della documentazione di Latex source2e.pdf da aprire col solito comando texdoc; il file è lungo circa 1100 pagine quindi è meglio sapere in anticipo dove guardare).
Bisogna dotare il comando che introduce ogni lemma (supponiamo che si chiami \lemma) di un test per verificare se NON si sta componendo la prima colonna e nel caso bisogna testare quanto manca alla fine della seconda; se manca poco, diciamo una o due righe, si potrebbe inserire una penalità negativa di valore assoluto 10000, che per LaTeX vuol dire infinito, per consentire un fine pagina. Perché non un comando \newcolumn. che da poco tempo accompagna \newpage in LaTeX? Perché ho controllato e non fa quello che il nome dice, ma crea nella pagina successiva una prima colonna vuota; perché? Non l’ho capito.
In questo modo il nuovo \lemma entra in funzione nella nuova pagina.
Ci si domanda il perché succede quanto descritto sopra. La spiegazione è difficile, ma dopo un po’, ma faticosamente, ci si arriva. Latex compone direttamente il testo nella scatola 255, fin dalla sua origine nel 1980 o giù di li. Questa è solo una bozza che contiene il testo composto, ma senza gli oggetti mobili, sostituiti da segnaposti opportuni per sapere poi dove mettere questi oggetti. Gli oggetti mobili non sono solo i floating objects espliciti come le figure e le tabelle, ma anche le note al piede, le note marginali, e altri oggetti meno frequenti.
Bene. Quando la scatola 255 contiene pi¡u materiale di una bozza di pagina, Latex attiva la procedura per spedirne ordinatamente il contenuto al file di uscita, aggiungendo negli appositi segnaposti i vari oggetti mobili trattenuti in altre parti della sua memoria interna, in sezioni chiamate code, dove rimangono gli oggetti in attesa di essere inviati all’uscita; durante questa operazione delicatissima, non è detto che si svuoti tutta la scatola 255, perché la pagina vera, quella spedita all’uscita, non contiene solo la bozza di pagina ma anche altra roba., quindi ciò che era nella scatola 255 e non è stato spedito fuori, resta in quella scatola ed aspetta la spedizione successiva. Quindi i mark dei lemmi non ancora spediti fuori, quando lo faranno, avranno ancora i mark della pagina precedente, e questo spiega il fenomeno lamentato nel post dell’altro filone.
Non e detto che quanto ho suggerito snella prima parte del mio messaggio funzioni sempre correttamente; lo fa quasi sempre, ma non sempre a causa di quel processo asincrono. Talvolta, rivedendo le bozze del documento completo bisogna aggiungere prima del lemma il cui mark non sia corretto un comando che forzi esplicitamente il fine colonna, per esempio un [code]\par\vfill\penalty=-10000[/code] (magari generato da una propria macro) in modo da forzare il fine pagina prima del lemma indicato male.
In ArsTeXnica di molto tempo fa, forse il nomero 9, avevo scritto un articolo sulla creazione di dizionari, ma allora LaTeX2e era appena nato e funzionava in modo più semplice di oggi. Allora il problema non si presentava; Oggi aggiornando quel dizionario il problema si pone ma seguendo il consiglio dato sopra l’intervento manuale è rarissimo.
- Devi essere connesso per rispondere a questo topic.