我喜欢使用 pgfplotstable 包来读取和绘制表格,但处理字符串和值(尤其是当字符串包含空格时)让我抓狂...我经常使用如下所示的表格:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepackage{pgfplotstable}
\usepackage{booktabs}
%
\begin{filecontents*}{table.dat}
a b c d e f g
1 Item1 alpha m 1 1 10
2 Item2 beta s 1.0 11 20
3 Item3 gamma kg 10.0 111 30
4 Item4 omega deg 10.00 1111 40
5 Item5 xi \% 10.99 11111 50
\end{filecontents*}
\begin{document}
\begin{figure}[hp]
\pgfplotstableread{testMod.dat}\loadTestTable
\pgfplotstabletypeset[
% header=false,
brackets/.style={%
postproc cell content/.append style={/pgfplots/table/@cell content/.add={\relax[}{]}},
},
greek/.style={%
postproc cell content/.append style={/pgfplots/table/@cell content/.add={\textbackslash}{}},
},
column type=r,
columns/a/.style={string type},
columns/b/.style={string type,column type=l},
columns/c/.style={string type,column type=l},
columns/d/.style={string type,column type=l},
columns/c/.append style={greek},
columns/d/.append style={brackets},
fixed,
fixed zerofill,
precision=2,
% dec sep align,
every head row/.style={%
output empty row,
before row={%
\toprule
No. & Item & Symbol & Unit & Column1 & Column2 & Column3\\
},
after row=\midrule,
},
every last row/.style={%
after row=\bottomrule}]{table.dat}
\end{figure}
\end{document}
我需要两样东西:
- 字符串中的空格,例如“第一行的项目”
- 自动设置希腊符号(注释掉行'columns/c/.style={string type,column type=l},'不起作用
谢谢您的任何建议!
保罗
答案1
正如 Jake 所说,CSV 正则表达式中臭名昭著的问题在于找出哪个空格被转义,哪个空格用作分隔符等。因此,如果您希望空格被尊重,那么请使用其他分隔符。但请确保添加trim cells
选项,否则您的数据和列名称将变得对空格敏感。
对于希腊字符,您可以使用$\csname #1 \endcsname$
构成#1
控制序列的语法,比如$\csname alpha \endcsname
变成\alpha
. (c)ontrol (s)equence name -->\csname
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\pgfplotsset{compat=1.8}
\pgfplotstableread[col sep=semicolon,trim cells]{
a ; b ; c ; d ;e ; f ; g
1 ; Item 1 ; alpha ; m ;1 ; 1 ; 10
2 ; Item 2 ; beta ; s ;1.0 ; 11 ; 20
3 ; Item 3 ; gamma ; kg ;10.0 ; 111 ; 30
4 ; Item 4 ; omega ; deg ;10.00 ; 1111 ; 40
5 ; Item 5 ; xi ; \% ;10.99 ; 11111 ; 50
}\loadTestTable
\begin{document}
\begin{table}
\pgfplotstabletypeset[
brackets/.style={%
postproc cell content/.append style={/pgfplots/table/@cell content/.add={\relax[}{]}},
},
greek/.style={%
preproc cell content/.append style={/pgfplots/table/@cell content/.add={$\csname}{\endcsname$}},
},
column type=r,
columns/a/.style={string type},
columns/b/.style={string type,column type=l},
columns/c/.style={string type,column type=l},
columns/d/.style={string type,column type=l},
columns/c/.append style={greek},
columns/d/.append style={brackets},
fixed,
fixed zerofill,
precision=2,
every head row/.style={%
output empty row,
before row={%
\toprule
No. & Item & Symbol & Unit & Column1 & Column2 & Column3\\
},
after row=\midrule,
},
every last row/.style={%
after row=\bottomrule}]{\loadTestTable}
\end{table}
\end{document}