类似如下: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
最后一列。
\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
,必须在原始数据集中添加空的第一列和最后一列。