Sgmltexi: contenuti

Dopo la struttura generale, il sorgente Sgmltexi si articola generalmente in elementi che possono essere classificati sommariamente in blocchi e in testo interno a un blocco. Nei DTD comuni si utilizzano frequentemente le entità parametriche %block; e %inline;, per definire questi due grandi raggruppamenti. Nel DTD di Sgmltexi si usa la stessa convenzione e in questo senso vanno interpretate tali sigle nelle tabelle riassuntive.

A titolo di esempio, un blocco è qualcosa di simile a un paragrafo, un elenco, una tabella; un elemento interno alla riga è fatto per contenere del testo, eventualmente assieme a delle enfatizzazioni di qualche genere. Di solito, anche se questo fatto non può valere in generale, un elemento interno alla riga è fatto per contenere testo o altri elementi dello stesso genere; al contrario, un elemento che costituisce un blocco, può contenere altri blocchi, oppure del testo interno alla riga.

Il DTD di Sgmltexi non prevede elementi che possano contenere testo interno alla riga o blocchi a scelta, come accade invece nell'HTML.

Paragrafi

I blocchi di testo più comuni sono dei paragrafi, delimitati dall'elemento p, il quale può apparire con un rientro iniziale o meno, a seconda dell'uso dell'attributo indent. I paragrafi, compresi quelli centrati che si ottengono con l'elemento center, contengono testo o altri elementi interni alla riga.

Tabella u119.1. Paragrafi con Sgmltexi.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
p %inline; Blocco di testo elementare, riconducibile al paragrafo.
   indent Attributo Rientro prima riga: on, off.
center %inline; Blocco di testo centrato: @center.

Indici e riferimenti incrociati

Sgmltexi mette a disposizione diversi elementi il cui scopo è quello di permettere delle inserzioni per generare degli indici o dei riferimenti incrociati, riproducendo i comandi equivalenti di Texinfo.

Le voci degli indici analitici vengono inserite attraverso un gruppo di elementi vuoti: cindex, findex, vindex, kindex, pindex, tindex e userindex. Tutti questi elementi hanno lo stesso attributo entry, che serve a specificare la voce da inserire nell'indice relativo. In particolare, l'elemento userindex ha in più l'attributo name per specificare l'indice al quale si vuole fare riferimento.

Questi elementi possono essere usati solo dopo la dichiarazione di una sezione (un titolo di qualunque tipo, dal tomo in giù), ma prima del testo normale che ne seguirebbe. Per esempio così:

<h1>IP protocol history</h1>
<cindex entry="IP protocol">
<cindex entry="history">

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

La tabella u119.3 riassume brevemente l'uso di questi elementi.

Tabella u119.3. Voci degli indici analitici.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
cindex Vuoto Voce dell'indice analitico normale.
   entry Attributo Voce da inserire nell'indice.
findex Vuoto Voce dell'indice analitico delle funzioni.
   entry Attributo Voce da inserire nell'indice.
vindex Vuoto Voce dell'indice analitico delle variabili.
   entry Attributo Voce da inserire nell'indice.
kindex Vuoto Voce dell'indice analitico dei tasti premuti.
   entry Attributo Voce da inserire nell'indice.
pindex Vuoto Voce dell'indice analitico dei programmi.
   entry Attributo Voce da inserire nell'indice.
tindex Vuoto Voce dell'indice analitico dei tipi di dati.
   entry Attributo Voce da inserire nell'indice.
userindex Vuoto Voce di un indice analitico definito dall'utilizzatore.
   entry Attributo Voce da inserire nell'indice.
   name Attributo Sigla identificativa dell'indice definito dall'utente.
printindex Vuoto Inserisce l'elenco delle voci dell'indice specificato.
   name Attributo Sigla identificativa dell'indice.

Ogni indice analitico si distingue in base a una sigla di due lettere. Gli indici analitici già previsti da Texinfo hanno una sigla fissa, mentre tutte le altre combinazioni possono essere usate per gli indici stabiliti dall'utilizzatore. La tabella u119.4 riassume le sigle degli indici standard, la cui conoscenza è necessaria per poter usare correttamente l'elemento printindex allo scopo di riprodurre l'elenco dell'indice relativo.

