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


Capitolo 438.   teTeX: la distribuzione Unix di TeX

TeX è un linguaggio di programmazione per l'editoria elettronica. Come nei linguaggi di programmazione comuni è possibile realizzare procedure o funzioni, con TeX è possibile costruire delle macro. Nel tempo sono stati realizzati diversi pacchetti standard di macro per TeX; per esempio LaTeX e AmS-TeX.

Semplificando le cose, una distribuzione TeX è un insieme composto da un compilatore TeX (ma forse è più appropriato il termine «compositore»), una serie di file contenenti le informazioni necessarie a produrre i caratteri da stampa e alcuni pacchetti di macro (di solito si tratta almeno di LaTeX).

La distribuzione di TeX più importante nei sistemi Unix è teTeX, (1) a cui si fa riferimento in questo capitolo.

Purtroppo, una distribuzione TeX è qualcosa di estremamente complesso, dove si raccolgono apporti di autori differenti che a volte hanno scelto licenze particolari. In questo senso, la scelta di una distribuzione TeX rispetto a un'altra può significare che questa possa essere complessivamente libera o meno. Tuttavia, dal punto di vista dell'utente, è come la differenza che c'è tra un compilatore libero di un certo linguaggio e un altro compilatore non libero per lo stesso linguaggio di programmazione.

In generale, l'utilizzatore di una distribuzione TeX «libera» non subisce alcun inconveniente dalle particolarità che possono avere le licenze di questo o quel componente. Il problema, semmai, si incontra nel momento in cui si voglia partecipare al suo sviluppo, a causa dell'incompatibilità che ci può essere tra licenze differenti. A questo proposito, si può osservare che molti file sono espressamente di dominio pubblico, per non creare difficoltà di alcun genere all'utilizzo in questa o quella distribuzione.

Questo capitolo si colloca prima di quelli che mostrano l'uso del linguaggio TeX e alcuni concetti potrebbero sembrare oscuri. Tuttavia, è importante comprendere inizialmente, almeno a grandi linee, la struttura e il funzionamento di una distribuzione TeX.

438.1   Collocazione

È importante chiarire che non esiste un modo standard di installare una distribuzione TeX e le differenze esistono anche nell'ambito della stessa distribuzione teTeX, dato che ogni distribuzione GNU tende a collocarla dove ritiene più opportuno.

Il blocco principale di teTeX dovrebbe trovarsi in una gerarchia che può inserirsi al di sotto di /usr/lib/ o /usr/share/. A titolo di esempio, viene mostrato un elenco di alcune di queste possibilità.

/usr/lib/teTeX/texmf/

/usr/lib/texmf/texmf/

/usr/share/teTeX/texmf/

/usr/share/texmf/

Negli esempi che vengono mostrati, quando si fa riferimento a questa directory, si indicano solo percorsi relativi a iniziare da texmf/. La sigla «texmf» sta per TeX and more, oppure per TeX and friends.

438.2   Configurazione

Di fronte alla complicazione di una distribuzione teTeX, potrebbe sembrare assurda l'idea di metterci le mani, pensando addirittura di modificare le impostazioni generali di teTeX. Tuttavia, quando si maneggiano documenti eccezionalmente voluminosi, potrebbe essere necessario modificare anche ciò che non è stato pensato per esserlo.

Alla fine della composizione di un documento TeX, si può leggere nel file delle registrazioni generato, un rapporto delle risorse utilizzate durante l'elaborazione. Si osservi l'esempio.

Here is how much of TeX's memory you used:
 2418 strings out of 25906
 45132 string characters out of 446921
 109255 words of memory out of 263001
 5196 multiletter control sequences out of 10000+0
 106774 words of font info for 69 fonts, out of 200000 for 1000
 15 hyphenation exceptions out of 1000
 33i,12n,21p,2494b,1259s stack positions out of 300i,100n,500p,30000b,4000s

Output written on texput.dvi (1844 pages, 7563800 bytes).

