Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I've searched around this site and also alot with Google, but did not find exactly a solution to my problem:

I want to create a table width equally (and automatically) spaced columns. These columns contain numcerical values, which should be aligned at the decimal marker. In each column, the whole number block shall then be centered with respect to the column.

I've tried using S columns of the siunitx package with the table-number-alignment=center option and fideling around with table-format=n.m. However, this only works, if in all columns there occurs at least once a number having +n integers or m decimal places. Here a short example of my efforts, the vertical line are only for vizualization:

\documentclass{article}

\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{siunitx}
\begin{document}

\begin{table}\small
  \centering
  \sisetup{
  table-number-alignment = center,
  table-format=+2.3
  }
  \begin{tabularx}{\textwidth}{
  @{}c|*{7}{S|}@{}
  }
  \toprule
    Text & aa & bb  & cc &  ff &  gg  &   hh   &   kk    \\
  \midrule
    Text & 1    &  0.115 &  0.086 & 1.41  &  0.23  &  0.092 &  6.82    \\
    Text & -32  &  5.3   & -36    & 0.01  &  50.1  &  0.7   & -18.8   \\
  \bottomrule
  \end{tabularx}
  \caption{Example}
\end{table}
\end{document}

Column "cc" looks as it should, because it matches the +2.3 figure-format, while columns "bb" or "hh" look somewhat strange. I want these numbers to be centered, too. Is it possible to get the desired look using the siunitx package?

share|improve this question
    
Not automatically - you have to adjust the table-format setting on a per-column basis. –  Joseph Wright Jul 28 '11 at 15:54
    
Welcome to TeX.sx! Thank you very much for providing a minimal working example (MWE)! –  Martin Scharrer Jul 28 '11 at 15:58
add comment

3 Answers

Automatic setting of table-format is not currently possible. To set up to maintain alignment, it is necessary to know how much space to reserve. This depends on all of the entries in a column, not just the current entry. Thus to set table-format automatically would require some significant change to the entire way that tables are constructed. As the S column is intended to be used with a range of LaTeX tabular-like implementations, this is not really desirable. Thus you do have to set the format on a per-column basis.

share|improve this answer
add comment

Building upon Joseph's answer, here's a way to fill the line width with the table:

\documentclass{article}

\usepackage{booktabs}
\usepackage{widetable}
\usepackage{siunitx}
\begin{document}

\begin{table}\small
  \centering
  \sisetup{table-number-alignment = center}
  \begin{widetable}{\textwidth}{
  c
  S[table-format=+2.0]
  S[table-format=1.3]
  S[table-format=+2.4]
  S[table-format=1.2]
  S[table-format=2.2]
  S[table-format=1.3]
  S[table-format=+2.2]
  }
  \toprule
    Text & aa & bb  & cc &  ff &  gg  &   hh   &   kk    \\
  \midrule
    Text & 1    &  0.115 &  0.086 & 1.41  &  0.23  &  0.092 &  6.82    \\
    Text & -32  &  5.3   & -36    & 0.01  &  50.1  &  0.7   & -18.8   \\
  \bottomrule
  \end{widetable}
  \caption{Example}
\end{table}
\end{document}

The widetable package overcomes some problems of the tabular* environment. I didn't think it worked with S columns, I was wrong. The widetable environment works similarly to tabular*, adding to the intercolumn space, which is what is needed here.

share|improve this answer
add comment

Inspired by the answer of @egreg I came up with a solution myself. Before posting the code, I should perhaps clarify that the point, which was important to me in my original problem, was the equal width of the siunitx columns. Unfortunately I wrote "equally spaced column" instead of something "columns with equal width".

The widetable package solution does not provide equal width columns. I used the tabu package instead, as this appraently allows to embedd S columns in the tabu X column. As @Joseph pointed out the format must set on per-column-basis.

\documentclass{article}

\usepackage{booktabs}
\usepackage{tabu}
\usepackage{siunitx}
\begin{document}

\begin{table}\footnotesize
 \centering
 \sisetup{table-number-alignment = center}
 \begin{tabu} to \textwidth {
 c|
 X[c]{S[table-format=+2]}|
 X[c]{S[table-format=1.3]}|
 X[c]{S[table-format=+2.3]}|
 X[c]{S[table-format=1.2]}|
 X[c]{S[table-format=2.2]}|
 X[c]{S[table-format=1.3]}|
 X[c]{S[table-format=+2.2]}|
 }
 \toprule
   Text & aa & bb  & cc &  ff &  gg  &   hh   &   kk    \\
 \midrule
   Text & 1    &  0.115 &  0.086 & 1.41  &  0.23  &  0.092 &  6.82    \\
   Text & -32  &  5.3   & -36    & 0.01  &  50.1  &  0.7   & -18.8   \\
 \bottomrule
 \end{tabu}
 \caption{Example}
\end{table}

\end{document}
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.