Tabella u119.4. Sigle identificative degli indici analitici standard.

Sigla Descrizione
cp Indice analitico normale.
ky Indice analitico dell'uso della tastiera.
pg Indice analitico dei programmi.
fn Indice analitico delle funzioni.
vr Indice analitico delle variabili.
tp Indice analitico dei tipi di dati.

Gli elementi utilizzati per realizzare dei riferimenti incrociati sono vuoti e sono sempre interni alla riga di testo. Tutte le informazioni necessarie sono passate attraverso attributi. Dal momento che questi elementi rispecchiano fedelmente i comandi equivalenti di Texinfo, viene mostrata solo la tabella u119.5, senza entrare nel dettaglio del significato di ognuno di loro.

Tabella u119.5. Riferimenti incrociati.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
anchor Vuoto Comando @anchor di Texinfo.
   id Attributo Stringa di identificazione dell'ancora.
xref Vuoto Comando @xref di Texinfo.
   id Attributo Nodo o ancora a cui si fa riferimento.
   name Attributo Nome del riferimento.
   title Attributo Titolo o argomento a cui si fa riferimento.
   info Attributo Nome del file Info.
   ptitle Attributo Titolo dell'edizione stampata.
ref Vuoto Comando @ref di Texinfo.
   id Attributo Nodo o ancora a cui si fa riferimento.
   name Attributo Nome del riferimento.
   title Attributo Titolo o argomento a cui si fa riferimento.
   info Attributo Nome del file Info.
   ptitle Attributo Titolo dell'edizione stampata.
pxref Vuoto Comando @pxref di Texinfo.
   id Attributo Nodo o ancora a cui si fa riferimento.
   name Attributo Nome del riferimento.
   title Attributo Titolo o argomento a cui si fa riferimento.
   info Attributo Nome del file Info.
   ptitle Attributo Titolo dell'edizione stampata.
inforef Vuoto Comando @inforef di Texinfo.
   id Attributo Nodo o ancora a cui si fa riferimento.
   name Attributo Nome del riferimento.
   info Attributo Nome del file Info.
uref Vuoto Comando @uref di Texinfo.
   uri Attributo Indirizzo URI a cui si fa riferimento.
   name Attributo Nome del riferimento.
   replace Attributo Testo di rimpiazzo da mostrare.
email Vuoto Comando @email di Texinfo.
   email Attributo Indirizzo di posta elettronica.
   name Attributo Titolo o descrizione dell'indirizzo.

In particolare, è opportuno osservare che l'attributo id degli elementi hn, partheading e tomeheading, è un'ancora a cui possono puntare tutti i vari tipi di riferimenti incrociati disponibili (tranne uref e email che puntano a degli URI).

L'esempio seguente mostra come usare l'elemento pxref in modo molto semplice:

<p>Sgmltexi crea automaticamente il nodo Top. Come già spiegato in
precedenza, (<pxref id="top node menu">), il menù può essere...</p>

Delimitazione di parole e di frasi

Un certo numero di elementi serve a delimitare parole o frasi, per qualche motivo. Il DTD di Sgmltexi è molto permissivo, in modo tale che ogni elemento di questi può contenere qualunque altro elemento interno alla riga di testo. Ciò è stato fatto per assicurare la massima compatibilità con Texinfo, ma in futuro potrebbero essere poste delle piccole limitazioni.

La tabella u119.7 elenca questi elementi, assieme a kbdinputstyle, che si usa per specificare lo stile di rappresentazione del contenuto dell'elemento kbd.

Tabella u119.7. Delimitazione di parole e frasi.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
code %inline; Comando @code di Texinfo.
kbd %inline; Comando @kbd di Texinfo.
kbdinputstyle Vuoto Comando @kbdinputstyle di Texinfo.
   style Attributo Stile: code, example, distinct.
