Introduzione a Texinfo

Texinfo è un sistema di composizione ideato per la documentazione del progetto GNU, allo scopo di permettere la produzione di documenti ipertestuali in formato Info e di documenti stampati, attraverso il sistema di composizione TeX, a partire da un sorgente unico. Attualmente è disponibile anche la possibilità di comporre in HTML, cosa che completa il sistema Texinfo e lo rende uno strumento essenziale, ma anche molto valido.

A seconda di come è organizzata la propria distribuzione GNU, gli script che compongono il sistema Texinfo potrebbero far parte di un pacchetto indipendente, oppure essere inseriti direttamente all'interno della distribuzione teTeX (LaTeX).

Emacs permette di gestire in modo automatico molte particolarità del sorgente Texinfo, facilitando così il lavoro dell'utilizzatore. In questo capitolo si vuole mostrare solo l'essenziale di Texinfo, pertanto, tutta la parte che riguarderebbe la gestione di Emacs viene ignorata. Questo e altri particolari possono essere approfonditi nella documentazione originale di Texinfo.

Esempio introduttivo

Di solito, il modo migliore per cominciare a comprendere il funzionamento di un sistema di composizione, è quello di partire da un esempio, per avere modo di vedere subito come comporlo in pratica. Il file seguente dovrebbe essere disponibile presso allegati/a2/esempio.info.

\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename esempio.info
@settitle Introduzione a Texinfo
@c %**end of header

@setchapternewpage odd

@ifinfo
Questo è un esempio molto breve di un documento scritto
utilizzando il sistema Texinfo.

Copyright @copyright{} 1999 Tizio Tizi
@end ifinfo

@titlepage
@sp 10
@comment Per il titolo viene utilizzato un corpo molto grande.
@center @titlefont{Titolo di esempio}

@c I due comandi seguenti iniziano la pagina del copyright.
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1999 Tizio Tizi
@end titlepage

@node    Top, Suddivisione del documento, , (dir)
@comment nodo-attuale, nodo-successivo, nodo-precedente, nodo-superiore

@menu
* Suddivisione del documento::      Il primo capitolo di questo esempio
                                    molto breve.
* Paragrafi::                       Il secondo capitolo.
* Indice analitico::                L'indice analitico.
@end menu

@node    Suddivisione del documento, Paragrafi, Top, Top
@comment nodo-attuale, nodo-successivo, nodo-precedente, nodo-superiore
@chapter Suddivisione del documento con Texinfo
@cindex suddivisione
@cindex capitolo
@cindex sezione
@cindex sottosezione

Un documento scritto in Texinfo è organizzato in capitoli, che possono
essere suddivisi in sezioni, sottosezioni e sotto-sottosezioni:

@enumerate
@item
capitolo -- @code{@@chapter};
@item
sezione -- @code{@@section};
@item
sottosezione -- @code{@@subsection};
@item
sotto-sottosezione -- @code{@@subsubsection};
@end enumerate

@node    Paragrafi, Indice analitico, Suddivisione del documento, Top
@comment nodo-attuale, nodo-successivo, nodo-precedente, nodo-superiore
@chapter Paragrafi in un sorgente Texinfo
@cindex paragrafo
@cindex testo

Il testo normale di un documento scritto in Texinfo è suddiviso in
paragrafi senza l'indicazione esplicita di alcun comando speciale.
Di conseguenza, basta inserire una riga vuota nel sorgente, per
produrre la separazione tra un paragrafo e il successivo.

@node    Indice analitico, , Paragrafi, Top
@comment nodo-attuale, nodo-successivo, nodo-precedente, nodo-superiore
@unnumbered Indice analitico

@printindex cp

@contents
@bye

Si suppone di avere nominato il file di questo sorgente esempio.texinfo. Di seguito vengono mostrati i comandi necessari alla composizione per generare un file Info, un risultato in HTML (in due modi differenti), un file PostScript e un file PDF.

makeinfo esempio.texinfo[Invio]

makeinfo --html esempio.texinfo[Invio]

texi2html esempio.texinfo[Invio]

texi2dvi esempio.texinfo ; dvips -t a4 -o esempio.ps esempio.dvi[Invio]

texi2dvi --pdf esempio.texinfo[Invio]

