Tabelle

Alml consente di realizzare delle tabelle attraverso l'elemento tabular, che deve trovarsi necessariamente all'interno di un elemento object. Una tabella potrebbe essere realizzata disegnando una figura e incorporandone il codice attraverso uno dei tanti elementi *img, ma la tabella ottenuta attraverso l'elemento tabular, tra le altre cose, ha il vantaggio di poter essere divisa tra le pagine nella composizione destinata alla stampa.

Segue un esempio molto semplice di tabella realizzata con l'elemento tabular:

<object id="t-esempio-1">
<caption>
    Tabella <objectref>. Ecco il mio primo esempio.
</caption>
<tabular col="2">
<thead>
<trow> Dispositivo  <colsep> Descrizione              </trow>
</thead>
<tbody>
<trow> /dev/fd0     <colsep> Prima unità a dischetti. </trow>
<trow> /dev/hda     <colsep> Primo disco fisso ATA.   </trow>
<trow> /dev/hdb     <colsep> Secondo disco fisso ATA. </trow>
<trow> /dev/sda     <colsep> Primo disco SCSI.        </trow>
<trow> /dev/lp0     <colsep> Prima porta parallela.   </trow>
<trow> /dev/ttyS0   <colsep> Prima porta seriale.     </trow>
</tbody>
</tabular>
</object>

Nel riquadro successivo si vede il risultato nella composizione finale:

Tabella u99.3. Ecco il mio primo esempio.

Dispositivo Descrizione
/dev/fd0 Prima unità a dischetti.
/dev/hda Primo disco fisso ATA.
/dev/hdb Secondo disco fisso ATA.
/dev/sda Primo disco SCSI.
/dev/lp0 Prima porta parallela.
/dev/ttyS0 Prima porta seriale.

L'esempio mostrato è sufficientemente completo: l'elemento tabular ha un attributo obbligatorio, col, con il quale è necessario dichiarare subito la quantità di colonne che compone la tabella. Le righe della tabella sono raggruppate in due gruppi: l'intestazione, delimitata dall'elemento thead, e il corpo, delimitato dall'elemento tbody. Le righe sono definite dall'elemento trow e la separazione tra una colonna e l'altra avviene con l'elemento vuoto colsep.

Figura u99.4. Sintassi semplificata per l'uso dell'elemento tabular.