Questo è proprio il caso di un documento enorme (1 844 pagine), ma prima di tale informazione appaiono una serie di valori, dove alternativamente si vede quanto di una data risorsa è stato usato e quanto di questa sarebbe stato invece disponibile. Se per qualche ragione si esaurisce una di queste risorse, l'elaborazione si interrompe con una segnalazione di errore che indica quale limite è stato superato.

Se succede, si può provare a mettere mano al file di configurazione di teTeX che dovrebbe essere texmf/web2c/texmf.cnf. La prima volta, non è tanto facile capire il senso delle direttive che questo contiene, ma con un po' di tentativi si dovrebbe riuscire a risolvere il problema.

Prima di tutto si può osservare che, seguendo lo stile generale di TeX, i commenti sono introdotti dal simbolo di percentuale (%). Nella prima parte del file sono annotati i percorsi dei vari componenti della distribuzione.

% Part 1: Search paths and directories.

% The main tree, which must be mentioned in $TEXMF, below:
TEXMFMAIN = /usr/share/texmf

% A place for local additions to a "standard" texmf tree.  For example:
%   TEXMFLOCAL = /usr/share/texmf.local

% A place where texconfig stores modifications (instead of the TEXMFMAIN
% tree). texconfig relies on the name, so don't change it.
%   TEXMF_CNF = $TEXMF.cnf

% User texmf trees can be catered for like this...
%   HOMETEXMF = $HOME/texmf

La lettura di questa parte può rivelare delle informazioni importanti riguardo la propria distribuzione teTeX. Più avanti inizia una parte più delicata: quella che definisce le dimensioni degli array utilizzati da TeX, che di conseguenza rappresentano i limiti a cui si accennava all'inizio di questa sezione.

% Part 3: Array and other sizes for TeX (and Metafont and MetaPost).
...
% Max number of characters in all strings, including all error messages,
% help texts, font names, control sequences.  These values apply to TeX and MP.
pool_size.context = 500000
pool_size.cont-en = 500000
pool_size.cont-nl = 500000
pool_size.cont-de = 500000
%pool_size = 125000             
pool_size = 500000              

In questa parte, il valore più importante è quello di pool_size, perché può creare problemi soprattutto a pdfTeX. Nell'esempio si vede che è stato quadruplicato.

Alcune modifiche non possono essere prese in considerazione senza un'elaborazione successiva del file. In generale, al termine delle modifiche è bene dare il comando seguente:

texconfig init[Invio]

A parte il caso particolare dell'utilizzo appena mostrato, texconfig è un programma interattivo predisposto per configurare gli elementi essenziali della distribuzione teTeX. Si avvia semplicemente, senza bisogno di argomenti. La figura 438.4 mostra il menù principale di texconfig.

texconfig[Invio]

Figura 438.4. Il menù principale di texconfig.

.---------------------------- teTeX setup utility -----------------------------.
|                                                                              |
|  Hint: all output of external commands (e.g. tex) is logged into             |
|  a file. You can look at this file using LOG. If cursor keys make            |
|  trouble, you may have more luck with +/- and TAB.                           |
|                                                                              |
|                                                                              |
| .--------------------------------------------------------------------------. |
| |                EXIT    exit                                              | |
| |                PREF    personal preferences                              | |
| |                CONF    show configuration                                | |
| |                REHASH  rebuild ls-R database                             | |
| |                HYPHEN  hyphenation table (tex/latex)                     | |
| |                MODE    default mode (xdvi/dvips/mf)                      | |
| |                XDVI    xdvi configuration                                | |
| |                DVIPS   dvips configuration                               | |
| |                FONT    directories for font creation                     | |
| |                DOC     rebuild html documentation                        | |
| |                FAQ     frequently asked questions + answers              | |
| |                LOG     view logfile                                      | |
|------------------------------------------------------------------------------|
|                            <  OK  >      <Cancel>                            |
`------------------------------------------------------------------------------`

La funzione indicata con la sigla {PREF} serve solo a modificare il comportamento di texconfig, permettendo in particolare di selezionare un programma per la modifica del testo alternativo a quello predefinito.

La funzione {CONF} permette di mostrare la configurazione, consistente nella definizione delle directory contenenti i vari componenti della distribuzione teTeX.

