[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 271.   Alml: preparazione e visione generale

Alml (1) è il sistema di composizione SGML di questo documento, Appunti di informatica libera. Si tratta di un programma Perl, alml, che controlla l'analizzatore SGML e altri programmi necessari per arrivare alla composizione finale del documento.(2)

Alml, con il suo DTD, continuerà a evolversi assieme all'opera Appunti di informatica libera. Chi desidera utilizzare questo sistema di composizione deve tenere in considerazione tale dinamicità; pertanto, prima di passare a un eventuale aggiornamento, deve valutare l'opportunità del cambiamento.

Alml si avvale di altri programmi per l'analisi SGML e per la generazione di alcuni formati finali. In particolare, è necessario disporre di nsgmls che fa parte generalmente del pacchetto SP (anche se la propria distribuzione GNU/Linux potrebbe nominarlo in modo differente); inoltre è fondamentale la presenza di LaTeX per generare la composizione da stampa. La tabella 271.1 riepiloga gli applicativi da cui dipende il buon funzionamento di Alml.

Tabella 271.1. Applicativi da cui dipende Alml.

Applicativo Compito
Perl Alml è scritto in Perl.
Perl-gettext Modulo Perl per l'utilizzo di Gettext.
SP Verifica la validità SGML e genera una prima conversione.
LaTeX Compone in un formato finale per la stampa.
PSUtils Riorganizza, ingrandisce e riduce un file PostScript.
Dvipdfm Consente una conversione in PDF a partire dal file DVI.
Uuencode Estrae le immagini incorporate in file esterni.
ImageMagick Converte i file delle immagini nei formati appropriati, adattando le dimensioni.
Ghostscript Serve a ImageMagick per la conversione di file PostScript in altri formati.
HTML2ps Consente l'importazione di codice HTML con LaTeX e con pdfLaTeX.
Links Converte un file HTML in testo puro.

271.1   Installazione di Alml

Alml viene fornito solo attraverso archivi tradizionali di tipo tar+gzip, in file con nomi del tipo:

alml-versione.tar.gz

Estraendo il contenuto dell'archivio, si dovrebbero ottenere in particolare i file e le sottodirectory elencati nella tabella 271.2, che rappresentano l'essenziale.

Tabella 271.2. Contenuto essenziale dell'archivio di distribuzione di Alml.

File o directory Descrizione
man/* Pagine di manuale relative agli eseguibili.
doc/* Esempi e documentazione eventuale.
share/* File e directory da collocare in /usr/share/alml/.
bin/* File eseguibili.
etc/alml-tex.sty File di configurazione da copiare nella directory /etc/.

Gli eseguibili, che nel pacchetto di distribuzione si trovano nella directory bin/, devono essere raggiungibili attraverso il percorso di ricerca del sistema, rappresentato dalla variabile di ambiente PATH. Pertanto vanno collocati opportunamente, oppure vanno predisposti dei collegamenti adeguati.

Quanto contenuto nella directory share/, va collocato nella directory /usr/share/alml/, oppure vanno realizzati dei collegamenti equivalenti.

271.1.1   Gettext

I messaggi di Alml possono essere tradotti. Se si dispone del file PO relativo alla lingua preferita, è necessario compilarlo come nell'esempio seguente:

msgfmt -vvvv -o alml.mo it.po

In questo esempio, il file it.po viene compilato generando il file alml.mo. Trattandosi evidentemente della traduzione italiana, questo file può essere collocato in /usr/share/locale/it/LC_MESSAGES/, o in un'altra posizione analoga in base agli standard del proprio sistema operativo.

Se non è disponibile il modulo Perl-gettext,(3) che serve a Alml per accedere alle traduzioni, è possibile eliminare il suo utilizzo e simulare la funzione di Gettext. In pratica si commentano le istruzioni seguenti all'inizio dei programmi alml, alml-sp2sp, alml-sp2be e alml-extra:


# We *don't* want to use gettext.
#use POSIX;
#use Locale::gettext;
#setlocale (LC_MESSAGES, "");
#textdomain ("alml");

Inoltre, si tolgono i commenti dalla dichiarazione della funzione fittizia gettext(), come si vede qui:


sub gettext
{
    return $_[0];
}

271.2   Esempio iniziale

Un esempio iniziale può servire per comprendere il funzionamento generale di Alml.


<!DOCTYPE ALML PUBLIC "-//Daniele Giacomini//DTD Alml//EN">

<alml lang="it" spacing="uniform">
<head>
    <admin>
        <description>Un esempio per l'utilizzo del sistema Alml</description>
        <keywords>SGML, XML, HTML, Alml</keywords>
    </admin>
    <title>Esempio di utilizzo di Alml</title>
    <author>Pinco Pallino &lt;pinco.pallino@brot.dg&gt;</author>
    <date>2011.11.11</date>
    <legal>
        <p>Copyright &copy; Pinco Pallino, &lt;pinco.pallino@brot.dg&gt;</p>

        <p>Permission is granted to copy, distribute and/or modify this
        document under the terms of the GNU Free Documentation License,
        Version 1.1 or any later version published by the Free Software
        Foundation; with no Invariant Sections, with no Front-Cover
        Texts, and with no Back-Cover Texts. A copy of the license is
        included in the section entitled "GNU Free Documentation
        License".</p>
    </legal>
    <maincontents levels="2">Indice generale</maincontents>
</head>
<intro>
<h1>
Introduzione al documento
</h1>

<p>Questo documento è scritto per... bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...</p>

<p>Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...</p>

</intro>
<body>
<h1 id="capitolo-primo">
Lavorando con bla bla bla...
<indexentry>lavorare con bla bla</indexentry>
<indexentry>bla bla</indexentry>
</h1>

<p>Lavorare con bla bla è molto semplice... bla bla bla bla bla bla bla
bla bla bla bla bla bla...</p>

<p>Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...</p>

<h2>
Fare di meglio
</h2>

<p>C'è anche un modo migliore per... bla bla bla bla bla bla bla bla bla
bla bla bla bla...</p>

<p>Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...</p>

<h1 id="capitolo-secondo">
Non dover lavorare più
<indexentry>relaxing</indexentry>
</h1>

<p>Se non si lavora ci si può riposare, ma questo si può fare solo se si
dispone già di una certa disponibilità economica... bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla...</p>

<p>Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...</p>

</body>
<appendix>
<h1>
Alcune note
</h1>

<p>Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...</p>

<p>Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...</p>

</appendix>
<index>
<h1>
Index
</h1>

<printindex index="main">

</index>
</alml>

Se tutto viene copiato correttamente nel file ipotetico esempio.sgml, con il comando seguente si ottiene la composizione in PostScript, attraverso LaTeX e Dvips:

alml --ps esempio.sgml

Con il comando seguente, si ottiene la composizione in HTML, su più file distinti:

alml --html esempio.sgml

271.3   Cosa si genera con la composizione

L'utilizzo di Alml può generare file differenti a seconda del tipo di operazione che viene richiesta. La tabella 271.3 riepiloga questi file.

Tabella 271.3. File generati dall'utilizzo di Alml. I file nome.sgml e nome.css devono essere già presenti.

File Descrizione
nome.sgml Il sorgente SGML principale da cui hanno origine gli altri file.
nome.css Foglio di stile CSS necessario per la composizione HTML.
nome.X2V.ps Composizione in PostScript con l'opzione --long.
nome.X3V.ps Composizione in PostScript con l'opzione --extralong.
nome.X3H.ps Composizione in PostScript con l'opzione --large.
nome.X4H.ps Composizione in PostScript con l'opzione --extralarge.
nome.X1T.ps Composizione in PostScript con l'opzione --thin.
nome.aux File ausiliario e temporaneo della composizione attraverso LaTeX.
nome.diag File diagnostico generato da alml.
nome.pageref File temporaneo con i riferimenti alle pagine nella composizione con LaTeX.
nome.dvi Composizione in DVI, finale o transitoria.
nome.log File diagnostico generato da LaTeX.
nome.pdf Composizione in PDF.
nome.ps Composizione in PostScript.
nome.tex Composizione transitoria in formato LaTeX.
nome.html Primo file della composizione in HTML.
nomen.html n-esimo file della composizione in HTML.
n.jpg n-esimo file delle immagini relativo alla composizione in HTML.
n.ps n-esimo file delle immagini relativo alla composizione in PostScript.
*~ File temporaneo non meglio precisato.

È bene sottolineare che i file indicati come nome.sgml e nome.css devono essere già presenti perché si possa usare Alml; inoltre, il sorgente SGML principale potrebbe a sua volta incorporare altri file SGML.

Se il sorgente SGML fa riferimento a immagini collocate in file esterni, è necessario che queste siano in formato PNG.(4) In generale, conviene prevedere una directory apposita per questi file, in modo da non essere intralciati quando la composizione in HTML, o in PostScript, genera la copia delle immagini richieste nella directory corrente, utilizzano i nomi nella forma n.jpg o n.ps.

Alle volte si possono incontrare problemi inspiegabili nell'inserimento di immagini, che si possono manifestare nelle conversioni o l'inserimento nella composizione in PDF. Spesso si superano questi problemi usando ImageMagick e facendo un passaggio intermedio nel formato JPG. Per esempio, disponendo del file pippo.png che risulta corretto e perfettamente visibile con gli strumenti normali, ma che si comporta in modo strano nella composizione PDF, può convenire il passaggio seguente:

convert pippo.png pippo.jpg

convert pippo.jpg pippo.png

Al termine, il file pippo.jpg può essere eliminato.

271.4   Sintassi nell'uso del programma frontale

Il programma frontale attraverso cui si gestisce il sistema di composizione Alml è alml:

alml opzioni sorgente_sgml
alml --help
alml --version

Come si vede dal modello sintattico, a parte i casi delle opzioni --help e --version, è sempre richiesta l'indicazione di un file sorgente SGML, a cui applicare un qualche tipo di elaborazione.

Opzioni

--help

Mostra la guida rapida interna e conclude il funzionamento.

--version

Mostra le informazioni sulla versione e conclude il funzionamento.

--paper={a4|letter}

Permette di specificare le dimensioni della carta in base a un nome standard. Il formato predefinito è A4, che corrispondente alla parola chiave a4.

--paper-orientation={normal|inverted}

Permette di specificare l'orientamento della carta. Si osservi che non vengono usate le definizioni tipiche, corrispondenti a portrait e landscape, perché qui il contesto è un po' diverso. A ogni modo, se si seleziona il formato di carta A4 e poi si aggiunge l'opzione --paper-orientation=inverted, si intende arrivare a una composizione in orizzontale.

--draft

Quando il contesto lo permette, serve per ottenere una composizione particolare, con più informazioni utili alla correzione o alla revisione del testo. A differenza di quanto si potrebbe essere portati a pensare, in questo modo l'elaborazione è più complessa del normale, proprio per portare in risalto tali informazioni.

--compact

Quando il contesto lo permette, serve per ottenere una composizione compatta, risparmiando spazio.

--long

Quando si usa in abbinamento all'opzione --ps, cioè quando si vuole ottenere un risultato in formato PostScript, permette di ottenere una composizione speciale, a due colonne con il testo ridotto della metà. Di solito si abbina a questa anche l'opzione --compact.

Le opzioni --long, --extralong, --large, --extralarge e --thin, sono delle estensioni al formato selezionato con --paper, che possono essere disponibili solo con pochi formati di partenza. Oltre a questo, va considerato il fatto che si possono utilizzare solo quando l'orientamento richiesto è di tipo «normale», tenendo conto che il risultato finale potrebbe essere orizzontale o verticale, in base al tipo di estensione.

--extralong

Come --long, su tre colonne verticali, molto rimpicciolite.

--large

Come --long, su tre colonne in orizzontale.

--extralarge

Come --large, su quattro colonne in orizzontale, molto rimpicciolite.

--thin

Un formato ridotto che si traduce in pratica in un A7x4, ovvero mezzo A4 diviso in verticale.

--clean

Rimuove alcuni file temporanei abbinati al file sorgente indicato. Si tratta per la precisione di nome.pageref, nome.diag, nome.aux e nome.log.

--verbose

Segnala il procedere dell'elaborazione con informazioni dettagliate. In generale tali informazioni sono ottenibili dal file nome.diag; tuttavia, in presenza di file sorgenti di grandi dimensioni, può servire per sapere a che punto è l'elaborazione.

--sgml-include=entità_parametrica

Attraverso questa opzione, che può essere usata anche più volte, è possibile «includere» delle entità parametriche. Per la precisione, è come se nel sorgente venisse dichiarata un'entità parametrica corrispondente, assegnandole la parola chiave INCLUDE. Ciò viene usato per controllare l'inclusione di porzioni di sorgente, secondo le convenzioni dell'SGML.

--page-numbering={plain|default}

Questa opzione permette di definire in che modo gestire la numerazione delle pagine nei formati di composizione cartacei. In condizioni normali, la numerazione è realizzata attraverso sequenze differenti: una per la parte iniziale fino alla fine dell'introduzione, una per il corpo (comprese le appendici) e una finale per gli indici analitici. Assegnando la parola chiave plain si fa in modo che la numerazione sia unica, cosa che potrebbe essere conveniente per il formato PDF.

--sgml-syntax | --sgml-check

Una qualunque di queste due opzioni permette di ottenere la verifica formale del sorgente, in base al DTD.

--sp

Con questa opzione si vuole raggiungere solo un formato intermedio per il controllo diagnostico del funzionamento di Alml.

--tex | --latex

Con questa opzione si vuole raggiungere solo un formato intermedio in LaTeX per il controllo diagnostico del funzionamento di Alml.

--dvi

Genera un risultato in formato DVI. L'elaborazione crea una serie di file EPS per le immagini, secondo il modello n.ps.

--ps | --postscript

Genera un risultato in formato PostScript. L'elaborazione crea una serie di file EPS per le immagini, secondo il modello n.ps; una volta ottenuto il file PostScript finale, questi file non servono più.

--pdf

Genera un risultato in formato PDF.

--html

Genera un risultato in formato HTML, articolato in più file, dove il primo è nome.html e gli altri sono nomen.html. Inoltre, viene fatta una copia dei file delle immagini, secondo il modello n.jpg (le due numerazioni sono indipendenti).

--html-text

Genera un risultato in formato HTML speciale, in un file unico, senza riferimenti a immagini esterne e con tabelle testuali. Il file ottenuto può essere consultato con Links e con questo può essere convertito in un testo puro e semplice, attraverso il comando:

links -dump nome.html > nome.txt


--html-check | --html401-check

Se sono stati installati i file necessari, consente la verifica formale di un file HTML secondo le specifiche della versione 4.01.

--html320-check

Se sono stati installati i file necessari, consente la verifica formale di un file HTML secondo le specifiche della versione 3.2.

--xml

Se sono stati installati i file necessari, consente la verifica formale di un file XML secondo le specifiche del DTD relativo (attualmente solo XHTML).

271.5   Organizzare un file-make

Un file-make opportuno può facilitare l'uso di Alml. Viene proposto un esempio elementare, riferito al file example.sgml, in cui si può vedere anche l'utilizzo proposto di alml.


# file name prefix.
DOC_PREFIX=example

# Notice that "text" generates an HTML file with the same name
# for the first HTML page. This is why it is before the standard
# HTML typesetting.
#
all:    \
clean   \
text    \
html    \
ps      \
longps  \
extralongps  \
largeps  \
extralargeps  \
pdf

clean:
        @echo "Cleaning..."                             ; \
        find . -name core    -exec rm -f \{\} \;        ; \
        rm -f $(DOC_PREFIX)*.tex                        ; \
        rm -f $(DOC_PREFIX)*.dvi                        ; \
        rm -f $(DOC_PREFIX)*.sp                         ; \
        rm -f $(DOC_PREFIX)*.sp2                        ; \
        rm -f $(DOC_PREFIX)*.ps                         ; \
        rm -f $(DOC_PREFIX)*.pdf                        ; \
        rm -f $(DOC_PREFIX)*.txt                        ; \
        rm -f $(DOC_PREFIX)*.log                        ; \
        rm -f $(DOC_PREFIX)*.aux                        ; \
        rm -f $(DOC_PREFIX)*.tmp                        ; \
        rm -f $(DOC_PREFIX)*.diag                       ; \
        rm -f $(DOC_PREFIX)*.pageref                    ; \
        rm -f $(DOC_PREFIX)*.pageloc                    ; \
        rm -f *.html                                    ; \
        rm -f *.bak                                     ; \
        rm -f *.jpg                                     ; \
        rm -f *.ps                                      ; \
        rm -f *\~

check:
        @alml --sgml-check              \
              --verbose                 \
              $(DOC_PREFIX).sgml

dvi:
        @alml --dvi                     \
              --verbose                 \
              $(DOC_PREFIX).sgml

ps:
        @alml --ps                      \
              --verbose                 \
              $(DOC_PREFIX).sgml

longps:
        @alml --ps                      \
              --verbose                 \
              --compact                 \
              --long                    \
              --page-numbering=plain    \
              $(DOC_PREFIX).sgml

extralongps:
        @alml --ps                      \
              --verbose                 \
              --compact                 \
              --extralong               \
              --page-numbering=plain    \
              $(DOC_PREFIX).sgml

largeps:
        @alml --ps                      \
              --verbose                 \
              --compact                 \
              --large                   \
              --page-numbering=plain    \
              $(DOC_PREFIX).sgml

extralargeps:
        @alml --ps                      \
              --verbose                 \
              --compact                 \
              --extralarge              \
              --page-numbering=plain    \
              $(DOC_PREFIX).sgml

pdf:
        @alml --pdf                     \
              --verbose                 \
              --page-numbering=plain    \
              $(DOC_PREFIX).sgml

html:
        @alml --html                    \
              --verbose                 \
              $(DOC_PREFIX).sgml

text:
        @alml --html-text               \
              --verbose                 \
              $(DOC_PREFIX).sgml        ; \
        links -dump                      \
             $(DOC_PREFIX).html         \
              > $(DOC_PREFIX).txt

Si può osservare in particolare l'obiettivo clean che elimina tutti i file non indispensabili e in particolare tutti i file il cui nome termina per .html e per .ps.

Se per esempio si utilizza il comando make ps, si otterrà la composizione in PostScript, generando in particolare il file example.ps.

271.6   Particolarità del sistema Alml

Recentemente, Alml è stato modificato e alcune sue funzionalità particolari, non sono più disponibili.

Non esiste più la gestione delle derivazioni, pertanto, non si possono più usare strutture come quelle seguenti:

<!-- START derivazione -->
...
...
<!-- STOP derivazione -->

Gli elementi verbatimpre, asciiart e uri, vanno usati assieme a una sezione marcata di tipo CDATA:

<verbatimpre>
<![CDATA[
...
...
...
]]>
</verbatimpre>

<asciiart>
<![CDATA[
...
...
...
]]>
</asciiart>

<uri><![CDATA[indirizzo]]></uri>

271.7   Usare Textchk, Checkbot e Ispell con Alml

Textchk e Checkbot, descritti rispettivamente nel capitolo 270 e nella sezione 259.5, 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

checkbot --url file://`pwd`/mio_file.html

Per usare Ispell, è conveniente generare prima una versione del documento in formato testo puro. Per questo si potrebbe usare Lynx o Links, 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 la barre oblique inverse (\).

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

271.8   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:


main_memory = 2000000
font_mem_size = 800000
pool_size = 250000
hash_extra = 10000
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:

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

texconfig init

Nel caso particolare della distribuzione Debian, il file di configurazione /etc/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; successivamente occorre eseguire il comando update-texmf, il quale ricostruisce un file /etc/texmf/texmf.cnf nuovo; infine si deve eseguire texconfig init.

271.8.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 riesca 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:(6)


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

271.8.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}

    e 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.

271.8.3   Suddivisione automatica in tomi e parti della composizione finale PostScript

Per facilitare la suddivisione della composizione PostScript in file contenenti solo un tomo 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 tomo inizia dalla 13-esima pagina (ottenuta sommando 12 a 1) e termina all'inizio del tomo 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.

271.8.4   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

Le opzioni che vengono descritte nel seguito si riferiscono a alml-extra, usato direttamente.

Opzioni

--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 tomi (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 tomo 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-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 tomi (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.

Se il documento che si va a suddividere prevede una suddivisione in tomi, la scomposizione che si ottiene non è perfetta, perché la fine di una parte che precede un tomo, si trova a includere le pagine che rappresentano l'inizio del tomo stesso, fino alla pagina che precede la parte successiva.

--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.

--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.

--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.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Alml   GNU GPL

2) Questo capitolo e i successivi descrivono il sistema di composizione Alml. Tuttavia, per poter comprendere quanto esposto, è necessario prima conoscere ciò che è stato descritto a proposito dell'SGML, di TeX e dei sistemi comuni di composizione basati sull'SGML.

3) Nelle distribuzioni Debian si tratta del pacchetto liblocale-gettext-perl.

4) A seconda del tipo di composizione finale, può darsi che sia necessario convertire le immagini in un altro formato. In questi casi, viene usato ImageMagick per generare automaticamente ciò che serve. Per la precisione, il formato PNG di partenza è ciò che serve per la composizione in PDF; per la composizione in PostScript servono immagini EPS; per la composizione HTML vengono generati file in formato JPG.

5) 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.

6) 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_preparazione_e_visione_generale.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]