Re: Array, dimensioni tabelle

#6933
Up
0
Down
::

Ciao a tutti. ho alcuni problemi con il dimensionamento di tabelle con il
package array. Ecco un sorgente di esempio:`\documentclass[a4paper,12pt]{book}
\usepackage[ansinew]{inputenc}
\usepackage[italian]{babel}
\usepackage{array}
\begin{document}
\noindent \framebox[\textwidth]{questa è la larghezza del testo}
%%Prima tabella
\setlength{\extrarowheight}{0.5ex}%
\begin{tabular}{|>{\flushleft}m{0.7\textwidth}|>{\centering}m{0.3\textwidth}|}
\hline
Descrizione & B
\tabularnewline
\hline
\end{tabular}
%%
%%seconda tabella
\begin{tabular}{|>{\flushleft}m{0.4\textwidth}|%
>{\centering}m{0.2\textwidth}|%
>{\centering}m{0.2\textwidth}|%
>{\centering}m{0.2\textwidth}|}%
\hline%
Descrizione & A & B & C \tabularnewline%
\hline%
\end{tabular}
%%
\end{document}`Le due tabelle dovrebbero avere la stessa larghezza (0.6+0.4=1 e 0.4+0.2+0.2+0.2=1) ma non è così. Che cosa sbaglio?
Ho letto sul manuale di array che

m{width}…Every entry will be centered in proportion to the rest of the line…

ma cosa vuol dire esattamente ?
Il comando \setlength{\extrarowheight}{0.5ex} pare agisca solo per
incrementare l’altezza delle righe… ma come posso fare a ridurla ?

Sbagli in vari punti.
(1) Non tieni conto dello spazio tra colonne che viene imposto automaticamente e infatti la seconda tabella supera la prima esattamente di quanto la prima supera la grandezza del testo. In generale non è bene scrivere tabelle che occupino l’intera colonna a meno di non scrivere con colonne strette. Esiste il pacchetto tabularx per la cosa che desideri.
(2) Lo specificatore m{} è per centrare verticalmente il contenuto della cella rispetto alla riga.
(3) Usi \flushleft invece di \raggedright; è un errore abbastanza comune confondere i due; ma flushleft è un ambiente, mentre \raggedright è una dichiarazione. Stanno fra loro come center e \centering. È per questo che la prima cella non appare centrata verticalmente; in realtà lo è, perché flushleft comincia imponendo una spaziatura verticale, e \flushleft è equivalente a \begin{flushleft}. Siccome ti manca \end{flushleft} non hai la spaziatura sottostante che riequilibra.
(4) Invece di \extrarowheight potresti provare a modificare il valore di \arraystretch:`\renewcommand{\arraystretch}{1.2}`aumenta del 20% la distanza fra una riga e l’altra.
(5) Usi linee verticali e orizzontali quando forse non è necessario; mai mettere una riga in testa e in coda, a sinistra e a destra.
Ciao
Enrico

Go to top