带有 siunitx S 列的 csvsimple

带有 siunitx S 列的 csvsimple

类似如下:csvsimple 和 siunitx

是否有类似的解决方法,但\csvlinetotablerow不是明确地写出每个\csvcoli\csvcolii

这是我的 MWE:

\documentclass[varwidth=\maxdimen]{standalone}

\usepackage{csvsimple}
\usepackage{siunitx}

\begin{filecontents*}{data.csv}
A,B,C
1.23,4.5,67.89
1.2,34.56,7.89
\end{filecontents*}

\begin{document}

\csvreader[
    tabular={SSS} % if I change it to {cSS}, it works flawlessly
]{data.csv}{}{\csvlinetotablerow}

\end{document}

答案1

摘自csvsimple文档,第 50 页

如果要将第一列或最后一列格式化为 S 类型,则需要特别小心。 的数字检测siunitx会受到实际存在于第一列和最后一列的行读取代码的干扰csvsimple。 为了避免此问题,使用\tablenum是合适的。

或者,Enrico Gregorio 建议的一个非常巧妙的解决方法是添加一个不可见的虚拟列作为c@{}第一列和 @{}c最后一列。

C

\documentclass{article}

\usepackage[l3]{csvsimple}
\usepackage{siunitx}    

\begin{filecontents*}{data.csv}
    A,B,C
    1.23,4.5,67.89
    1.2,34.56,7.89
\end{filecontents*}

\begin{filecontents*}{data2.csv}
,A,B,C,
,1.23,4.5,67.89,
,1.2,34.56,7.89,
\end{filecontents*}

\begin{document}
    
    Using \verb|\tablenum|\bigskip
    
    \csvreader[
    head to column names,
    tabular={ccc} % 
    ]{data.csv}{}{\tablenum{\A} &\tablenum{\B}& \tablenum{\C}}
    
    \bigskip
    
    Using Enrico Gregorio suggestion    \bigskip
        
    \csvreader[
    head to column names,
    tabular={c@{}SSS@{}c} % 
    ]{data.csv}{}{&\A & \B & \C &}  \bigskip
    
    Now with \verb|\csvlinetotablerow| (different data set)\bigskip
        
    \csvreader[
    tabular={c@{}SSS@{}c} %
    ]{data2.csv}{}{\csvlinetotablerow}          

\end{document}

简而言之,要S按照 E. Gregorio 的建议和使用列\csvlinetotablerow,必须在原始数据集中添加空的第一列和最后一列。

相关内容