[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 508.   Alml: questioni tecniche

In questo capitolo vengono considerate alcune questioni che inizialmente non è necessario conoscere, ma che possono servire quando il proprio lavoro con Alml diventa significativo e ci si vuole organizzare di conseguenza.

508.1   Usare Textchk, Checkbot e Ispell con Alml

Textchk e Checkbot, descritti rispettivamente nel capitolo 422 e nella sezione 461.4, possono essere usati facilmente con Alml. In generale, si passa per una composizione in formato HTML singolo, quindi si utilizzano questi programmi. Supponendo di avere generato il file mio_file.html:

textchk --input-type=html mio_file.html \
  \        mio_file.tchk mio_file.tdiag
[Invio]

checkbot --url file://`pwd`/mio_file.html[Invio]

Per usare Ispell, è conveniente generare prima una versione del documento in formato testo puro. Per questo si potrebbe usare W3M, ma all'interno del pacchetto di Alml è disponibile un programma di supporto speciale, in grado di convertire opportunamente un file HTML per questo scopo. Si tratta di alml-extra che va usato con l'opzione --html-to-text-for-spell:

alml-extra --html-to-text-for-spell < file_html > file_testo_non_formattato

In particolare, per evitare problemi con Ispell, nel file che si ottiene sono eliminate le barre oblique inverse (\).

Naturalmente, usando poi Ispell nel file generato in questo modo, non ha senso fare delle correzioni, che invece vanno applicate manualmente al sorgente originale.

508.2   Espandere le potenzialità elaborative di TeX

Il file LaTeX generato da Alml tende a richiedere risorse impreviste a TeX. È molto probabile che per documenti di dimensioni medie, sia necessario espandere i limiti posti dalla configurazione di TeX.

In generale, si dovrebbe disporre di una distribuzione teTeX, per la quale si interviene nel file texmf/web2c/texmf.cnf (eventualmente potrebbe trattarsi meglio di /etc/texmf/texmf.cnf, o simile).

Per la composizione di Appunti di informatica libera si è resa necessaria la modifica di alcune variabili; quello che si vede sotto sono i valori minimi da assegnare alle variabili rispettive:(1)

main_memory = 7000000
font_mem_size = 1000000
font_max = 2000
pool_size = 250000
hash_extra = 100000
buf_size = 100000
save_size = 40000

Si può tenere in considerazione l'abbinamento seguente, tra il rapporto generato da TeX e il file di configurazione texmf.cnf, tenendo conto che in situazioni particolari il programma può segnalare la mancanza di una risorsa differente da quelle comuni:

Here is how much of TeX's memory you used:
42853 strings out of 55918
510063 string characters out of 647843
200381 words of memory out of 1000001
44744 multiletter control sequences out of 10000+40000
221835 words of font info for 188 fonts, out of 400000 for 1000
14 hyphenation exceptions out of 1000
Valore Descrizione
42853 strings out of 55918
Dipende dalla variabile max_strings. In questo caso gli è stato assegnato il valore 60 000.
510063 string characters out of 647843
Dipende dalla variabile pool_size. In questo caso gli è stato assegnato il valore 700 000.
200381 words of memory out of 1000001
Dipende dalla variabile main_memory. In questo caso gli è stato assegnato il valore 1 000 000.
44744 multiletter control sequences \
  \out of 10000+40000
Il valore finale che si somma a 10 000, dipende dalla variabile hash_extra, a cui è stato assegnato il valore 40 000.
221835 words of font info for 188 fonts, \
  \out of 400000 for 1000
I due valori finali dipendono rispettivamente da font_mem_size e da font_max.
14 hyphenation exceptions out of 1000
Dipende dalla variabile hiph_size a cui corrisponde esattamente il valore finale.

Al termine delle modifiche a questo file, occorre ricordare di lanciare il comando texconfig init, con i privilegi dell'utente root:(2)

texconfig init[Invio]

Nel caso particolare della distribuzione Debian, il file di configurazione /var/lib/texmf/texmf.cnf è ottenuto attraverso la fusione di file differenti, contenuti nella directory /etc/texmf/texmf.d/. In tal caso, per modificare le voci descritte in precedenza, occorre intervenire probabilmente nel file /etc/texmf/texmf.d/95NonPath.cnf; successivamente occorre eseguire il comando update-texmf, il quale ricostruisce un file /var/lib/texmf/texmf.cnf nuovo; infine si deve eseguire texconfig init.

Si osservi comunque che nel pacchetto sorgente di Alml è disponibile il file etc/texmf/texmf.d/94alml.cnf, che collocato correttamente nella directory /etc/texmf/texmf.d/ risolve il problema senza intaccare gli altri file .cnf (richiedendo comunque l'avvio di texconfig init, cosa che viene svolta automaticamente quando si installa il pacchetto Debian di Alml).

508.2.1   Limiti strutturali di TeX

Le distribuzioni normali di TeX potrebbero non essere in grado di gestire un gran numero di comandi \label, anche se si tenta di intervenire nella configurazione. Questo si traduce in pratica in un limite insuperabile per ciò che nella configurazione viene mostrato come la variabile save_size.

I comandi \label generano delle annotazioni in un file con estensione .aux, simili all'esempio seguente:

\newlabel{anchor7}{{}{25}}

In questo caso si afferma che l'etichetta anchor7 corrisponde alla pagina 25.

Generalmente, la composizione con i programmi *tex viene ripetuta per tre volte, allo scopo di acquisire le informazioni contenute in questo file: la prima volta viene costruito da zero, la seconda volta il testo viene reimpaginato utilizzando queste informazioni, rigenerandole nuovamente; infine, la terza volta non ci dovrebbero essere ulteriori spostamenti nell'impaginazione e il procedimento termina. Pertanto, la seconda e la terza volta viene letto il file con estensione .aux.

Sia i comandi \label, sia i comandi \newlabel contenuti nel file ausiliario che viene incluso automaticamente, vanno a ridurre la memoria definita dalla variabile save_size. Così succede normalmente che si riesce a completare la prima elaborazione del file, mentre nella successiva, caricando anche il file ausiliario la memoria non basta più. La segnalazione di errore tipica è la seguente:

! TeX capacity exceeded, sorry [save size=40000].

Di fatto, questa variabile non può superare il valore 65 535, anche se si tenta di modificare i sorgenti di teTeX intervenendo nel file texk/web2c/tex.ch. Dovrebbe esserci una riga simile a quella seguente:

@!inf_save_size = 600;
@!sup_save_size = 40000;

Si può anche provare, aumentando il valore assegnato a sup_save_size, per esempio come nel caso seguente, ma in pratica, il limite massimo che si riesce a raggiungere resta quello di 65 535:(3)

@!inf_save_size = 600;
@!sup_save_size = 100000;

508.2.2   Soluzione attuata da Alml

Alml è un sistema di composizione pensato per la realizzazione di opere molto grandi, con indici generali e analitici gestiti autonomamente. In questo modo, la composizione tradizionale attraverso TeX genererebbe un file .aux con una quantità di voci molto grande. Per evitare di saturare il limite di TeX, questi riferimenti vengono inseriti in un altro file, con estensione .pageref e gestiti esternamente a TeX.

In breve, Alml gestisce le cose nel modo seguente.

  1. Viene creato un file TeX in cui le etichette (le ancore) usano il comando \AlmlLabel:

    \AlmlLabel{etichetta}
    

    Inoltre, i riferimenti alle pagine si fanno con comandi del tipo:

    \AlmlPageRef{0}{000}{etichetta}
    
  2. Viene avviato TeX che elabora il file e genera un file .pageref in base ai comandi \AlmlLabel.

  3. Viene letto il file .pageref e con quelle informazioni, il file TeX viene modificato intervenendo sui riferimenti alle pagine, che diventano:

    \AlmlPageRef{1}{pagina}{etichetta}
    
  4. Si riavvia TeX che genera un nuovo file .pageref.

  5. Viene letto il file .pageref e, con quelle informazioni, il file TeX viene modificato intervenendo sui riferimenti alle pagine, che diventano:

    \AlmlPageRef{2}{pagina}{etichetta}
    
  6. Si riavvia TeX per l'ultima volta.

508.2.3   Suddivisione automatica in volumi e parti della composizione finale PostScript e PDF

Per facilitare la suddivisione della composizione PostScript in file contenenti solo un volume o solo una parte, vengono inserite nel sorgente TeX delle istruzioni per creare un file con estensione .pageloc, contenente le informazioni necessarie:

BOF
tome{1}pageoffset{12}relativepage{1}
part{1}pageoffset{12}relativepage{7}
part{2}pageoffset{12}relativepage{19}
part{3}pageoffset{12}relativepage{105}
part{4}pageoffset{12}relativepage{121}
part{5}pageoffset{12}relativepage{171}
part{6}pageoffset{12}relativepage{203}
part{7}pageoffset{12}relativepage{269}
part{8}pageoffset{12}relativepage{319}
part{9}pageoffset{12}relativepage{351}
part{10}pageoffset{12}relativepage{383}
part{11}pageoffset{12}relativepage{411}
part{12}pageoffset{12}relativepage{415}
part{13}pageoffset{12}relativepage{469}
tome{2}pageoffset{12}relativepage{541}
part{14}pageoffset{12}relativepage{545}
eof{}pageoffset{12}relativepage{552}
EOF

Il significato dovrebbe essere intuitivo. Per esempio, il primo volume inizia dalla 13-esima pagina (ottenuta sommando 12 a 1) e termina all'inizio del volume successivo, ovvero alla 552-esima pagina (541+12-1). L'ultima pagina è la 564-esima.

In questo esempio, il valore 12 ricorrente rappresenta le pagine che precedono il contenuto vero e proprio del documento, in cui ci possono essere indici generali e introduzioni. Questo valore, definito qui come page offset, viene semplicemente sommato a quello finale.

508.3   Programma di supporto

Alml dispone di un programma di supporto, costituito dall'eseguibile alml-extra, che consente di facilitare lo svolgimento di funzioni accessorie, in particolare per la riorganizzazione dei file PostScript.

alml-extra opzione [argomento]

A seconda dell'opzione utilizzata, può essere richiesto un argomento o meno, che fa riferimento a un file.

Dal momento che le opzioni che riguardano la conversione di file PostScript sono piuttosto difficili da ricordare, è disponibile anche uno script molto semplice che ne facilita l'uso:

alml-extra-menu file_ps

Figura 508.9. Aspetto di alml-extra-menu, avviato con l'argomento esempio.ps.

.-----------------------alml-extra OPTION esempio.ps-------------------------.
|                                                                            |
| Select the option:                                                         |
| .------------------------------------------------------------------------. |
| |--a4-to-a5-2-a4              A4 to A5, no folding                       | |
| |--a4-to-a6-4-a4              A4 to A6, no folding                       | |
| |--a4-to-a5-2-a4-1h-1         A4 to A5, folded, signature 1              | |
| |--a4-to-a5-2-a4-1h-10        A4 to A5, folded, signature 10             | |
| |--a4-to-a6-4-a4-2h-2         A4 to A6, folded twice, signature 2        | |
| |--a4-to-a6-4-a4-2h-4         A4 to A6, folded twice, signature 4        | |
| |--a4-to-a6-4-a4-2h-6         A4 to A6, folded twice, signature 6        | |
| |--a4-to-a6-4-a4-2h-8         A4 to A6, folded twice, signature 8        | |
| |--a4-to-a6-4-a4-2h-10        A4 to A6, folded twice, signature 10       | |
| |--a4-to-a6-4-a4-1v-1         A4 to A6, folded vertically, signature 1   | |
| |--a5x4-to-a7x4               A5x4 to A7x4, no folding                   | |
| |--a5x4-to-a7x4-2-a4          A5x4 to A4, no folding                     | |
| |--a7x4-to-a7x4-2-a4          A7x4 to A4, no folding                     | |
| |--a7x4-to-a7x4-2-a4-1v-1     A7x4 to A7x4, folded vertically, signatu   | |
| |--a7x4-to-a7x4-2-a4-1v-10    A7x4 to A7x4, folded vertically, signatu   | |
| `-(+)--------------------------------------------------------------------' |
|                                                                            |
|----------------------------------------------------------------------------|
|                       <  OK   >            <Annulla>                       |
`----------------------------------------------------------------------------'

Le opzioni che vengono descritte nel seguito si riferiscono a alml-extra, usato direttamente, dal momento che alml-extra-menu non prevede l'uso di opzioni proprie.

Opzione Descrizione
--help
Mostra la guida rapida interna e conclude il funzionamento.
--version
Mostra le informazioni sulla versione e conclude il funzionamento.
--ps-group-pages=n_pagine
Prevede che l'argomento finale sia un file PostScript, in cui vengono modificate le stringhe di definizione delle pagine, in modo che si possano individuare raggruppamenti di n pagine, di solito per facilitare la rilegatura. In pratica, in questo modo, si individuano più facilmente le pagine che compongono una segnatura.
--ps-renumber-pages
Prevede che l'argomento finale sia un file PostScript, in cui vengono modificate le stringhe di definizione delle pagine, in modo che la sequenza sia rinumerata a partire da uno.
--alml-ps-split-tome=file_posizione_pagine
Prevede che l'argomento finale sia un file PostScript, generato attraverso Alml, per il quale sia disponibile un file contenente la posizione di inizio dei vari volumi (dovrebbe trattarsi di un file con estensione .pageloc), che va indicato come argomento dell'opzione stessa. Quello che si ottiene sono diversi file PostScript, con estensione .n.ps, dove in particolare .0.ps contiene le pagine precedenti al primo volume effettivo, con la presenza eventuale di file con estensione .app.ps e ndx.ps, per le pagine delle appendici e degli indici analitici rispettivamente.
--alml-dvi-split-tome=file_posizione_pagine
Funziona come --alml-ps-split-tome, ma si riferisce a file DVI.
--alml-dvi-to-pdf-split-tome=file_posizione_pagine
Funziona come --alml-dvi-split-tome, ma converte il risultato in PDF.
--alml-ps-split-part=file_posizione_pagine
Prevede che l'argomento finale sia un file PostScript, generato attraverso Alml, per il quale sia disponibile un file contenente la posizione di inizio dei vari volumi (dovrebbe trattarsi di un file con estensione .pageloc), che va indicato come argomento dell'opzione stessa. Quello che si ottiene sono diversi file PostScript, con estensione .n.ps, dove in particolare .0.ps contiene le pagine precedenti alla prima parte effettiva, con la presenza eventuale di file con estensione .app.ps e ndx.ps, per le pagine delle appendici e degli indici analitici rispettivamente.
--alml-dvi-split-part=file_posizione_pagine
Funziona come --alml-ps-split-part, ma si riferisce a file DVI.
--alml-dvi-to-pdf-split-part=file_posizione_pagine
Funziona come --alml-dvi-split-part, ma converte il risultato in PDF.
--html-index=directory
Genera, attraverso lo standard output, un file HTML che potrebbe essere utilizzato come file index.html, contenente un elenco molto semplice dei file contenuti nella directory indicata.
--html-index-basic=directory
Come --html-index, senza mostrare le date dei file.
--html-index-basic-recursive
Genera una serie di file index.html, a partire dalla directory corrente e in tutte le sottodirectory.
--html-to-text-for-spell
Legge lo standard input, che dovrebbe essere costituito da un file HTML, filtrandolo allo scopo di generare un file di testo puro, utilizzabile per un controllo ortografico di qualche tipo. Il file che si ottiene viene emesso attraverso lo standard output.
--perl-to-gettext
Legge lo standard input, che dovrebbe essere costituito da un file sorgente Perl, filtrandolo allo scopo di generare un file di testo, adatto all'analisi da parte di Gettext, che solitamente riconosce bene solo le stringhe del linguaggio C. Il file che si ottiene viene emesso attraverso lo standard output.
--dos2unix
Legge lo standard input, che dovrebbe essere un file di testo con interruzioni di riga in stile Dos (<CR><LF>), filtrandolo allo scopo di generare un file di testo con interruzioni di riga in stile Unix (<LF>). Il file che si ottiene viene emesso attraverso lo standard output.
--unix2dos
Legge lo standard input, che dovrebbe essere un file di testo con interruzioni di riga in stile Unix (<LF>), filtrandolo allo scopo di generare un file di testo con interruzioni di riga in stile Dos (<CR><LF>). Il file che si ottiene viene emesso attraverso lo standard output.
--a4-to-a5-2-a4
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere due pagine A5 per ogni pagina A4 finale.
Si ottiene un file con estensione .a5-2-a4.ps.
--a4-to-a6-4-a4
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale.
Si ottiene un file con estensione .a6-4-a4.ps.
--a4-to-a5-2-a4-1h-1
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere due pagine A5 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, rilegando il tutto a segnature di un solo foglio.
Si ottiene un file con estensione .a5-2-a4-1h-1.ps.
--a4-to-a5-2-a4-1h-10
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere due pagine A5 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, rilegando il tutto a segnature di 10 fogli.
Si ottiene un file con estensione .a5-2-a4-1h-10.ps.
--a4-to-a6-4-a4-2h-2
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, per due volte, rilegando il tutto a segnature di due fogli. In pratica, ogni segnatura si ottiene da un solo foglio A4 che viene piegato due volte.
Si ottiene un file con estensione .a6-4-a4-2h-2.ps.
--a4-to-a6-4-a4-2h-4
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, per due volte, rilegando il tutto a segnature di quattro fogli. In pratica, ogni segnatura si ottiene da due fogli A4 che vengono piegati assieme per due volte.
Si ottiene un file con estensione .a6-4-a4-2h-4.ps.
--a4-to-a6-4-a4-2h-6
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, per due volte, rilegando il tutto a segnature di sei fogli. In pratica, ogni segnatura si ottiene da tre fogli A4 che vengono piegati assieme per due volte.
Si ottiene un file con estensione .a6-4-a4-2h-6.ps.
--a4-to-a6-4-a4-2h-8
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, per due volte, rilegando il tutto a segnature di otto fogli. In pratica, ogni segnatura si ottiene da quattro fogli A4 che vengono piegati assieme per due volte.
Si ottiene un file con estensione .a6-4-a4-2h-8.ps.
--a4-to-a6-4-a4-2h-10
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a metà, in orizzontale, per due volte, rilegando il tutto a segnature di 10 fogli. In pratica, ogni segnatura si ottiene da cinque fogli A4 che vengono piegati assieme per due volte.
Si ottiene un file con estensione .a6-4-a4-2h-10.ps.
--a4-to-a6-4-a4-1v-1
Prevede che l'argomento finale sia un file PostScript, in formato A4, che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a metà, in verticale, rilegando il tutto a segnature di un foglio.
Si ottiene un file con estensione .a6-4-a4-1v-1.ps.
--a5x4-to-a7x4
Prevede che l'argomento finale sia un file PostScript, in formato A5x4, che viene ridotto al formato A7x4.
Si ottiene un file con estensione .a7x4.ps.
--a5x4-to-a7x4-2-a4
Prevede che l'argomento finale sia un file PostScript, in formato A5x4, che viene rielaborato in modo da ottenere due pagine A7x4 per ogni pagina A4 finale.
Si ottiene un file con estensione .a7x4-2-a4.ps.
--a7x4-to-a7x4-2-a4-1v-1
Prevede che l'argomento finale sia un file PostScript, in formato A7x4, che viene rielaborato in modo da ottenere due pagine A7x4 per ogni pagina A4 finale, che deve essere piegata a metà, in verticale, rilegando il tutto a segnature di un foglio.
Si ottiene un file con estensione .a7x4-2-a4-1v-1.ps.
--a7x4-to-a7x4-2-a4-1v-10
Prevede che l'argomento finale sia un file PostScript, in formato A7x4, che viene rielaborato in modo da ottenere due pagine A7x4 per ogni pagina A4 finale, che deve essere piegata a metà, in verticale, rilegando il tutto a segnature di 10 fogli.
Si ottiene un file con estensione .a7x4-2-a4-1v-10.ps.
--a4s-to-a6s-4-a4s
Prevede che l'argomento finale sia un file PostScript, in formato A4, orientato in modo orizzontale rovesciato (seascape) che viene rielaborato in modo da ottenere quattro pagine A6 per ogni pagina A4 finale.
Si ottiene un file con estensione .a6s-4-a4s.ps.
--a4s-to-a7s-8-a4
Prevede che l'argomento finale sia un file PostScript, in formato A4, orientato in modo orizzontale rovesciato (seascape) che viene rielaborato in modo da ottenere otto pagine A6 per ogni pagina A4 finale.
Si ottiene un file con estensione .a7s-8-a4.ps.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) La distribuzione GNU/Linux Debian organizza la configurazione del file texmf.cnf attraverso un insieme di file più piccoli, come viene descritto più avanti.

2) Non tutte le modifiche che si apportano a questo file richiedono l'esecuzione di texconfig init; tuttavia è meglio ripeterlo, anche per quelle situazioni in cui non serve.

3) Il limite strutturale sembra dipendere da un'organizzazione del programma pensata per l'elaborazione su architetture a 16 bit.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome alml_questioni_tecniche.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!