tabularx e textwidth

Oct 01 2020

Vorrei inserire una tabella a 3 colonne nel mio progetto, ma sto riscontrando problemi nel tentativo di adattare il testo in una cella a più colonne. Ecco il mio codice:

\begin{center}
\begin{tabularx}{\textwidth}{|c X c|}
\hline

\multicolumn{1}{|c}{} & 
\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{ cell0: text text text text text text text text text text text text text text text text }\\
\hline

cell1 & cell2: text text text text text text text text & cell3\\

\hline
\end{tabularx}
\end{center}

Il problema è che, ogni volta che utilizzo il comando hsize per adattare il testo correttamente a cell0, cell2 nella riga seguente perde la sua regolazione automatica al testo e acquisisce una larghezza fissa (cosa che non voglio). Quindi, come posso regolare il testo in cell0 nello stesso momento in cui cell2 mantiene la regolazione automatica del testo?

Risposte

2 Mico Oct 01 2020 at 11:48

Il tuo calcolo della larghezza utilizzabile dell'oggetto "cell0" non è corretto. Sarebbe (quasi) corretto se entrambe le colonne sottostanti fossero di tipo X; tuttavia, non è così, vero?

Per calcolare correttamente la larghezza combinata utilizzabile delle colonne 2 e 3, ti suggerisco di procedere come segue.

  • Innanzitutto, trova la cella nella colonna 3 che determina la larghezza naturale di quella colonna. Questo di solito è fatto facilmente e in modo affidabile mediante ispezione visiva.

  • Supponiamo che la cella che definisce la larghezza naturale della colonna 3 sia costituita dalla stringa aratherlongword. La sua larghezza può essere determinata correndo

   \newlength\colwidth
   \settowidth\colwidth{aratherlongword}
  • Quindi la larghezza combinata utilizzabile delle colonne 2 e 3 può essere calcolata come
   \hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax

Un MWE completo (nota che l'ho scartato \multicolumn{1}{|c}{}poiché è ridondante).

\documentclass{article}
\usepackage{tabularx}
\begin{document}

\begin{center}
\newlength\colwidth
\settowidth\colwidth{aratherlongword}
\begin{tabularx}{\textwidth}{|c X c|}
\hline
& \multicolumn{2}{>{\hsize=\dimexpr\hsize+\colwidth+2\tabcolsep\relax}X|}{%
  cell0: text text text text text text text text text text text text text text text text }\\
\hline
cell1 & cell2: text text text text text text text text & aratherlongword\\
\hline
\end{tabularx}
\end{center}
\end{document}