我想实现宏来在文档中生成多个表格。一些灵感来自这里:longtable 或等效项和 pgfplotstabletypeset 的使用
输入csv
文件和生成的表应该包含chars
和floats
。
非宏实现可以正常工作,例如,为了生成单个表,我可以毫无问题地执行以下操作:
\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}