tabular col="n_colonne" [columnfractions="suddivisione"]
  |     [printedfontsize="dimensione"] [border="0|1"]
  |--[thead]
  |    `--trow...
  |         |--contenuto_cella
  |         `--[colsep [contenuto_cella]]...
  `--tbody
       `--trow...
            |--contenuto_cella
            `--[colsep [contenuto_cella]]...

Tabella u99.5. Elementi SGML che servono a rappresentare le tabelle standard di Alml

Elemento Descrizione
tabular col="n_colonne"
[columnfractions="suddivisione"]
[printedfontsize="dimensione"]
[border="0|1"]
Dichiarazione della tabella. L'attributo col indica la quantità di colonne; l'attributo columnfractions descrive la larghezza delle colonne in proporzione allo spazio orizzontale disponibile; l'attributo printedfontsize consente di dichiarare la dimensione del carattere standard del testo contenuto nelle celle; l'attributo border consente di avere una bordatura più o meno ricca.
thead
Contiene le righe di intestazione.
tbody
Contiene le righe del corpo.
trow
Contiene le celle di una riga.
colsep
È un elemento vuoto che separa le colonne delle righe.

L'uso dell'attributo columnfractions potrebbe essere poco intuitivo: una volta dichiarato con l'attributo col la quantità di colonne esistenti, all'attributo columnfractions si assegna una stringa contenente un elenco di valori inferiori a uno, che rappresentano la percentuale di larghezza che deve avere ogni colonna. Per esempio, col="2" columnfractions="0.75 0.25" indica che si tratta di due colonne, dove la prima occupa il 75 % dello spazio orizzontale e la seconda ne occupa il 25 %. In generale, se si usa l'attributo columnfractions conviene che la somma dei valori percentuali dia esattamente il 100 % (pari semplicemente a uno), ma volendo, si può ottenere anche un valore inferiore, per ottenere una tabella che occupa meno spazio orizzontale. Si osservi che se non si usa l'attributo columnfractions, il contenuto delle celle può essere esclusivamente di tipo lineare (niente blocchi) e la larghezza delle colonne si estende per tutto lo spazio necessario a contenere il testo senza andare a capo.

L'esempio seguente mostra il caso di una tabella in cui le celle possono contenere più di una riga:

<object id="t-tex-controllo-paragrafo-comune">
<caption>
    Tabella <objectref>. Esempio di tabella un po' più complessa.
</caption>
<tabular col="3" columnfractions="0.2 0.4 0.4" border="1">
<thead>
  <trow>Parola di controllo
<colsep>Competenza
<colsep>Condizione o valore predefinito
</trow>
</thead>
<tbody>
  <trow><syntax>\hoffset</syntax>
<colsep>Posizione iniziale dei paragrafi nella pagina.
<colsep><num>0</num>
</trow>
  <trow><syntax>\hsize</syntax>
<colsep>Larghezza del paragrafo a partire da <samp>\hoffset</samp>.
<colsep><num>6,5</num> pollici
</trow>
  <trow><syntax>\parindent</syntax>
<colsep>Rientro della prima riga.
<colsep><num>20</num> punti
</trow>
  <trow><syntax>\baselineskip</syntax>
<colsep>Distanza tra la base di una riga e la base della riga successiva.
<colsep><num>12</num> punti
</trow>
  <trow><syntax>\parskip</syntax>
<colsep>Distanza aggiuntiva tra i paragrafi.
<colsep><num>0</num>
</trow>
  <trow><syntax>\raggedright</syntax>
<colsep>Allinea il testo a sinistra.
<colsep>allineato simultaneamente a sinistra e a destra
</trow>
  <trow><syntax>\leftskip</syntax>
<colsep>Rientro sinistro complessivo.
<colsep><num>0</num>
</trow>
  <trow><syntax>\rightskip</syntax>
<colsep>Rientro destro complessivo.
<colsep><num>0</num>
</trow>
</tbody>
</tabular>
</object>

Il riquadro successivo mostra il risultato nella composizione finale:

Tabella u99.8. Esempio di tabella un po' più complessa.

Parola di controllo Competenza Condizione o valore predefinito
\hoffset
Posizione iniziale dei paragrafi nella pagina. 0
\hsize
Larghezza del paragrafo a partire da \hoffset. 6,5 pollici
\parindent
Rientro della prima riga. 20 punti
\baselineskip
Distanza tra la base di una riga e la base della riga successiva. 12 punti
\parskip
Distanza aggiuntiva tra i paragrafi. 0
\raggedright
Allinea il testo a sinistra. allineato simultaneamente a sinistra e a destra
\leftskip
Rientro sinistro complessivo. 0
\rightskip
Rientro destro complessivo. 0

Come accennato, purché si utilizzi l'attributo columnfractions, è possibile inserire nelle celle alcuni elementi che rappresentano blocchi di testo; per esempio: syntax, command, pre e verbatimpre, come in parte si vede nell'esempio già apparso. Ciò dovrebbe consentire l'uso delle tabelle per realizzare degli schemi riassuntivi riferiti a comandi, sintassi o simili. Si osservi l'esempio seguente:

<object id="a2-esempio-sintassi-in-tabella">
<tabular col="2" columnfractions="0.618 0.382" border="1">
<thead>
  <trow>Comando
<colsep>Descrizione
</trow>
</thead>
<tbody>
  <trow><syntax>mbadblock <var>unità_dos</var></syntax>
<colsep>Scandisce un'unità &DOS; alla ricerca di settori difettosi.
</trow>
  <trow><syntax>mcd <synsqb><var>directory_dos</var></synsqb></syntax>
<colsep>Permette di modificare o conoscere la directory corrente delle unità &DOS;.
</trow>
  <trow><syntax>mdel <var>file_dos</var><synellipsis></syntax>
<colsep>Cancella i file &DOS; indicati come argomento.
</trow>
  <trow><syntax>mdeltree <var>directory_dos</var><synellipsis></syntax>
<colsep>Cancella le directory &DOS; indicate come argomento.
</trow>
  <trow><syntax>mmd <var>directory_dos</var><synellipsis></syntax>
<colsep>Crea le directory &DOS; indicate come argomento.
</trow>
  <trow><syntax>mmove <var>origine_dos</var><synellipsis> <var>destinazione_dos</var></syntax>
<colsep>Sposta o rinomina uno o più file e directory.
</trow>
  <trow><syntax>mrd <var>directory_dos</var><synellipsis></syntax>
<colsep>Elimina le directory indicate come argomento, purché siano vuote.
</trow>
  <trow><syntax>mren <var>origine_dos</var><synellipsis> <var>destinazione_dos</var></syntax>
<colsep>Rinomina o sposta uno o più file e directory.
</trow>
</tbody>
</tabular>
</object>

Il riquadro successivo mostra il risultato nella composizione finale:

Comando Descrizione
mbadblock unità_dos
Scandisce un'unità Dos alla ricerca di settori difettosi.
mcd [directory_dos]
Permette di modificare o conoscere la directory corrente delle unità Dos.
mdel file_dos...
Cancella i file Dos indicati come argomento.
mdeltree directory_dos...
Cancella le directory Dos indicate come argomento.
mmd directory_dos...
Crea le directory Dos indicate come argomento.
mmove origine_dos... destinazione_dos
Sposta o rinomina uno o più file e directory.
mrd directory_dos...
Elimina le directory indicate come argomento, purché siano vuote.
mren origine_dos... destinazione_dos
Rinomina o sposta uno o più file e directory.

La scelta del rapporto tra le due colonne della tabella, 61,8 % e 38,2 %, rappresenta quello che è noto come «rapporto aureo». Volendo seguire la stessa logica per una tabella di tre colonne, i rapporti sono: 19,1 %, 30,1 % e 50,0 %.

Le tabella molto lunghe possono essere realizzate in modo da consentire il salto pagina, utilizzando l'attributo split nell'elemento object che le contiene. In ogni caso, perché ci possa essere una tabella suddivisibile tra le pagine, è necessario che questa non sia fluttuante.

Il corpo del carattere «normale» che si inserisce all'interno delle celle di una tabella ottenuta con l'elemento tabular, può essere controllato nell'intestazione con un elemento printedfontsize, come nell'esempio seguente:

<head>
    <admin>
        ...
        <printedfontsize type="table">3,5mm</printedfontsize>
        ...
    </admin>
    ...
</head>

Se non si indica questa informazione, né nell'intestazione, né nell'elemento tabular, il carattere viene comunque ridotto leggermente rispetto a quello del corpo normale del testo. Eventualmente, per richiedere espressamente un carattere di dimensione pari a quello esterno, basta utilizzare l'attributo printedfontsize nell'elemento tabular con una dimensione di un quadratone:

<tabular ... printedfontsize="1em">
...
</tabular>

La gestione delle tabelle di Alml ha, evidentemente, delle limitazioni: principalmente manca la possibilità di fondere delle celle. Eventualmente, oltre alla possibilità di disegnare una tabella con altri strumenti per poi incorporarne l'immagine, si può valutare l'opportunità di utilizzare del codice HTML con l'elemento html, come si vede nell'esempio di tabella u106.4. Tuttavia, si deve ricordare che si tratta di codice esterno, per cui non si possono inserire elementi tipici di Alml, ma solo codice HTML; inoltre, la trasformazione in forma di testo puro di una tabella HTML complessa non avviene sempre nel modo corretto; infine, così facendo non si possono ottenere delle tabelle che si dispongono automaticamente su più pagine.

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