La funzione {REHASH} permette di ricostruire il file texmf/ls-R, utilizzato per agevolare la ricerca dei componenti installati ad alcuni programmi della distribuzione. In generale, si ricostruisce questo file quando si aggiunte o si toglie qualche file (per esempio i file dei tipi di carattere).

La funzione {HYPHEN} è molto importante, perché permette di stabilire le lingue per cui attivare la suddivisione in sillabe del testo. Selezionando questa funzione si ottiene l'avvio del programma per la modifica di file di testo (presumibilmente VI) con il file texmf/tex/generic/config/language.dat. Questo file può essere modificato, quindi, dopo averlo salvato, vengono avviate automaticamente le procedure necessarie ad attivare in pratica le scelte fatte.

Di solito, si tratta di commentare le righe che fanno riferimento a linguaggi che non si vogliono gestire e di togliere il commento dalla direttiva di attivazione della sillabazione per la lingua italiana.

% File    : language.dat
% Purpose : specify which hypenation patterns to load 
%           while running iniTeX 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CAUTION: the first language will be the default if no style-file
%          (e.g. german.sty) is used.
% Since version 3.0 of TeX, hyphenation patterns for multiple languages are
% possible. Unless you know what you are doing, please let the american
% english patterns be the first ones. The babel system allows you to
% easily change the active language for your texts. For more information,
% have a look to the documentation in texmf/doc/generic/babel.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% The hyphenation pattern files are in the directory:
%       texmf/tex/generic/hyphen


% The US-english patterns should be loaded *always* and as *first* ones.
american ushyph1.tex %

% Let us define USenglish as an alias for american:
=USenglish %

% UK english, TWO LINES!
%british  ukhyph.tex %
%=UKenglish %

% english should always be defined. Either an alias for american or british.
=english %

% French, TWO lines!
french          frhyph.tex frhyphex.tex %
=patois %

german          ghyph31.tex %

% The following languages are disabled by default. Uncomment, what you need.
%bahasa         inhyph.tex %
%catalan        cahyph.tex %
%croatian       hrhyph.tex %
%czech          czhyph2e.tex %
%danish         dkhyphen.tex %
%dutch          nehyph2.tex %
%finnish        fihyph.tex %
%galician       gahyph.tex %
italian         ithyph.tex %
%magyar         huhyph.tex %
%norsk          nohyph.tex %
%polish         plhyph.tex %
%portuges       pthyph.tex %
%romanian       rohyphen.tex %
%russian        ruhyph.tex %
%serbocroatian  shhyphl.tex %
%slovene        sihyph22.tex %
%spanish        sphyph.tex %
%swedish        sehyph.tex %
%turkish        trhyph.tex %

% A "language" without hyphenation:
nohyphenation zerohyph.tex %

Al termine dell'elaborazione si può verificare nel file texmf/web2c/latex.log la presenza delle righe che dimostrano l'abilitazione della sillabazione per le lingue selezionate nel file di configurazione. In questo caso particolare, la lingua italiana corrisponde al linguaggio numero tre.

...
\l@american=\language0
...
\l@USenglish =\language0
\l@english =\language0
\l@french=\language1
...
\l@patois =\language1
\l@german=\language2
...
\l@italian=\language3
...
\l@nohyphenation=\language4

La funzione {MODE} permette di predisporre alcuni programmi per la risoluzione della propria stampante. Ciò si ottiene semplicemente selezionando il nome di una stampante che dovrebbe corrispondere, o essere molto simile alla propria.

La funzione {XDVI} permette di configurare Xdvi (capitolo 217), il programma di visualizzazione dei file DVI, in modo da stabilire il formato del foglio che si utilizza. Basta scorrere un elenco e confermare.

La funzione {DVIPS} permette di configurare Dvips (capitolo 217), il programma in grado di convertire file DVI in PostScript. Come per Xdvi, la cosa più importante da stabilire è il formato della carta, ma può anche essere indicata la stampante, o il comando di stampa da utilizzare quando Dvips viene usato per inviare direttamente un file alla stampa.