key %inline; Comando @key di Texinfo.
samp %inline; Comando @samp di Texinfo.
var %inline; Comando @var di Texinfo.
env %inline; Comando @env di Texinfo.
file %inline; Comando @file di Texinfo.
command %inline; Comando @command di Texinfo.
option %inline; Comando @option di Texinfo.
dfn %inline; Comando @dfn di Texinfo.
cite %inline; Comando @cite di Texinfo.
acronym %inline; Comando @acronym di Texinfo.
url %inline; Comando @url di Texinfo.
emph %inline; Comando @emph di Texinfo.
strong %inline; Comando @strong di Texinfo.
sc %inline; Comando @sc di Texinfo.
roman %inline; Comando @r di Texinfo.
italic %inline; Comando @i di Texinfo.
bold %inline; Comando @b di Texinfo.
typewriter %inline; Comando @t di Texinfo.

Viene mostrato un esempio molto semplice dell'uso dell'elemento strong:

<p><strong>Pinco Pallino</strong> è un uomo molto vecchio...</p>

<p><strong>Tizio Tizi</strong> ha studiato tecnologia delle
comunicazioni...</p>

Delimitazione di blocchi di testo

Alcuni elementi servono a delimitare blocchi di testo, o un tipo particolare di testo interno alle righe. Il DTD di Sgmltexi è molto permissivo per assicurare la massima compatibilità con Texinfo, ma in futuro potrebbero essere poste delle piccole limitazioni.

La tabella u119.9 elenca questi elementi, assieme a pre, che permette di inserire del testo preformattato, e a exdent, utilizzato all'interno di pre per ottenere delle righe che sporgono verso l'esterno.

Tabella u119.9. Delimitazione di blocchi di testo.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
exdent %inline; Comando @exdent di Texinfo.
pre %inline; Testo preformattato.
quotation %block; Comando @quotation di Texinfo.
display %block; o pre Comando @display di Texinfo.
smalldisplay %block; o pre Comando @smalldisplay di Texinfo.
example %block; o pre Comando @example di Texinfo.
smallexample %block; o pre Comando @smallexample di Texinfo.
flushleft %inline; Comando @flushleft di Texinfo.
flushright %inline; Comando @flushright di Texinfo.
lisp %block; o pre Comando @lisp di Texinfo.
smalllisp %block; o pre Comando @smalllisp di Texinfo.
cartouche %block; o pre Comando @cartouche di Texinfo.
format %block; o pre Comando @format di Texinfo.
smallformat %block; o pre Comando @smallformat di Texinfo.
texinfo Codice Texinfo incorporato.

In generale, l'uso di questi elementi è molto semplice, come si può vedere in questo caso:

<example>
<p>Bla bla bla...</p>
<p>Bla bla bla...</p>
</object>

L'esempio seguente, invece, mostra l'uso dell'elemento pre, allo scopo di incorporare del testo preformattato, pur continuando a espandere le macro SGML:

<example>
<pre>
#!/usr/bin/perl
while ($line = &gt;STDIN&gt;)
  {
    chomp $line;
    print ("$line\r\n");
  }
</pre>
</object>

In aggiunta, si può delimitare il contenuto dell'elemento pre per poterlo scrivere in modo letterale:

<example>
<pre>
<![CDATA[
#!/usr/bin/perl
while ($line = <STDIN>)
  {
    chomp $line;
    print ("$line\r\n");
  }
]]>
</pre>
</example>

Elenchi e tabelle

Elenchi e tabelle, sono blocchi di testo. La gestione di Texinfo per ciò che riguarda queste strutture, è abbastanza speciale. Qui viene riassunto tutto nella tabella u119.13, che però richiede la conoscenza dei comandi di Texinfo corrispondenti.

Tabella u119.13. Elenchi e tabelle.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
itemize item, itemx, %block; Comando @itemize di Texinfo.
   mark Attributo Segno usato al posto del pallino iniziale.
enumerate item, itemx, %block; Comando @enumerate di Texinfo.
   start Attributo Valore iniziale dell'elenco numerato.
table item, itemx, %block; Comando @table di Texinfo.
   emphasis Attributo Enfasi della colonna descrittiva: asis, code, samp, var, kbd, file.
vtable item, itemx, %block; Comando @vtable di Texinfo.
   emphasis Attributo Enfasi della colonna delle variabili: asis, code, samp, var, kbd, file.
ftable item, itemx, %block; Comando @ftable di Texinfo.
   emphasis Attributo Enfasi della colonna delle funzioni: asis, code, samp, var, kbd, file.
