pgfplotstable 管理字符串和值

pgfplotstable 管理字符串和值

我喜欢使用 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}

我需要两样东西:

  1. 字符串中的空格,例如“第一行的项目”
  2. 自动设置希腊符号(注释掉行'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}

在此处输入图片描述

相关内容