我已经搜索了使用 pgfplotstable 的问题的解决方案,但没有找到任何有用的方法。
我正在使用 pgfplotstable 将 csv 数据导入我的 latex 代码。我的表有四列。第一列包含字符串数据,其他列包含数值。
我指出了第一个列字符串的列类型,然后收到以下消息 - 错误(1):
!缺少 $ 插入。$ l.17 ]{teste.csv}
数据位于文件 teste.csv 中
如果我从第一列删除字符串类型样式,则会收到以下错误(2):
!PGF 软件包数学错误:无法将输入“B030_01”解析为浮点数,抱歉。无法读取的部分位于“B030_01”附近。
我的乳胶代码:
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{array}
\usepackage[utf8]{inputenc}
\pgfplotsset{compat=1.9}
%\pgfplotstableread[col sep=tab]{teste.csv}\mytable
\begin{document}
\pgfplotstabletypeset[col sep=tab,
columns={Instance,CAP,CUSTO,TIME}
columns/Instance/.style={string type} % if commented get error 2, else get error 1
]{teste.csv}
\end{document}
我的数据表:
Instance CAP CUSTO TIME
B030_01 3 15673 0.136264
B030_02 3 16732 0.143577
...
B030_28 8 99998.5 1.28447
B030_29 17 93604.5 1.110965
B030_30 17 96460.5 1.19836
也许,这个错误可能非常简单,但直到现在我还没有弄清楚。
答案1
这是因为字符串类型需要文本模式并看到下划线,这是一个数学模式字符,如果你不使用字符串类型,它会尝试将其保留为数字,但事实并非如此。相反,你可以搜索并将其替换为字符串兼容版本_
。在这里,我只是将示例简化为内联表:
\pgfplotstabletypeset[
columns={Instance,CAP,CUSTO,TIME},
columns/Instance/.style={string type,string replace*={_}{\textunderscore}}
]{
Instance CAP CUSTO TIME
B030_01 3 15673 0.136264
B030_02 3 16732 0.143577
B030_28 8 99998.5 1.28447
B030_29 17 93604.5 1.110965
B030_30 17 96460.5 1.19836
}
答案2
第一列包含_
,它是数学模式下下标的特殊字符。因此,TeX 需要数学模式并报错。
这可以通过逐字模式读取第一列来解决,可以通过类型设置verb string type
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{pgfplotstable}
\usepackage{array}
\usepackage[utf8]{inputenc}
\pgfplotsset{compat=1.9}
\begin{document}
\pgfplotstabletypeset[col sep=tab,
columns={Instance,CAP,CUSTO,TIME},
columns/Instance/.style={verb string type},
]{teste.csv}
\end{document}