item %inline; o vuoto. Comando @item di Texinfo.
itemx %inline; o vuoto. Comando @itemx di Texinfo.
multitable Comando @multitable di Texinfo.
columnfraction .n. Colonna larga 0,n volte lo spazio totale.
columnexample Testo puro. Colonna larga tanto quanto l'esempio.
raw %inline;, tab. Riga di una tabella.
tab Vuoto Separatore tra una colonna e la successiva.

Vengono mostrati alcuni esempi, a cominciare da un elenco non numerato:

<itemize mark="#">
<item>
    <p>Primo elemento dell'elenco.</p>
<item>
    <p>Secondo elemento.</p>
</itemize>

In questo caso, si ottiene un elenco puntato di due sole voci, dove al posto del pallino usuale, appare il simbolo #. Sostituendo l'elemento itemize con enumerate, si ottiene un elenco numerato:

<enumerate start="3">
<item>
    <p>Primo elemento dell'elenco.</p>
<item>
    <p>Secondo elemento.</p>
</enumerate>

In questo caso, si fa in modo che il primo dei due elementi abbia il numero tre. L'elenco descrittivo si ottiene attraverso l'elemento table, dove gli elementi item contengono le voci relative. Si osservi l'esempio:

<table emphasis="code">
<item>ls</item>
<itemx>dir</itemx>
    <p>Elenco del contenuto della directory.</p>
<item>cd</item>
    <p>Cambia directory.</p>
</table>

Si intende così che l'elemento itemx serve quando un elemento dell'elenco è composto da più di una voce.

Le tabelle, intese come quelle a cui si è abituati di solito, sono gestite attraverso l'elemento multitable. Questo, prima dell'indicazione delle righe che compongono la tabella, richiede di specificare quante sono le colonne e quanto larghe devono essere. Per questo, all'inizio occorre utilizzare una serie di elementi columnfraction, oppure columnexample, attraverso i quali si specificano proprio queste larghezze (in percentuale o attraverso un testo di esempio). L'esempio seguente mostra il caso di una tabella le cui colonne sono state definite in modo percentuale:

<multitable>
<columnfraction>.30</columnfraction>
<columnfraction>.70</columnfraction>
<raw><strong>Parametro LOC</strong>
<tab><strong>Posizione corrispondente</strong>
</raw>
<raw>h
<tab>posizione attuale
</raw>
<raw>t
<tab>superiore
</raw>
<raw>b
<tab>inferiore
</raw>
<raw>p
<tab>pagina
</raw>
</multitable>

In alternativa, dato che la larghezza delle colonne dipende proprio dai titoli, si potrebbe fare così:

<multitable>
<columnexample>Parametro LOC</columnexample>
<columnexample>Posizione corrispondente</columnexample>
<raw><strong>Parametro LOC</strong>
<tab><strong>Posizione corrispondente</strong>
</raw>
<raw>h
<tab>posizione attuale
</raw>
<raw>t
<tab>superiore
</raw>
<raw>b
<tab>inferiore
</raw>
<raw>p
<tab>pagina
</raw>
</multitable>

In entrambi i casi, lo scopo è quello di ottenere uno specchietto simile a quello che segue. Si osservi che non ci sono didascalie e nemmeno esiste la possibilità di collocare dinamicamente la tabella.

Parametro LOC   Posizione corrispondente
h               posizione attuale
t               superiore
b               inferiore
p               pagina

Inserzioni

Alcuni elementi sono difficilmente classificabili in gruppi particolari. Qui, vengono distinti in due raggruppamenti: quelli interni alle righe e quelli che rappresentano dei blocchi. A questi corrispondono le tabelle u119.20 e u119.21.

Tabella u119.20. Inserzioni interne alle righe.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
dmn #PCDATA Comando @dmn di Texinfo.
math #PCDATA Comando @math di Texinfo.
footnote %inline; Comando @footnote di Texinfo.
image Vuoto Comando @image di Texinfo.
   name Attributo Nome del file da inserire, senza estensione.
   width Attributo Ampiezza dell'immagine.
   height Attributo Altezza dell'immagine.