L'ultima funzione importante è {FONT} che permette di regolare i permessi di accesso alle directory che contengono i tipi di carattere e anche di configurare altre caratteristiche di questi file.

438.3   Funzionamento fondamentale di TeX

TeX utilizza un sorgente che si distingue perché di solito il suo nome finisce con l'estensione .tex; durante il processo di composizione genera un rapporto sull'elaborazione in un file con l'estensione .log e produce un file finale in formato DVI, con estensione .dvi. Successivamente, i file DVI vengono convertiti normalmente in PostScript attraverso il programma Dvips.

Eventualmente, è disponibile anche pdfTeX, con cui, invece di una composizione in formato DVI, si ottiene un file PDF senza passaggi intermedi.

Se si suppone che il file primo.tex contenga il testo seguente

Ciao a tutti.

Questo \`e il mio primo documento scritto con il linguaggio \TeX.
\bye

per ottenere la composizione in formato DVI è sufficiente il comando

tex primo.tex[Invio]

This is TeX, Version 3.14159 (Web2C 7.3.1)
(primo.tex [1] )
Output written on primo.dvi (1 page, 328 bytes).
Transcript written on primo.log.

mentre per ottenere la composizione in formato PDF è sufficiente il comando

pdftex primo.tex[Invio]

This is pdfTeX, Version 3.14159-13d (Web2C 7.3.1)
(primo.tex[/usr/share/texmf/pdftex/config/pdftex.cfg]
Babel <v3.6x> and hyphenation patterns for american, italian, nohyphenation,
  loaded.
[1[/usr/share/texmf/dvips/config/pdftex.map]] )<cmr10.pfb>
Output written on primo.pdf (1 page, 9807 bytes).
Transcript written on primo.log.

Nel primo caso si ottiene il file primo.dvi, mentre nel secondo si ha il file primo.pdf. Eventualmente, per convertire il file DVI in PostScript, è sufficiente usare Dvips nel modo seguente:

dvips -o primo.ps primo.dvi[Invio]

This is dvips(k) 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
' TeX output 2001.08.30:0835' -> primo.ps
<texc.pro>. [1] 

Ecco quello che si ottiene:

Esempio introduttivo

Si può anche usare una versione estesa di TeX, e-TeX e pdfeTeX, corrispondenti agli eseguibili etex e pdfetex, che in questo caso si comportano nello stesso modo:

etex primo.tex[Invio]

This is e-TeX, Version 3.14159-2.1 (Web2C 7.3.1)
entering extended mode
(primo.tex [1] )
Output written on primo.dvi (1 page, 328 bytes).
Transcript written on primo.log.

oppure

pdfetex primo.tex[Invio]

This is pdfeTeX, Version 3.14159-13d-2.1 (Web2C 7.3.1)
entering extended mode
(primo.tex[/usr/share/texmf/pdftex/config/pdftex.cfg] [1[/usr/share/texmf/dvips
/config/pdftex.map]] )<cmr10.pfb>
Output written on primo.pdf (1 page, 9807 bytes).
Transcript written on primo.log.

Gli eseguibili tex, pdftex etex e pdfetex sono indipendenti, mentre attorno a loro si presentano altrettante serie di collegamenti simbolici:

virtex     -> tex
initex     -> tex
latex      -> tex
amstex     -> tex

evirtex    -> etex
einitex    -> etex
elatex     -> etex

pdfevirtex -> pdfetex
pdfeinitex -> pdfetex
pdfelatex  -> pdfetex

pdfvirtex  -> pdftex
pdfinitex  -> pdftex
pdflatex   -> pdftex

A seconda del nome usato per avviare uno stesso eseguibile, si può ottenere un comportamento differente. Nel caso di virtex che è un collegamento a tex, si fa riferimento implicitamente al formato plain, corrispondente alle dichiarazioni contenute nei file della directory texmf/tex/plain/, così come pdfvirtex fa riferimento alla directory texmf/pdftex/plain/, ecc. Purtroppo, le cose non sono così semplici in generale, perché le convenzioni non sono perfettamente omogenee; tuttavia, vale la pena di tenere presente che i nomi del tipo [pdf][e]virtex sono equivalenti ai nomi del tipo [pdf][e]tex.

I nomi del tipo [pdf][e]initex fanno riferimento al linguaggio TeX senza la dichiarazione di alcuna macro e sono equivalenti all'uso degli eseguibili del tipo [pdf][e]tex con l'aggiunta dell'opzione --ini. In pratica, per usare [pdf][e]initex, oppure [pdf][e]tex --ini, occorre modificare l'esempio già visto nel modo seguente:

\input plain
Ciao a tutti.

Questo \`e il mio primo documento scritto con il linguaggio \TeX.
\bye

Questa spiegazione viene data solo per chiarire un po' il funzionamento di TeX e il significato di tutti i collegamenti simbolici che gli stanno intorno. L'uso dell'istruzione \input plain nel sorgente non funziona sempre come ci si aspetterebbe leggendo queste indicazioni; in pratica, una volta capito il senso della cosa, non va usata affatto.

In modo analogo a quanto visto fino a questo punto, quando si fa riferimento a un collegamento del tipo [pdf][e]latex, è come usare un eseguibile del tipo [pdf][e]initex, oppure [pdf][e]tex --ini, iniziando il sorgente TeX con la riga seguente:

\input latex.ini

Resta il fatto che il comando \input latex.ini non rappresenta necessariamente uno standard e quello che conta è sapere solo che i collegamenti [pdf][e]latex richiamano in qualche modo il formato latex. In altri termini, i collegamenti [pdf][e]latex fanno riferimento implicitamente alle macro di LaTeX.

Per completare questa sezione, viene mostrato un esempio di un sorgente LaTeX, ovvero un sorgente TeX fatto per le macro LaTeX. Si fa riferimento al nome ipotetico secondo.tex:

\documentclass{article}
\begin{document}
Ciao a tutti.

Questo \`e il mio primo documento scritto con il linguaggio \LaTeX .
\end{document}

Per comporre correttamente questo file, occorre un comando del tipo:

[pdf][e]latex secondo.tex[Invio]

A seconda dei casi si ottiene il file secondo.dvi, oppure secondo.pdf.

438.4   Interazione con TeX

La composizione di un documento scritto con il linguaggio TeX può avvenire anche con qualche forma di interazione. Se si avvia uno degli eseguibili [pdf][e]tex senza argomenti, si ottiene un invito a inserire il nome del file, attraverso l'indicazione di due asterischi:

tex[Invio]

This is TeX, Version 3.14159 (Web2C 7.3.1)
**

Si può inserire così il percorso del file, omettendo eventualmente l'estensione se questa corrisponde a .tex:

**terzo.tex[Invio]

(terzo.tex [1] )
Output written on terzo.dvi (1 page, 488 bytes).
Transcript written on terzo.log.

Supponendo di avere scritto un file, denominato quarto.tex, in cui non appare l'istruzione \bye finale, come nel testo seguente, TeX si ferma in attesa di istruzioni, mostrando un invito ridotto a un solo asterisco:

Ciao a tutti.

Questo \`e il mio quarto documento scritto con il linguaggio \TeX,
dove non appare l'istruzione $\backslash$bye alla fine del file.

tex quarto.tex[Invio]

This is TeX, Version 3.14159 (Web2C 7.3.1)
(quarto.tex)
*

Naturalmente, se si è in grado di farlo, si può aggiungere anche altro testo:

*Saluti![Invio]

*\bye[Invio]

[1]
Output written on quarto.dvi (1 page, 448 bytes).
Transcript written on quarto.log.

Esempio introduttivo

Di solito si evita di interagire con TeX, tuttavia si può essere costretti dal presentarsi di un errore durante la compilazione del sorgente. Per la precisione, il livello di interazione di TeX può essere regolato attraverso delle istruzioni speciali, come descritto nella tabella 438.24. In condizioni normali, il funzionamento avviene in modalità errorstopmode, corrispondente all'istruzione \errorstopmode, in cui TeX si ferma in attesa di indicazioni per qualunque errore si presenti.

Tabella 438.24. Istruzioni per il controllo della modalità di funzionamento interattiva.

Istruzione TeX Modalità di funzionamento
\errorstopmode
La composizione viene sospesa per qualunque errore.
\scrollmode
La composizione viene sospesa solo per gli errori più importanti.
\nonstopmode
La composizione viene sospesa solo in presenza di errori gravissimi.
\batchmode
La composizione viene sospesa solo in presenza di errori gravissimi e non si mostrano informazioni sullo schermo.

Per esempio, il file quinto.tex che contiene il testo seguente, usa erroneamente l'istruzione \tex al posto di \TeX:

Ciao a tutti.

Questo \`e il mio quinto documento scritto con il linguaggio \tex, in
cui si provoca volutamente un errore.
\bye

tex quinto.tex[Invio]

This is TeX, Version 3.14159 (Web2C 7.3.1)
(quinto.tex
! Undefined control sequence.
l.3 ...to documento scritto con il linguaggio \tex
                                                  , in
? 

Viene dichiarato sinteticamente il tipo di errore individuato, che in questo caso corrisponde a

! Undefined control sequence.

ovvero una sequenza di controllo indefinita. Nella riga successiva si indica il numero della riga in cui appare l'errore (l.3 sta per line 3) con il pezzo di testo che arriva fino all'errore, mentre il pezzo successivo appare staccato, nella riga successiva.

l.3 ...to documento scritto con il linguaggio \tex
                                                  , in

In pratica, secondo TeX l'errore è riferito esattamente alla stringa \tex. Sotto appare un invito composto da un punto interrogativo, con il quale TeX attende un'azione dell'utente. Si può rispondere con un altro punto interrogativo per avere l'elenco delle possibilità:

??[Invio]

Type <return> to proceed, S to scroll future error messages,
R to run without stopping, Q to run quietly,
I to insert something, E to edit your file,
1 or ... or 9 to ignore the next 1 to 9 tokens of input,
H for help, X to quit.
?

La tabella 438.30 descrive brevemente il significato e l'uso dei comandi disponibili, mostrando anche la modalità corrispondente quando una scelta coincide con la richiesta di cambiamento di questa.

Tabella 438.30. Interazione in presenza di un errore.

Tastiera Istruzione TeX
corrispondente
Effetto
[h][Invio] Mostra la spiegazione del motivo dell'interruzione.
[i][Invio] Richiede di inserire una correzione.
[e][Invio] Avvia un programma per la modifica del file sorgente.
[x][Invio] Arresta la composizione.
[s][Invio]
\scrollmode
Non si ferma più in presenza di piccoli errori.
[r][Invio]
\nonstopmode
Non si ferma più per alcun errore.
[q][Invio]
\batchmode
Non si ferma più per alcun errore e non mostra alcuna informazione.
[Invio] Cerca di rimediare all'errore e continua la composizione.
[n][Invio] Cerca di rimediare automaticamente ai prossimi n errori.

Nel caso dell'errore mostrato, si vuole provare a capire meglio di cosa si tratta, attraverso il comando [h][Invio]:

?h[Invio]

The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

Dal momento che si può correggere facilmente l'errore, si richiede di poter inserire del testo sostitutivo:

?i[Invio]

insert>\TeX[Invio]

[1] )
Output written on quinto.dvi (1 page, 376 bytes).
Transcript written on quinto.log.

Con il comando [e][Invio] si può avviare un programma per la modifica del file sorgente. Di solito si tratta di VI, ma si può intervenire nella variabile di ambiente TEXEDIT indicando il nome di un altro programma, usando le metavariabili %d e %s per indicare rispettivamente la riga contenente l'errore e il nome del file. Per esempio, rimanendo nel caso di VI, è possibile usare la sintassi seguente per raggiungere la riga n-esima del file indicato:

vi -c n file

In questo modo, si dovrebbe assegnare alla variabile di ambiente TEXEDIT la stringa vi -c %d %s:

TEXEDIT="vi -c %d %s"[Invio]

export TEXEDIT[Invio]

438.5   Riferimenti


1) teTeX   GNU GPL


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


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

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

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory