如何在 csv 文件中实现混合字符和浮点数的宏样式?

如何在 csv 文件中实现混合字符和浮点数的宏样式?

我想实现宏来在文档中生成多个表格。一些灵感来自这里:longtable 或等效项和 pgfplotstabletypeset 的使用

输入csv文件和生成的表应该包含charsfloats

非宏实现可以正常工作,例如,为了生成单个表,我可以毫无问题地执行以下操作:

\documentclass{article} 

\usepackage{pgfplotstable}
\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{etoolbox}

\begin{filecontents*}{test.csv}
    A,B,C
    0,0,T
    1,1,T
    2,2,T
    3,3,T
    4,4,T
    5,5,T
\end{filecontents*}
\pgfplotstableset{
    begin table=\begin{longtable},
    col sep=comma,
    string type,
    columns={A,B,C},
    columns/A/.style={int detect,column name=A},
    columns/B/.style={int detect,column name=B},
    columns/C/.style={int detect,column name=C},
    every head row/.style={before row=\toprule,after row=\midrule\endhead},
    every last row/.style={after row=\bottomrule},
    end table=\caption{\mycaption}\end{longtable}
}
\begin{document}
\pgfplotstabletypesetfile{test.csv}
\end{document}

如果 csv 文件仅包含整数/浮点数数据,则替代宏路线有效,但如果存在字符,则无效:

\documentclass{article} 

\usepackage{pgfplotstable}
\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{etoolbox}
\begin{filecontents*}{test.csv}
 A,B,C
 0,0,T
 1,1,T
 2,2,T
 3,3,T
 4,4,T
 5,5,T
\end{filecontents*}

\newrobustcmd{\strtable}[2]{
    \pgfplotstableset{
    begin table=\begin{longtable},
    end table=\caption{#2}\end{longtable}
    }
    \pgfplotstableset{columns={A,B,C}}
    \pgfplotstableset{columns/A/.style={int detect,column name=A}}
    \pgfplotstableset{columns/B/.style={int detect,column name=B}}
    \pgfplotstableset{columns/C/.style={int detect,column name=C}}

    \pgfplotstableread[col sep=comma, string type]{#1}\strtable

    \begin{center}
        \pgfplotstabletypeset[
            every head row/.style={before row=\toprule,after row=\midrule\endhead},
                every last row/.style={after row=\bottomrule},
            ]\strtable
    \end{center}
}
\begin{document}   
\strtable{test.csv}{test}
\end{document}

不幸的是,当我运行前面的宏时,事情就停止了:

! Package PGF Math Error: Could not parse input 'T' as a floating point number,
 sorry. The unreadable part was near 'T'..

由于某种原因,在两种情况下 csv 文件的解析方式不同,第二种情况出现了问题。我尝试了术语的放置方式,并查看了pgfplotstable文档,但没有什么收获。

如何在 csv 文件中实现混合字符和浮点数的宏样式?

答案1

string type是输出样式,而不是输入样式。如果仅将其应用于最后一列,则一切正常:

\documentclass{article} 

\usepackage{pgfplotstable}
\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{etoolbox}
\begin{filecontents*}{test.csv}
 A,B,C
 0,0,T
 1,1,T
 2,2,T
 3,3,T
 4,4,T
 5,5,T
\end{filecontents*}

\newrobustcmd{\strtable}[2]{
    \pgfplotstableset{
    begin table=\begin{longtable},
    end table=\caption{#2}\end{longtable}
    }
    \pgfplotstableset{columns={A,B,C}}
    \pgfplotstableset{columns/A/.style={int detect,column name=A}}
    \pgfplotstableset{columns/B/.style={int detect,column name=B}}
    \pgfplotstableset{columns/C/.style={string type,column name=C}}

    \pgfplotstableread[col sep=comma]{#1}\strtable

    \begin{center}
        \pgfplotstabletypeset[
            every head row/.style={before row=\toprule,after row=\midrule\endhead},
                every last row/.style={after row=\bottomrule},
            ]\strtable
    \end{center}
}
\begin{document}   
\strtable{test.csv}{test}
\end{document}

相关内容