csvreader 和 csvstyle 与 siunitx:“段落在 NC@rewrite@S 完成之前结束”

csvreader 和 csvstyle 与 siunitx:“段落在 NC@rewrite@S 完成之前结束”

我正在尝试使用 csvreader 定义一个可用于多个表的 csvstyle,但是在尝试单独格式化“S”列时遇到错误。每个表都有相同的列名和数据类型;它们只是不同实验场景的结果。

对于以下数据:

数据集1.csv

Name,ValueA,ValueB,ValueC
John,623.95, 8.954847, 0.000772
Anna,602.40,8.93469, 0.000772
Jacob,1987.17,8.796296, 0.000926

这是我能达到的最大程度:

\documentclass{article}
\usepackage{csvsimple}
\usepackage{filecontents}
\usepackage{siunitx}

\begin{filecontents*}{Dataset1.csv}
Name,ValueA,ValueB,ValueC
John,623.95, 8.954847, 0.000772
Anna,602.40,8.93469, 0.000772
Jacob,1987.17,8.796296, 0.000926
\end{filecontents*}

\begin{document}
\csvstyle{MyStyle}{
    head to column names,
    before reading=\centering\sisetup{table-number-alignment=center,table-format=4.4,table-auto-round},
    tabular=|c|S|S|S|,
    table head =\hline {Name} & {ValueA} & {ValueB} & {ValueC} \\\hline,
    table foot=\hline
}

\csvreader[MyStyle]{Dataset1.csv}{}{\Name & \ValueA & \ValueB & \ValueC}
\end{document}
%\csvreader[MyStyle]{Dataset2.csv}{}{\Name & \ValueA & \ValueB & \ValueC}
\end{document}

当前编码结果

S任何试图将改为S[table-format=4.2](并将其从 中删除before reading)以便逐列调整小数位数的尝试都会产生

Paragraph ended before \\NC@rewrite@S was complete. ...sv}{}{\Name & \ValueA & \ValueB & \ValueC}

错误。如能得到任何帮助,我们将不胜感激。

答案1

您可以将所需的格式定义为新的列类型:

\newcolumntype{H}{S[table-format=4.2]}

然后,您可以在需要时使用H而不是S,并从宏中删除格式命令before reading

我已经创建了一个例子背页

相关内容