[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
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 più importante nei sistemi Unix di TeX è 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.
È 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/Linux 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 si mostreranno, quando si farà riferimento a questa directory, si indicheranno solo percorsi relativi a iniziare da texmf/
. La sigla «texmf» sta per TeX and more, oppure per TeX and friends.
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 era 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
A parte il caso particolare dell'utilizzo appena mostrato, texconfig è un programma interattivo, che viene descritto nella prossima sezione.
texconfig è un programma, in forma di script predisposto per configurare gli elementi essenziali della distribuzione teTeX. Si avvia semplicemente, senza bisogno di argomenti. La figura 229.1 mostra il menù principale di texconfig.
#
texconfig
|
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 potrà 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 91), 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 91), 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.
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:
|
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 |
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 |
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
A seconda dei casi si otterrà il file secondo.dvi
, oppure secondo.pdf
.
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.
|
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 229.1. 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 229.1. Istruzioni per il controllo della modalità di funzionamento interattiva.
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 229.2 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 229.2. Interazione in presenza di un errore.
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]
daniele @ swlibero.org
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome tetex_la_distribuzione_unix_di_tex.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]