# Table width does not fit the textwidth after using \newcolumntype in tabularx environment!

I use the tabularx package and use \newcolumntype command to specify the column width.

However, the text width of the table does not fit the text width of the document after I use the specified column type, i.e., s in the example.

And if I don't use the specified column type, the text with of the table is correct.

The source code and the output PDF is showed as follows,

\documentclass[10pt,journal,compsoc]{IEEEtran}
\usepackage{tabularx}
\newcolumntype{s}{>{\hsize=.23\hsize}X}

\begin{document}
\begin{table*}[!t]
\renewcommand{\arraystretch}{1.5}
\caption{Table example.}
\centering
\begin{tabularx}{\textwidth}{lslX}
\hline
column1 & column2   &column3    &column4\\
\hline
abc & some text & some text in column3 &some text some text some text some text some text some text some text some text some text some text \\
aaa &bbbbb  &ccccc  &dddddd\\
bcd & some text in column2  & some text in column3 & some text some text some text some text some text some text some text some text some text \\
\hline
\end{tabularx}
\end{table*}

\begin{table*}[!t]
\renewcommand{\arraystretch}{1.5}
\caption{Table example.}
\centering
\begin{tabularx}{\textwidth}{lllX}
\hline
column1 & column2   &column3    &column4\\
\hline
abc & some text & some text in column3 &some text some text some text some text some text some text some text some text some text some text \\
aaa &bbbbb  &ccccc  &dddddd\\
bcd & some text in column2  & some text in column3 & some text some text some text some text some text some text some text some text some text \\
\hline
\end{tabularx}
\end{table*}
\end{document}


How to make TABLE 1 display as TABLE 2, i.e., the text in the table 1 fit the whole text width of the document?

• \newcolumntype{s}{>{\hsize=.23\hsize}X} will completely break the tabularx algorithm to determine column widths. – David Carlisle Sep 4 '19 at 16:02
• Thanks for your comment. So, how to specify the width of a column correctly? – Spark Sep 4 '19 at 16:09
• The sum of the coefficients of \hsize in the X columns has to be the total number of columns. It seems you try to obtain a certain ratio between the s column type and the X column type, if I'm not mistaken, but I'm not sure which it is. Could you give details? – Bernard Sep 4 '19 at 16:32
• @Bernard Yes, exactly. And I think I have got your idea. For example, if s is set to be 0.23\hsize as above, then the last column should be 1.77\hsize to ensure the sum to be 2X. The code should be like \newcolumntype{s}{>{\hsize=.4\hsize}X} \newcolumntype{L}{>{\hsize=1.6\hsize}X}  then \begin{tabularx}{\textwidth}{lslL} will work correctly. – Spark Sep 4 '19 at 17:15
• Yes. The last code says the s column is ¼ of the L column. It's a sort of barycentric coordinates which is used. – Bernard Sep 4 '19 at 17:24

I have got the solution.

As indicated by @Bernard

The sum of the coefficients of \hsize in the X columns has to be the total number of columns.

So the code should be like：

\begin{table*}[!t]
\renewcommand{\arraystretch}{1.5}
\caption{Table example.}
\centering
\begin{tabularx}{\textwidth}{l >{\hsize=.23\hsize}X l >{\hsize=1.77\hsize}X}
\hline
column1 & column2   &column3    &column4\\
\hline
abc & some text & some text in column3 &some text some text some text some text some text some text some text some text some text some text \\
aaa &bbbbb  &ccccc  &dddddd\\
bcd & some text in column2  & some text in column3 & some text some text some text some text some text some text some text some text some text \\
\hline
\end{tabularx}
\end{table*}
\begin{table*}[!t]
\renewcommand{\arraystretch}{1.5}
\caption{Table example.}
\centering
\begin{tabularx}{\textwidth}{lllX}
\hline
column1 & column2   &column3    &column4\\
\hline
abc & some text & some text in column3 &some text some text some text some text some text some text some text some text some text some text \\
aaa &bbbbb  &ccccc  &dddddd\\
bcd & some text in column2  & some text in column3 & some text some text some text some text some text some text some text some text some text \\
\hline
\end{tabularx}
\end{table*}


Then the following output is obtained：