2

I have an issue in correctly changing the column width of a table. I want the columns to be formatted using the siunitx package. In my data, I have a mix of values that should be printed as is (e.g. 0.0425) and some that should be printed with the float shift (3.585 * 10 ^ -5).

When I change the column width using the table-column-width property of the S column, the values do not align any longer. It seems like the normal floating point numbers do behave as expected and the numbers with a power of 10 are in the place where they would be without column resizing.

To setup the data you can use

\documentclass{minimal}

\begin{document}

\begin{filecontents*}{data.csv}
Parameter,200,600,No-Treatment
N-Observations,209.0,209.0,195.0
Mean,2.500170353865091e-05,2.1559213174203927e-05,0.00015240802982599504
Variance,5.5824149143594136e-08,-1.1650000181975986e-08,1.7979465607149884e-07
Skewness,-0.4393776076843506,-0.06577317175679437,-0.13945687546114036
\end{filecontents*}

\end{document}

A MWE to see the issue is here:

\documentclass{paper}

\usepackage{array}
\usepackage{booktabs} % version 1.61803398
\usepackage{siunitx} % version 2.8b

\sisetup{
  round-mode          = places, % Rounds numbers
  round-precision     = 4, % to 4
}

\usepackage{pgfplotstable} % version 1.17
\pgfplotsset{compat=newest}

\begin{document}


\begin{table}[ht]
    \centering
    \caption{Statistical parameters example}
    \pgfplotstabletypeset[
      multicolumn names, % allows to have multicolumn names
      col sep=comma, % the seperator in our .csv file
      display columns/0/.style={
        column name=Parameter, % name of first column
        column type={p{0.25\textwidth}|},string type},  % use siunitx for formatting
      display columns/1/.style={
        column type={S[table-column-width=3cm]},string type},  % use siunitx for formatting
      display columns/2/.style={
        column type={S[table-column-width=3cm]},string type},  % use siunitx for formatting
      display columns/3/.style={
        column type={S[table-column-width=3cm]},string type},  % use siunitx for formatting
      every head row/.style={
        before row={\toprule}, % have a rule at top
        after row={\midrule},
        every last row/.style={after row=\bottomrule}
        }
    ]{data/stat-windows-mean.csv} % filename/path to file
\end{table}

\end{document}
2
  • 1
    I'm guessing you are using siunitx version 2: correct? – Joseph Wright Jun 10 at 20:55
  • Yes, I am using siunitx version 2.8b – Philipp P Jun 11 at 7:17
1

The v2 code does have an issue here, but even in v3 (which does not have a bug in the fixed-width approach), I'd still use table-format to define some reserved space:

\begin{filecontents*}{data.csv}
Parameter,200,600,No-Treatment
N-Observations,209.0,209.0,195.0
Mean,2.500170353865091e-05,2.1559213174203927e-05,0.00015240802982599504
Variance,5.5824149143594136e-08,-1.1650000181975986e-08,1.7979465607149884e-07
Skewness,-0.4393776076843506,-0.06577317175679437,-0.13945687546114036
\end{filecontents*}

\documentclass{article}

\usepackage{array}
\usepackage{booktabs}
\usepackage{siunitx}%[=v2]

\sisetup{
  round-mode          = places, % Rounds numbers
  round-precision     = 4, % to 4
}

\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}

\begin{document}


\begin{table}[ht]
  \sisetup{table-column-width=3cm,table-format = 3.4e+1}
    \centering
    \caption{Statistical parameters example}
    \pgfplotstabletypeset[
      multicolumn names, % allows to have multicolumn names
      col sep=comma, % the seperator in our .csv file
      display columns/0/.style={
        column name=Parameter, % name of first column
        column type={p{0.25\textwidth}|},string type},  % use siunitx for formatting
      display columns/1/.style={
        column type={S},string type},  % use siunitx for formatting
      display columns/2/.style={
        column type={S},string type},  % use siunitx for formatting
      display columns/3/.style={
        column type={S},string type},  % use siunitx for formatting
      every head row/.style={
        before row={\toprule}, % have a rule at top
        after row={\midrule},
        every last row/.style={after row=\bottomrule}
        }
    ]{data.csv} % filename/path to file
\end{table}

\end{document}

The v3 code makes a better effort here, but you will need to add table-fixed-width as I've split the idea of 'storing a column width' and 'using a fixed column width'.

2
  • Not part of the answer, but I would avoid a fixed-width column for numbers – Joseph Wright Jun 11 at 9:04
  • By fixed-width you mean fixed width in general (also using \textwidth) or just fixing it to a value in cm? – Philipp P Jun 11 at 9:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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