Provo a spiegartelo io, visto che le soluzioni di Enrico, anche se semplici, hanno qualcosa di sottinteso che è sempre interessante scoprire.
Nel caso della definizione della colonna M, infatti puoi definirla con la larghezza misurata di NUL, stivata nella scatola \gnat e scrivere nel preambolo per esempio;`\begin{tabular}{…*8{M{\gnat}}}`, ma se lavorando con la tabella e le colonne così definite ti pare che qualche entry di quelle colonne richiederebbe uno spazio maggiore, puoi scrivere: `\begin{tabular}{…*8{M{\gnat+3pt}}}` perché puoi scrivere un’espressione. Ma nello stesso tempo se ci hai quasi preso ad usare l’entry NUL per prendere la misura, ma ce n’è un’altra leggermente più larga, allora l’entry leggermente più larga entra ugualmente nella scatola della cella, rimanendo centrata, grazie alla lunghezza elastica \hss che è simultaneamente allungabile infinitamente e accorciabile infinitamente, cosicché se il contenuto della scatola sfora un poco la larghezza definita attraverso NUL, non ha importanza e non vengono emessi messaggi d’errore do overful hbox; la tabella risulta ben composta purché la larghezza definita con NUL non sia tanto diversa dalla massima larghezza dei contenuti delle celle.
Certo se usi NUL come indicatore della larghezza quasi massima e poi uno degli elementi della tabella in una di quelle colonne vale VERCINGETORIGE, allora questa parola verrà perfettamente centrata, non verranno emessi messaggi d’errore ma la parola si sovrapporrà sulle celle adiacenti con un effetto mica tanto carino 🙁