Nel primo caso viene generato il file Info esempio.info; nel secondo e nel terzo si ottiene il file esempio.html (affiancato eventualmente da un file contenente l'indice generale); nel quarto caso si ottiene il file esempio.ps; nell'ultimo si ottiene il file esempio.pdf.

Logica fondamentale di Texinfo

Texinfo è TeX a cui è stato applicato uno stile speciale, per cui il simbolo @ sostituisce la barra obliqua inversa (\). Questo si ottiene attraverso uno stile contenuto nel file texinfo.tex, che viene incluso opportunamente con il comando TeX iniziale:

\input texinfo

Da quel punto in poi, la barra obliqua inversa ha valore letterale. Sempre allo scopo di ridurre al minimo i simboli che hanno significati speciali, i commenti si indicano attraverso un comando apposito: @c, oppure @comment. A questo proposito, si può osservare che la prima riga mostrata nell'esempio introduttivo, contiene proprio un commento, subito dopo la dichiarazione dell'inclusione dello stile per Texinfo:

\input texinfo    @c -*-texinfo-*-

Si tratta di una stringa convenzionale, che è bene utilizzare anche se non è strettamente necessaria alla composizione di un sorgente Texinfo, perché riguarda Emacs, permettendogli di identificare il file e di qualificarlo per quello che è.

Una volta chiarita la natura TeX di un sorgente Texinfo, si può comprendere il comportamento generale del sistema, nel momento in cui la composizione viene fatta per arrivare alla stampa. In particolare, si può intendere il modo in cui vengono considerati gli spazi, che vengono eliminati quando sembrano superflui, così come si può intendere il motivo per cui basta separare i blocchi di testo con una o più righe vuote (o bianche), per ottenere la separazione in paragrafi. Tuttavia, le cose cambiano quando la composizione avviene in modo da generare un file Info: in questo caso gli spazi aggiuntivi contano e anche le righe vuote superflue possono essere prese in considerazione.

Nonostante la sua natura TeX, Texinfo è orientato alla generazione di un ipertesto consultabile attraverso un terminale a caratteri; pertanto, è su questo punto che si fondano le sue caratteristiche e le sue limitazioni.

Scomposizione del documento

Un documento Texinfo è articolato in due modi distinti, che devono avvenire simultaneamente. Da una parte si trova l'articolazione del testo nel modo più adatto a un libro, con i suoi capitoli e le sezioni a livelli diversi (come fa LaTeX), dall'altra parte c'è un ipertesto organizzato a grafo (un reticolo di collegamenti uniti assieme da dei nodi), dove i nodi sono i vari blocchi di informazioni.

Texinfo non pone limitazioni particolari all'uso dei nodi, tuttavia il buon senso richiede che siano usati in modo compatibile con la struttura «cartacea» del documento. In generale, ogni capitolo deve avere un nodo corrispondente, mentre le sezioni potrebbero averlo se ciò è opportuno, e lo stesso vale per le sottosezioni. Nell'esempio introduttivo, prima della dichiarazione del primo capitolo, si vede l'indicazione del nodo relativo:

@node    Suddivisione del documento, Paragrafi, Top, Top
@comment nodo-attuale, nodo-successivo, nodo-precedente, nodo-superiore
@chapter Suddivisione del documento con Texinfo

Dal momento che la composizione in formati finali diversi genera risultati differenti, c'è poi l'esigenza di poter distinguere il testo che deve essere usato per una o l'altra composizione. Per questo si possono circoscrivere delle porzioni di testo tra i comandi @ifinfo @end ifinfo, @iftex @end iftex, e @ifhtml @end ifhtml. Nell'esempio introduttivo si vede proprio l'uso di questi comandi per inserire del testo che viene utilizzato solo nella composizione in formato Info:

@ifinfo
Questo è un esempio molto breve di un documento scritto
utilizzando il sistema Texinfo.

Copyright @copyright{} 1999 Tizio Tizi
@end ifinfo

Inserimento di simboli speciali

Il linguaggio di composizione utilizzato da Texinfo, attribuisce un significato speciale al simbolo @ e alle parentesi graffe. Per indicare questi caratteri in modo letterale, basta farli precedere da un altro @. In questo senso, la sequenza @carattere rappresenta spesso la richiesta esplicita di fare riferimento al carattere in modo letterale. La tabella u115.6 elenca alcune di queste sequenze di escape.

Tabella u115.6. Comandi per rappresentare alcuni simboli speciali.

Comando Descrizione
@@
Un solo simbolo @.
@{
Una parentesi graffa aperta.
@}
Una parentesi graffa chiusa.
@<SP>
Uno spazio non interrompibile.

In modo simile si possono definire delle lettere speciali, se queste non sono disponibili attraverso la tastiera. La tabella u115.7 mostra i comandi utili per rappresentare le vocali accentate italiane. Tuttavia, è opportuno osservare che non è sempre conveniente l'uso di questi comandi, se si ritiene di poter usare una codifica migliore dell'ASCII tradizionale. Infatti, se si usa un comando come @`a si rischia poi di vedere a` nella composizione Info, cosa che non succede se si utilizza la codifica ISO 8859-1.

Tabella u115.7. Comandi per la rappresentazione delle vocali accentate nella lingua italiana.

Comando Risultato Comando Risultato
@`a
à
@`A
À
@`e
è
@`E
È
@'e
é
@'E
É
@`i
ì
@`I
Ì
@`o
ò
@`O
Ò
@`u
ù
@`U
Ù

Struttura di un documento Texinfo

In un sorgente Texinfo, prima di arrivare alla scomposizione del testo in capitoli e nodi, c'è una parte iniziale che merita un po' di attenzione. La prima dichiarazione in assoluto è quella dell'inserimento dello stile texinfo.tex, come è già stato mostrato, quindi si incontrano le dichiarazioni @setfilename e @settitle che costituiscono l'intestazione del sorgente:

\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename esempio.info
@settitle Introduzione a Texinfo
@c %**end of header

La prima di queste due dichiarazioni serve a definire il nome del file Info finale, che in caso di necessità potrebbe anche essere scomposto in più file, dove quello indicato rappresenta così solo il file di partenza; la seconda dichiara il titolo del documento in breve. Texinfo richiede che le dichiarazioni dell'intestazione siano racchiuse tra due commenti ben definiti, come si vede dall'esempio. È importante che siano riprodotti nello stesso modo che è stato mostrato:

@c %**start of header
...
@c %**end of header

La parte successiva all'intestazione, viene usata per utilizzare dei comandi specifici per la composizione TeX, come nel caso di @setchapternewpage che permette di definire se i capitoli debbano iniziare in una pagina nuova e se questa debba essere una pagina dispari, oppure se ciò sia indifferente:

Comando Descrizione
@setchapternewpage on
fa in modo che ogni capitolo inizi a pagina nuova;
@setchapternewpage off
fa in modo che i capitoli possano iniziare nella stessa pagina in cui finiscono quelli precedenti;
@setchapternewpage odd
fa in modo che ogni capitolo inizi in una nuova pagina dispari.

Dopo questo genere di definizioni, si passa normalmente alla presentazione formale del documento, annotando le informazioni legali e, nel caso particolare della composizione in TeX, specificando anche l'aspetto della prima pagina, quella del titolo. Nel caso di un documento Info non ha molta importanza la preparazione di una facciata introduttiva; in effetti, questa non esiste (come è possibile vedere in seguito a proposito del nodo iniziale). In questo senso, non c'è nemmeno il posto per le informazioni sul copyright, che vengono comunque inserite, delimitandole tra i comandi @ifinfo e @end ifinfo, allo scopo che queste siano effettivamente annotate all'inizio nel file Info, anche se in una zona che poi non viene consultata attraverso la navigazione ipertestuale.

@ifinfo
Questo è un esempio molto breve di un documento scritto
utilizzando il sistema Texinfo.

Copyright @copyright{} 1999 Tizio Tizi
@end ifinfo

Alla fine di questa parte introduttiva del sorgente Texinfo, appare generalmente un blocco delimitato dai comandi @titlepage e @end titlepage, che riguardano esclusivamente la composizione con TeX, con lo scopo di definire le pagine iniziali dal titolo alle informazioni sul copyright.

@titlepage
@sp 10
@comment Per il titolo viene utilizzato un corpo molto grande.
@center @titlefont{Titolo di esempio}

@c I due comandi seguenti iniziano la pagina del copyright.
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1999 Tizio Tizi
@end titlepage

I comandi che si vedono nell'esempio dovrebbero essere abbastanza intuitivi, dal momento che si tratta praticamente di TeX:

Comando Descrizione
@sp n
richiede uno spazio verticale di n righe;
@center @titlefont{ titolo }
centra il titolo che viene stampato utilizzando un carattere adatto, pensato appositamente per questo (@titlefont);
@page
esegue un salto pagina;
@vskip 0pt plus 1filll
porta il testo successivo alla base della pagina (si tratta di un comando TeX, dove la parola 1filll è scritta correttamente con tre «l»).

Il manuale di Texinfo propone anche un'altra forma, in cui si utilizzano i comandi @title, @subtitle e @author. Il loro significato è intuitivo e l'esempio seguente dovrebbe chiarirne l'uso: si osservi in particolare la presenza di due sottotitoli e di due autori.

@titlepage
@title Titolo di esempio
@subtitle Primo sottotitolo
@subtitle Secondo sottotitolo
@author Tizio Tizi
@author Caio Cai
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1999 Tizio Tizi, Caio Cai
@end titlepage

Nell'esempio introduttivo che è stato mostrato, non appare circoscritto alcun pezzo riservato alla composizione in HTML. In effetti, texi2html ignora l'inizio del sorgente Texinfo, a parte l'intestazione, dalla quale ottiene il titolo del documento e il nome del file HTML principale che deve generare.

Al termine di un documento Texinfo, deve essere usato il comando @bye per concludere esplicitamente la composizione.

Capitoli e sezioni

Prima di affrontare il problema che riguarda la scomposizione del documento in nodi, vale la pena di vedere come avviene la scomposizione in capitoli e sezioni, dal momento che è qualcosa di più semplice, trattandosi di un concetto comune a molti altri sistemi di composizione. Semplificando le cose, si può affermare che un documento Texinfo è suddiviso in capitoli, che possono essere suddivisi a loro volta in sezioni, sottosezioni e sotto-sottosezioni. Tuttavia, esistono diversi tipi di «capitoli» e di «sezioni»; la tabella u115.15 riepiloga questi comandi.

Tabella u115.15. Comandi per la suddivisione del testo in base al risultato stampato.

Comando Descrizione
@chapter
Capitolo normale con numerazione.
@section
Sezione normale con numerazione.
@subsection
Sottosezione normale con numerazione.
@subsubsection
Sotto-sottosezione normale con numerazione.
@unnumbered
Capitolo senza numerazione.
@unnumberedsec
Sezione senza numerazione.
@unnumberedsubsec
Sottosezione senza numerazione.
@unnumberedsubsubsec
Sotto-sottosezione senza numerazione.
@appendix
Capitolo numerato in modo letterale -- appendice.
@appendixsec
Sezione di un'appendice.
@appendixsubsec
Sottosezione di un'appendice.
@appendixsubsubsec
Sotto-sottosezione di un'appendice.
@majorheading
Titolo importante senza numerazione e senza salto pagina.
@chapterheading
Capitolo senza numerazione e senza salto pagina.
@heading
Sezione senza numerazione.
@subheading
Sottosezione senza numerazione.
@subsubheading
Sotto-sottosezione senza numerazione.

In particolare, la suddivisione che fa capo al capitolo di tipo @unnumbered, riguarda generalmente gli indici, o le introduzioni, mentre la suddivisione @...heading, permette di realizzare dei documenti in forma di relazione.

L'esempio introduttivo mostra in che modo si definisce l'inizio di un capitolo, utilizzando il comando @chapter seguito dal titolo, senza bisogno che questo sia delimitato in qualche modo. La stessa cosa varrebbe per le sezioni e per le altre classificazioni inferiori.

@chapter Suddivisione del documento con Texinfo

Nodi

I nodi di Texinfo sono le unità di informazioni raggiungibili attraverso una navigazione ipertestuale. A differenza della struttura di capitoli e sezioni, i nodi sono unità non divisibili, quindi non esistono dei sotto-nodi. Questo fatto crea una sovrapposizione imperfetta tra la struttura a nodi e la struttura di capitoli e sezioni.

Il nodo viene dichiarato attraverso il comando @node e la sua estensione va da quel punto fino alla dichiarazione del nodo successivo. Convenzionalmente, si dichiarano i nodi subito prima di un capitolo, o di una sezione (o anche di una sottosezione, ecc.); in questo modo, la struttura a nodi ha una qualche corrispondenza con la struttura cartacea del documento. A questo proposito, è importante stabilire l'estensione dei nodi: per cominciare potrebbe essere conveniente avere nodi contenenti un capitolo intero; in questo caso si dichiarerebbero solo in corrispondenza di questi. Nel capitolo u116 viene trattato meglio il problema dell'abbinamento dei nodi con la struttura del documento, in particolare per gli automatismi che vengono offerti da Texinfo.

La struttura ipertestuale prevede un nodo di partenza obbligatorio, denominato Top, all'interno del quale si trova normalmente un elenco di riferimenti, paragonabile a un indice generale, e una serie di altri nodi definiti dall'autore, con nomi liberi.

@node    Top, Suddivisione del documento, , (dir)

L'ipertesto Info, prevede l'aggregazione dei vari documenti scritti per questo sistema, attraverso un nodo precedente a quello Top: si tratta del nodo (dir), corrispondente al file contenente l'indice iniziale di tutti i documenti Info installati effettivamente nel proprio sistema.

La dichiarazione di un nodo implica l'indicazione del suo nome, seguito da tre riferimenti ad altrettanti nodi: il nodo successivo, secondo un ordine ideale stabilito dall'autore; il nodo precedente; il nodo superiore.

@node nome_del_nodo, nodo_successivo, nodo_precedente, nodo_superiore

In pratica, questa struttura prevede una sequenza di nodi, stabilita in qualche modo, assieme al riferimento di un nodo di livello superiore. Il primo nodo in assoluto è (dir), mentre il primo nodo del documento è Top. Volendo utilizzare una struttura di nodi corrispondenti ai capitoli, senza suddivisioni ulteriori, si avrebbe una sola sequenza di nodi dal primo all'ultimo capitolo, dove per tutti l'unico nodo superiore sarebbe Top. Se invece si volesse realizzare una suddivisione maggiore, è ragionevole che i nodi contenuti in un capitolo formino una sequenza, dove il nodo superiore potrebbe essere quello iniziale del capitolo stesso.

Osservando la dichiarazione del nodo Top dell'esempio, si può vedere che il nodo precedente non è stato indicato, mentre il nodo superiore è (dir). Infatti, non esiste un nodo precedente a Top, mentre al di sopra di quello c'è solo l'indice generale, corrispondente al nome convenzionale (dir).

Menù di riferimenti

La composizione in formato Info può generare automaticamente l'indice analitico, ma non l'indice generale. Per ottenere una sorta di indice generale, occorre indicare manualmente i riferimenti da qualche parte, di solito nel nodo Top. Nel caso dell'esempio introduttivo, sono stati indicati i riferimenti ai capitoli e all'indice analitico:

@menu
* Suddivisione del documento::      Il primo capitolo di questo esempio
                                    molto breve.
* Paragrafi::                       Il secondo capitolo.
* Indice analitico::                L'indice analitico.
@end menu

Come si vede, tra i comandi @menu e @end menu, sono stati indicati i nomi dei nodi da raggiungere, seguiti da una descrizione. Le voci di questi menù possono essere più articolate, ma in generale, se possibile, conviene mantenere questa forma elementare:

* nome_nodo_da_raggiungere:: descrizione

Chi scrive un documento in Texinfo può anche fare a meno di preoccuparsi di questi menù, ma dovrebbe inserire almeno le voci che fanno riferimento ai nodi dell'indice analitico. Chi utilizza Emacs può anche ottenere la preparazione di questo menù automaticamente; per apprenderne il modo può consultare la documentazione originale su Texinfo.

Indici

Gli indici e i riferimenti di qualunque tipo siano, si ottengono attraverso l'indicazione di un'etichetta (da una parte) e di un riferimento che punta all'etichetta. Gli indici in particolare, sono una raccolta di riferimenti realizzata in modo automatico.

Tabella u115.19. Comandi per la gestione di indici generali o analitici.

Comando Descrizione
@contents
Inserisce l'indice generale completo.
@shortcontents
Inserisce un indice generale ridotto.
@summarycontents
Inserisce un indice generale ridotto.
@cindex voce
Inserisce una voce nell'indice analitico normale.
@kindex voce
Inserisce una voce nell'indice dei comandi da tastiera.
@pindex voce
Inserisce una voce nell'indice dei programmi.
@findex voce
Inserisce una voce nell'indice delle funzioni.
@vindex voce
Inserisce una voce nell'indice delle variabili.
@tindex voce
Inserisce una voce nell'indice dei tipi di dati.
@defindex xy
Crea l'indice xy.
@xyindex voce
Inserisce una voce nell'indice xy.
@synindex da a
Trasferisce le voci di un indice in un altro.
@syncodeindex da a
Come @synindex usando un carattere dattilografico.
@printindex xy
Inserisce l'indice corrispondente alla sigla xy.

Indice generale

L'indice generale viene realizzato solo nella composizione che si avvale di TeX, oltre che in quella per il formato HTML. Ciò avviene in modo automatico, indicando semplicemente il punto in cui questo deve apparire: l'inizio dei capitoli e delle classificazioni inferiori viene annotato nell'indice generale. Come accennato in precedenza, questo meccanismo non riguarda la composizione nel formato Info, per cui si utilizza un menù di riferimenti che fa le funzioni di indice generale.

L'indice generale può essere collocato all'inizio o alla fine del documento, in tal caso dopo gli indici analitici eventuali. Con il comando @contents si richiede la sua realizzazione in corrispondenza del comando stesso. È importante osservare che questo comando crea anche il titolo necessario, al contrario di ciò che avviene con l'indice analitico, come viene descritto tra poco.

Vale la pena di annotare il fatto che sono disponibili altri due comandi per ottenere la realizzazione di indici analitici meno dettagliati. Si tratta di @shortcontents e @summarycontents. La differenza tra i due sta solo nel titolo utilizzato per introdurli.

Indici analitici

Per quanto riguarda l'indice analitico, per ottenerlo è necessario indicare nel testo delle etichette apposite, con le quali si ottiene l'inserimento delle voci relative. Questo viene fatto più o meno come avviene in altri sistemi di composizione, ma con Texinfo occorre tenere conto di alcune particolarità che derivano dalla sua specializzazione ipertestuale. Prima di tutto, si deve considerare che secondo la politica di Texinfo, le etichette riferite a voci da inserire nell'indice analitico devono essere uniche. In questo modo si semplifica una serie di problemi nella navigazione di un documento Info, che non può essere ambigua. A questo proposito, la documentazione originale di Texinfo suggerisce di utilizzare voci descrittive piuttosto dettagliate. Nel momento in cui si devono usare voci descrittive, si può porre anche il problema del modo in cui il lettore va a cercarle nell'indice, per cui, se ci sono più modi per indicare lo stesso concetto, è meglio inserire più etichette alternative per l'indice analitico. Texinfo è in grado di gestire diversi indici analitici specifici:

I primi due tipi di indici dovrebbero avere un significato evidente; per gli altri, si fa riferimento a ciò che riguarda i linguaggi di programmazione.

Si intuisce che non è tecnicamente necessario utilizzare tutti questi indici. In generale, ci si potrebbe limitare all'inserimento delle voci nell'indice analitico normale. Tuttavia, se si vuole realizzare un documento in Texinfo, seguendo le convenzioni, è bene fare uso dell'indice giusto per ogni cosa. Questo permette in seguito l'aggregazione con altri documenti che hanno seguito le stesse convenzioni.

La sintassi per la dichiarazione di una voce nei vari indici analitici di Texinfo, può essere fatta secondo uno degli schemi seguenti, che rappresentano nell'ordine i tipi di indice descritti sopra:

@cindex voce_da_inserire_nell'indice_analitico_normale
@kindex voce_da_inserire_nell'indice_analitico_dei_comandi_da_tastiera
@pindex voce_da_inserire_nell'indice_analitico_dei_programmi
@findex voce_da_inserire_nell'indice_analitico_delle_funzioni
@vindex voce_da_inserire_nell'indice_analitico_delle_variabili
@tindex voce_da_inserire_nell'indice_analitico_dei_tipi_di_dati

A ogni tipo di indice è abbinata una sigla, il cui utilizzo viene descritto tra poco. La tabella u115.20 elenca queste sigle.

Tabella u115.20. Sigle dei vari tipi di indice analitico di Texinfo.

Sigla Indice
cp
Indice analitico normale.
ky
Indice analitico dei comandi da tastiera.
pg
Indice analitico dei programmi.
fn
Indice analitico delle funzioni.
vr
Indice analitico delle variabili.
tp
Indice analitico dei tipi di dati.

Nell'esempio introduttivo è stato mostrato l'uso del comando @cindex per inserire alcune voci nell'indice analitico normale:

@chapter Suddivisione del documento con Texinfo
@cindex suddivisione
@cindex capitolo
@cindex sezione
@cindex sottosezione

La voce che si inserisce nell'indice analitico, può essere anche composta da più parole, separate normalmente da uno spazio, senza bisogno di utilizzare dei delimitatori di alcun tipo: l'interpretazione corretta del comando è garantita dal fatto che questo deve stare da solo in una riga.

L'inserimento nel documento finale di un indice analitico, viene richiesto in modo esplicito, attraverso il comando @printindex, seguito dalla sigla corrispondente all'indice desiderato. In generale, questo viene fatto all'interno di un capitolo non numerato, come è stato mostrato nell'esempio introduttivo, dove si vede la richiesta di creazione di un indice generale normale.

@unnumbered Indice analitico

@printindex cp

Definizione di indici aggiuntivi

Dovrebbe essere ormai chiaro che ogni indice va usato per il suo scopo, altrimenti diventa impossibile la fusione di più documenti in un libro unico. Tuttavia, di fronte a questa filosofia di Texinfo che distingue tra gli indici, ci si può trovare di fronte all'esigenza di crearne degli altri. Questo si può fare semplicemente, attribuendo a questi indici particolari una sigla di due sole lettere.

Per fare un esempio, si potrebbe desiderare l'introduzione di un indice specifico per raccogliere gli elementi SGML di un DTD. Volendo chiamare questo indice con la sigla ml, si dichiara l'utilizzo di un tale indice nell'intestazione del sorgente Texinfo con il comando defindex:

\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename esempio.info
@settitle Introduzione a Texinfo
@defindex ml
@c %**end of header

La sintassi di questo comando non prevede altro, per cui non viene mostrata formalmente. Per inserire una voce in un indice definito in questo modo, si usa il comando xyindex, dove xy sono le due lettere che lo definiscono.

@chapter Gli elementi interni al testo
@mlindex em
@mlindex strong

L'esempio mostra l'inserimento delle voci em e strong.

Per ottenere l'inserimento dell'indice si procede come avviene già per gli indici già previsti:

@printindex ml

Fusione di indici

La suddivisione dettagliata delle voci da inserire nell'indice analitico è una cosa ragionevole solo in quanto resta possibile la fusione di più gruppi assieme, in un indice unico. Ciò si ottiene con i comandi @synindex e @syncodeindex che hanno la stessa sintassi:

@synindex sigla_indice_di_origine sigla_indice_di_destinazione
@syncodeindex sigla_indice_di_origine sigla_indice_di_destinazione

Questi comandi si possono inserire solo all'inizio del documento, preferibilmente nell'intestazione, come si vede nell'esempio seguente:

@c %**start of header
@setfilename sgmltexi.info
@settitle Sgmltexi
...
@syncodeindex ml cp
@syncodeindex vr cp
@c %**end of header

In questo caso, si fa in modo di riversare le voci dell'indice ml e vr nell'indice standard (cp).

I due comandi si distinguono perché nel primo caso le voci vengono trasferite in modo normale, mentre nel secondo queste vengono trasformate per renderle nella destinazione in modo dattilografico (praticamente avvolte nel comando @code{}).

Aspetto del testo e ambienti speciali

Texinfo prevede una serie di comandi per delimitare parti di testo riferite a oggetti particolari; nello stesso modo, ci sono altri comandi per definire delle forme di enfatizzazione, senza stabilire le caratteristiche di ciò che si indica. Le tabelle u115.27 e u115.28 elencano questi comandi, quando sono riferiti a parole e frasi inserite nel corpo normale.

Tabella u115.27. Comandi per delimitare oggetti particolari nel testo.

Comando Descrizione
@code{testo}
Esempio letterale di un pezzo di programma.
@kbd{testo}
Digitazione dalla tastiera.
@key{testo}
Nome convenzionale di un tasto.
@samp{testo}
Esempio letterale di una sequenza di caratteri.
@var{testo}
Variabile metasintattica.
@url{testo}
Indirizzo URI.
@file{testo}
Nome di un file.
@email{testo}
Indirizzo di posta elettronica.
@dfn{testo}
Una definizione introdotta per la prima volta.
@cite{testo}
Riferimento bibliografico (titolo di un libro).

Tabella u115.28. Comandi per l'enfatizzazione generica.

Comando Descrizione
@emph{testo}
Enfatizzazione normale.
@strong{testo}
Enfatizzazione più evidente.
@sc{testo}
Maiuscoletto.
@r{testo}
Carattere tondo normale.

La tabella u115.30 mostra l'elenco dei comandi riferiti ad ambienti particolari, usati per mostrare esempi, per le citazioni, oltre che per altre forme di evidenziamento del testo. I comandi in questione si usano da soli su una riga; hanno un'apertura e una chiusura, secondo la forma @comando e @end comando. Per esempio, nel caso della citazione da mettere in evidenza, si può fare come nell'esempio seguente:

@quotation
Questa è una citazione.
@end quotation

Tabella u115.30. Comandi per delimitare blocchi di testo con funzioni specifiche.

Comando Descrizione
@quotation
Testo citato.
@example
Codice, comandi e simili.
@smallexample
Come @example, ma più piccolo.
@lisp
Codice LISP.
@smalllisp
Come @lisp, ma più piccolo.
@display
Testo illustrativo senza uno scopo specifico.
@smalldisplay
Come @display, ma più piccolo.
@format
Testo illustrativo, rispettando le interruzioni di riga.
@smallformat
Come @format, ma più piccolo.
@cartouche
Disegna un riquadro arrotondato attorno al testo.

Anche se ciò non riguarda precisamente l'argomento di questa sezione, vale la pena di mostrare brevemente come si dichiara una nota a piè pagina:

@footnote{testo}

Elenchi e tabelle

Gli elenchi vengono realizzati in Texinfo, più o meno come avviene con altri linguaggi di composizione. Dal momento che si deve poter arrivare al formato Info, le tabelle che vengono gestite sono molto simili a degli elenchi, pertanto è corretto trattare i due argomenti assieme.

Elenco puntato e numerato

L'elenco puntato viene delimitato dai comandi @itemize e @end itemize. Gli elementi dell'elenco vengono introdotti dal comando @item. Il simbolo usato per segnalare l'inizio dei vari elementi dell'elenco, viene dichiarato esplicitamente attraverso un argomento del comando @itemize, @bullet o @minus, che si riferiscono rispettivamente a un pallino (o un asterisco) e a un trattino. L'esempio seguente mostra un elenco con due voci principali, dove la prima si scompone in altre due voci inferiori; le voci principali sono introdotte da un pallino, mentre quelle inferiori sono evidenziate da un trattino.

@itemize @bullet
@item
primo elemento principale;

@itemize @minus
@item
primo sottoelemento;

@item
secondo sottoelemento;
@end itemize

@item
secondo elemento principale.
@end itemize

Gli spazi tra le voci sono opportuni, per ottenere un buon risultato nella composizione in formato Info, mentre per la composizione attraverso TeX, la cosa è indifferente.

L'elenco numerato è simile a quello puntato e si distingue solo perché è racchiuso tra i comandi @enumerate e @end enumerate. In particolare, in questo caso, al posto di definire il tipo di pallino da utilizzare, è possibile specificare il primo valore da utilizzare nell'elenco: se si tratta di un numero, quello diviene il primo valore di un elenco numerato vero e proprio; se si tratta di una lettera, si ottiene di un elenco numerato in modo letterale, a partire da quella lettera. L'esempio seguente mostra un elenco numerato che parte dal numero zero (quando di solito partirebbe da uno).

@enumerate 0
@item
primo elemento;

@item
secondo elemento;

@item
terzo elemento.
@end enumerate

Elenco descrittivo

L'elenco descrittivo è quello che per ogni punto mostra una parola o una frase a cui associa una descrizione. Per Texinfo, gli elenchi descrittivi sono delle tabelle a due colonne. L'ambiente viene delimitato dai comandi @table e @end table, dove in particolare, il primo riceve un argomento che specifica il tipo di composizione da utilizzare per la prima colonna di questa specie di tabella. Per esempio,

@table @file
@item /etc/passwd
il file degli utenti;

@item /etc/group
il file dei gruppi.
@end @table

fa in modo che «/etc/passwd» e «/etc/group» vengano delimitati automaticamente con il comando @file, mentre il resto, cioè la loro descrizione, viene lasciata con il carattere normale del testo.

Si può osservare che in questo caso il comando @item ha un argomento, che rappresenta la voce descrittiva dell'elenco. In situazioni particolari, può essere necessario indicare due voci assieme per la stessa descrizione; per questo esiste il comando @itemx che può essere usato subito dopo un comando @item normale.

@table @file
@item /etc/passwd
@itemx /etc/group
i file degli utenti e dei gruppi;

@item /etc/printcap
il file di configurazione del sistema di stampa.
@end @table

Esistono due varianti al comando @table: si tratta di @ftable e @vtable. Il loro funzionamento è identico a @table, con l'unica aggiunta che le voci indicate come argomento dei comandi @item o itemx vengono inserite automaticamente nell'indice delle funzioni e delle variabili, rispettivamente.

@vtable @code
@item PATH
contiene l'elenco dei percorsi per i file eseguibili;

@item HOME
contiene l'indicazione della directory personale abbinata
all'utente attuale.
@end @vtable

Tabelle vere e proprie

Le tabelle vere e proprie di Texinfo sono delimitate attraverso i comandi @multitable e @end multitable. Il comando di apertura richiede l'indicazione di altre informazioni che permettono di determinare l'ampiezza delle varie colonne. A questo proposito può essere usato il comando @columnfractions, oppure degli esempi di testo:

@multitable @columnfractions frazione...
...
@end multitable
@multitable {testo_di_esempio}...
...
@end multitable

Il testo di esempio va racchiuso tra parentesi graffe, che quindi fanno parte del comando. Le frazioni sono valori decimali, la cui somma complessiva dovrebbe dare l'unità o un valore inferiore.

@multitable @columnfractions .2 .3 .5
<synellipsis>
@end multitable

L'esempio mostra il caso si una tabella che prevede tre colonne, dove la prima occupa un'ampiezza pari al 20 % del totale, la seconda il 30 % e l'ultima il restante 50 %. Se non si desiderano indicare questi valori percentuali si può usare l'altro metodo, come nell'esempio seguente:

@multitable {bla bla} {bla bla bla} {bla bla bla bla bla}
...
@end multitable

Le righe di queste tabelle sono introdotte dal comando @item, a cui segue il testo della prima colonna. Il testo delle colonne successive viene introdotto da uno o più comandi @tab. L'esempio seguente mostra una tabella con tre colonne:

@multitable @columnfractions .25 .25 .5
@item colore
@tab valore
@tab annotazioni
@item nero
@tab 0
@tab il colore iniziale
@item marrone
@tab 1
@tab
@item rosso
@tab 2
@tab
...
@item bianco
@tab 9
@tab il colore finale
@end multitable

Modifica dello stile TeX

Lo stile standard predisposto per la composizione attraverso TeX potrebbe richiedere delle modifiche per qualche ragione. In generale, non è il caso di modificare il file che rappresenta lo stile standard, dal momento che è sufficiente farsene una copia da tenere assieme al sorgente Texinfo: quando si procede alla composizione, il file di stile texinfo.tex che si trova nella directory corrente, ha la precedenza.

Nell'estratto seguente vengono mostrate le righe utili che possono essere modificate per ottenere una traduzione dei termini che vengono inseriti automaticamente:

% Definizioni in italiano.
\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendice}\fi
\ifx\putwordChapter\undefined  \gdef\putwordChapter{Capitolo}\fi
\ifx\putwordfile\undefined     \gdef\putwordfile{file}\fi
\ifx\putwordInfo\undefined     \gdef\putwordInfo{Info}\fi
\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
\ifx\putwordon\undefined       \gdef\putwordon{on}\fi
\ifx\putwordpage\undefined     \gdef\putwordpage{pagina}\fi
\ifx\putwordsection\undefined  \gdef\putwordsection{sezione}\fi
\ifx\putwordSection\undefined  \gdef\putwordSection{Sezione}\fi
\ifx\putwordsee\undefined      \gdef\putwordsee{vedere}\fi
\ifx\putwordSee\undefined      \gdef\putwordSee{Vedere}\fi
\ifx\putwordShortContents\undefined  \gdef\putwordShortContents{Indice breve}\fi
\ifx\putwordTableofContents\undefined\gdef\putwordTableofContents{Indice generale}\fi

Localizzazione

Il lavoro di nazionalizzazione del sistema Texinfo è ancora in corso. Recentemente è stato introdotto il comando @documentlanguage con il quale si ottiene la conversione automatica dei termini che vengono inseriti automaticamente in fase di composizione. Il comando riceve un argomento corrispondente alla sigla della lingua a cui si vuole fare riferimento, espressa secondo lo standard ISO 639 (sezione 13.3). Il comando si colloca preferibilmente nell'intestazione del sorgente. L'esempio seguente mostra la selezione della lingua italiana.

@c %**start of header
@setfilename prova.info
@settitle Prova
...
@documentlanguage it
@c %**end of header

Riferimenti

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net