whole %inline; Comando @w (previene l'interruzione di riga).
br Vuoto Comando @* (interruzione di riga).
dh Vuoto Comando @- (separazione facoltativa).
hyphenation Vuoto; Comando @hyphenation di Texinfo.
   words Attributo Elenco di parole separate in sillabe.

Tabella u119.21. Inserzione di blocchi.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
sp Vuoto Comando @sp di Texinfo.
   lines Attributo Quantità di righe da saltare (un numero intero).
page Vuoto Comando @page di Texinfo.
group %block; Comando @group di Texinfo.
need Vuoto Comando @need di Texinfo.
   mils Attributo Millesimi di pollice richiesti.

Definizioni

Texinfo prevede un grande numero di comandi per la descrizione di definizioni di vario genere. Queste «definizioni» vanno intese generalmente come dei modelli sintattici. È un po' difficile comprendere bene quando usare questa o quella forma di definizione; per cui occorre studiare la documentazione di Texinfo.

Tutte le forme di definizione si dichiarano attraverso un elemento provvisto di diversi attributi. Questo elemento contiene generalmente la descrizione del modello, in una serie di blocchi di testo, ma in particolare potrebbe contenere la descrizione degli argomenti, all'interno dell'elemento args, comune a tutte le definizioni che ne hanno.

Tabella u119.22. Definizioni.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
args %inline; Argomenti di una definizione.
deffn args, %block; Comando @deffn di Texinfo.
   cat Attributo Categoria della funzione.
   name Attributo Nome della funzione.
deffnx Vuoto Comando @deffnx. Attributi come deffn.
defun args, %block; Comando @defun di Texinfo.
   name Attributo Nome della funzione.
defunx Vuoto Comando @defunx. Attributi come defun.
defmac args, %block; Comando @defmac di Texinfo.
   name Attributo Nome della macro.
defmacx Vuoto Comando @defmacx. Attributi come defmac.
defspec args, %block; Comando @defspec di Texinfo.
   name Attributo Nome di uno special form.
defspecx Vuoto Comando @defspecx. Attributi come defspec.
defvr %block; Comando @defvr di Texinfo.
   cat Attributo Categoria della variabile.
   name Attributo Nome della variabile.
defvrx Vuoto Comando @defvrx. Attributi come defvr.
defvar %block; Comando @defvar di Texinfo.
   name Attributo Nome della variabile.
defvarx Vuoto Comando @defvarx. Attributi come defvar.
defopt %block; Comando @defopt di Texinfo.
   name Attributo Nome dell'opzione.
defoptx Vuoto Comando @defoptx. Attributi come defopt.
deftypefn args, %block; Comando @deftypefn di Texinfo.
   cat Attributo Categoria.
   type Attributo Tipo di dati.
   name Attributo Nome.
deftypefnx Vuoto Comando @deftypefnx. Attributi come deftypefn.
deftypefun args, %block; Comando @deftypefun di Texinfo.
   type Attributo Tipo di dati.
   name Attributo Nome.
deftypefunx Vuoto Comando @deftypefunx. Attributi come deftypefun.
deftypevr %block; Comando @deftypevr di Texinfo.
   cat Attributo Categoria.
   type Attributo Tipo di dati.
   name Attributo Nome.
deftypevrx Vuoto Comando @deftypevrx. Attributi come deftypevr.
deftypevar %block; Comando @deftypevar di Texinfo.
   type Attributo Tipo di dati.
   name Attributo Nome.
deftypevarx Vuoto Comando @deftypevarx. Attributi come deftypevar.
args %inline; Argomenti di una definizione.
defcv %block; Comando @defcv di Texinfo.
   cat Attributo Categoria.
   class Attributo Classe.
   name Attributo Nome.
defcvx Vuoto Comando @defcvx. Attributi come defcv.
defivar %block; Comando @defivar di Texinfo.
   class Attributo Classe.
   name Attributo Nome.
defivarx Vuoto Comando @defivarx. Attributi come defivar.
deftypeivar %block; Comando @deftypeivar di Texinfo.
   class Attributo Classe.
   type Attributo Tipo.
   name Attributo Nome.
deftypeivarx Vuoto Comando @deftypeivarx. Attributi come deftypeivar.
defop args, %block; Comando @defop di Texinfo.
   cat Attributo Categoria.
   class Attributo Classe.
   name Attributo Nome.
defopx Vuoto Comando @defopx. Attributi come defop.
defmethod args, %block; Comando @defmethod di Texinfo.
   class Attributo Classe.
   name Attributo Nome.
defmethodx Vuoto Comando @defmethodx. Attributi come defmethod.
deftypemethod args, %block; Comando @deftypemethod di Texinfo.
   class Attributo Classe.
   type Attributo Tipo.
   name Attributo Nome.
deftypemethodx Vuoto Comando @deftypemethodx. Attributi come deftypemethod.
deftp args, %block; Comando @deftp di Texinfo.
   cat Attributo Categoria.
   name Attributo Nome.
deftpx Vuoto Comando @deftpx. Attributi come deftp.

Ecco un esempio molto semplice:

<deffn cat="Command" name="sgmltexi">
    <args>[<var>options</var>]... <var>sgml_source</var></args>

    <p>This is the front-end for the SGML to Texinfo system.</p>

</deffn>

La composizione in formato Info genera il risultato seguente:

 - Command: sgmltexi [OPTIONS]... SGML_SOURCE
     This is the front-end for the SGML to Texinfo system.

Codice condizionato e codice letterale in base alla composizione

Texinfo ha la possibilità di selezionare del codice in dipendenza del tipo di composizione finale. In SGML si possono fare cose simili attraverso le sezioni marcate, ma non si tratta della stessa cosa. Per questa ragione, Sgmltexi include alcuni elementi speciali corrispondenti ai comandi che servono a Texinfo per selezionare il codice, consentendo anche di inserire pezzi di codice letterale.

Tabella u119.25. Codice condizionato e codice letterale in base alla composizione.

Elemento o
attributo
Contenuto Descrizione o corrispondenza con Texinfo
ifinfo %inline; @ifinfo ... @end ifinfo
ifinfoblock %block; @ifinfo ... @end ifinfo
iftex %inline; @iftex ... @end iftex
iftexblock %block; @iftex ... @end iftex
ifhtml %inline; @ifhtml ... @end ifhtml
ifhtmlblock %block; @ifhtml ... @end ifhtml
ifnotinfo %inline; @ifnotinfo ... @end ifnotinfo
ifnotinfoblock %block; @ifnotinfo ... @end ifnotinfo
ifnottex %inline; @ifnottex ... @end ifnottex
ifnottexblock %block; @ifnottex ... @end ifnottex
ifnothtml %inline; @ifnothtml ... @end ifnothtml
ifnothtmlblock %block; @ifnothtml ... @end ifnothtml
tex #PCDATA @tex ... @end tex
html #PCDATA @html ... @end html
texinfo #PCDATA Codice Texinfo.

È importante osservare che ifinfo, iftex, ifhtml, ifnotinfo, ifnottex e ifnothtml, sono elementi interni alla riga di testo, che contengono lo stesso genere di cosa. Al contrario, ifinfoblock, iftexblock, ifhtmlblock, ifnotinfoblock, ifnottexblock e ifnothtmlblock, sono blocchi che contengono altri blocchi. Questa distinzione è necessaria per evitare problemi nella definizione del documento SGML (nel DTD).

In particolare, gli elementi tex, html e texinfo, sono fatti per contenere testo letterale solitamente racchiuso tra <![CDATA[ e ]]>.

L'elemento texinfo non ha un comando equivalente in Texinfo, perché rappresenta del codice Texinfo. Si osservi l'esempio seguente:

<p>The letter <texinfo>@ubaraccent{o}</texinfo> is a special...</p>

Usando questo elemento, potrebbe essere necessario forzare l'interpretazione letterale anche da parte dell'SGML. In tal caso, il contenuto dell'elemento può essere racchiuso come si vede qui:

<p>The letter <texinfo><![CDATA[@ubaraccent{o}]]></texinfo> is a...

Il caso particolare dell'esempio non mostra una situazione in cui sia indispensabile l'interpretazione SGML letterale, tuttavia questo è il modo quando succede tale circostanza.

Viene mostrato un altro esempio nell'uso di codice letterale specifico per il tipo di composizione. L'intenzione è quella di mostrare un'espressione matematica molto semplice: 123 + 10-1.

<p><tex><![CDATA[$123+10^{-1}$]]></tex>
<html><![CDATA[123+10<sup>-1</sup>]]></html>
<ifinfo>123+10^-1</ifinfo>
= 12.3</p>

Si potrebbe notare una sorta di incoerenza nell'uso degli elementi letterali, assieme a ifinfo, il cui scopo è solo quello di essere preso in considerazione quando la composizione produce il formato Info. Il fatto è che gli altri due elementi letterali, oltre che contenere codice letterale per il tipo rispettivo di composizione, sono implicitamente elementi condizionali. Dal momento che la composizione Info non può prevedere una codifica letterale speciale, l'unico modo per integrare le varie parti è quello di usare ifinfo per rappresentare in qualche modo l'espressione, anche in questo caso.

Problemi

Texinfo, come TeX e *roff, distingue i blocchi di testo in quanto separati da una o più righe vuote. In tal modo, la distinzione tra blocchi di testo e testo interno alle righe, è solo una questione di spazio verticale. Per esempio, il pezzo seguente di un sorgente Texinfo, mostra tre ambienti del tipo @ifcomposizione, che sono parte dello stesso blocco di testo, ovvero lo stesso paragrafo.

La composizione attuale è
@iftex
TeX
@end iftex
@ifhtml
HTML
@end ifhtml
@ifinfo
Info
@end ifinfo
e si può vedere che...

In una situazione differente, questi ambienti possono diventare blocchi isolati di testo, come si vede qui:

La composizione attuale è:

@iftex
TeX
@end iftex

@ifhtml
HTML
@end ifhtml

@ifinfo
Info
@end ifinfo

Si può vedere che...

Con un sistema SGML, questa confusione di ruoli non è desiderabile, oltre che essere difficile da realizzare. Questo è il motivo per cui Sgmltexi distingue tra @ifcomposizione o @ifnotcomposizione, e @ifcomposizioneblock o @ifnotcomposizioneblock.

Sgmltexi cerca di mantenere le interruzioni di riga contenute all'interno del sorgente SGML, ma per questo ci sono delle conseguenze nell'uso degli ambienti condizionali, del tipo interno alle righe. Ciò dipende dal fatto che necessariamente occorre aggiungere delle interruzioni aggiuntive. Si supponga di voler scrivere qualcosa come ciò che segue:

<p>La composizione attuale
è <iftex>TeX</iftex><ifhtml>HTML</ifhtml><ifinfo>Info</ifinfo>, per cui
si sa cosa comporta questo fatto.</p>

Ci si aspetta che i marcatori di apertura e di chiusura vengano rimpiazzati aggiungendo anche le interruzioni di riga appropriate. Ma se fosse così, il risultato sarebbe quello seguente, in cui ciò che prima era testo interno alla riga diventa invece un blocco separato:

La composizione attuale
è 
@iftex
TeX
@end iftex

@ifhtml
HTML
@end ifhtml

@ifinfo
Info
@end ifinfo
, per cui
si sa cosa comporta questo fatto.</p>

Per risolvere il problema, questi elementi intesi come ambienti condizionali interni alle righe, non introducono alcuna interruzione iniziale o finale che sia; rimane compito dell'autore il preoccuparsi di questo problema. Per questo, il sorgente di Sgmltexi deve essere scritto come si vede nell'esempio seguente, considerando anche che non c'è alcun modo di mettere la virgola dopo il nome del tipo di composizione.

<p>La composizione attuale è
<iftex>TeX</iftex>
<ifhtml>HTML</ifhtml>
<ifinfo>Info</ifinfo>
per cui si sa cosa comporta questo fatto.</p>

Lo stesso problema appare con gli elementi tex e html, ma in tal caso non c'è bisogno di qualificarne il contenuto, che si intende sempre come testo interno alle righe.

<p>
<tex>
$$ \chi^2 = \sum_{i=1}^N
          \left (y_i - (a + b x_i)
          \over \sigma_i\right)^2 $$
</tex>
</p>

Utilizzando un sistema SGML, l'inserzione di codice letterale per il tipo di composizione particolare che si utilizza, è da considerarsi come l'ultima risorsa. In altri termini, se sono necessari tali espedienti, è evidente che l'SGML è la scelta sbagliata per scrivere la propria documentazione.

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