# Full-width tabular with column width as needed

I am translating HTML-tables to latex counterparts.

In HTML, I have a table with full width that distributes the column according to their content.

So this leads to equally spaced columns,

<table style="width: 100%;">
<tr>
<td>a</td>
<td>a</td>
</tr>
</table>


whereas this assigns 4 times as much space to the left column:

<table style="width: 100%;">
<tr>
<td>aaaa</td>
<td>a</td>
</tr>
</table>


# tabularx

I have found that for tabularx an X column takes the remaining space:

\begin{tabularx}{\textwidth}{lX}


but there multiple X-columns would distribute the width equally, not as needed by the content. (XX would be 50:50, XXX would be 33:33:33)

My question: Is it possible to have a column type that distributes width relatively to the content? like my aaaa - a (i.e. 80:20 here) example?

Actually, the content of the tabular cells may itself consist of tabularx's 🙈. So I have found that tabularx-in-tabularx seems to be impossible.

If I use outer tabulars, i can only arrive at full textwidth by having minipages inside:

If I do not insist on the content-aware column widths, I can use tabular outside and use minipages with fixed widths (eg two columns with .47\textwidth each) inside.

\begin{tabular}
\begin{minipage}[t]{0.47\columnwidth}
left outer
\end{minipage} &
\begin{minipage}[t]{0.47\columnwidth}
\begin{tabularx}{\textwidth}{lX}
inner left &
inner right
\end{tabularx}
\end{minipage}
\\
\end{tabular}


I am absolutely clueless how to get an automatic width distribution to work here, the latter example will always be 50:50.

Note that I am not insiting on an outer tabular. Anything else that distributes with according to content is fine as well. In HTML one could use e.g. <div>'s here

In the best case there would exist an environment tabularxyz which allows:

\begin{tabularxyz}
left outer
&
\begin{tabularx}{\textwidth}{lX}
inner left &
inner right
\end{tabularx}
\\
\end{tabularxyz}


where Latex determines the optimal width for all columns, just as tabulary does this (but only for plain text contents).

The nested tabularx's are the result of a placeholder substitution from my reporting software. Most of the time, they are even just used without a surrounding table. I use tabularx because it allows to use full available textwidth.

• Hello and welcome. I didn't understand what the problem is that you're trying to solve. Jul 16, 2020 at 5:46
• I improved my question Jul 16, 2020 at 5:55
• Unless I'm mistaken, it seems to me that what you want is the default behavior of the tabular environment. Jul 16, 2020 at 6:11
• You could take a look at the tabulary package. Jul 16, 2020 at 6:48
• Regarding "tabularx-in-tabularx seems to be impossible": How to put tabularx inside tabularx might be interesting. Unfortunately this does not seem to be adaptable to tabulary. Jul 16, 2020 at 7:02

tabular* will fix the tabular's width to the textwidth.

For the tabular inside a tabular cell, you could use the multirow package. You can specify cells containing multiple rows/columns (and both) with it. Examples can be found here.

To obtain X columns with lengths in a certain ratio, you have to use the syntax >\hsize=x_i\hsize}X, where x_i is a coefficient for the i-th X column which is proportional to the desired fraction of the total free length, and such that the sum of the coefficients is equal to the total number of X columns.

For example, to have the ratio 80/20 with two X columns, you would have to solve the (easy) linear system:

x_1/80=x_2/40, x_1+x_2=2, whence, in the table preamble:

>{\hsize=1.6\hsize}X>{\hsize=0.4\hsize}X.

• Thanks, if I knew the desired width ratio in advance, this would be the way to go. Jul 16, 2020 at 9:49
• If you don't know in advance, I'm afraid it would be by trial and error. Jul 16, 2020 at 9:54