Pgfplotstable + Multicol-一列中的文本和数字值

Pgfplotstable + Multicol-一列中的文本和数字值

我目前正在试验这个pgfplotstable包,并且正在研究我想要用于我的表的默认设置。

如果我的表格包含文本和数值,就会出现问题。我设法区分了这两种情况,剩下的唯一问题是列中文本的对齐方式。
问题是我想使用该dec sep align选项来正确格式化我的数值。

在……的帮助下这个问题我设法将文本放入表格中,而不会干扰其他单元格。
问题是文本现在总是放在左侧“子单元格”中,如果同一列中有数字,文本将向左移动,以便为该数字的小数腾出空间。

我认为我可以通过简单地使我的文本单元格跨越两列(以便它使用两个“子单元格”)来避免此问题\multicolumn{2}{c}{#1}(见下文)。但是,当我尝试这样做时,插入的内容&不会被解释为表格的一部分,并且 LaTex 告诉我:

Extra alignment tab has been changed to \cr. 

这是我正在使用的代码:

\documentclass{article}

\usepackage{filecontents}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{xstring}
\usepackage{multicol}

\pgfplotstableset{
    col sep = comma,
    dec sep align={c},
    every head row/.style={before row=\toprule,after row=\midrule},
    every last row/.style={after row=\bottomrule},
    /pgfplots/table/assign cell content/.code={
        \IfDecimal{#1}{
            % format as number
            \pgfkeyssetvalue{/pgfplots/table/@cell content}{\pgfutilensuremath{\pgfmathprintnumber{#1}}}
        }{
            % use as String -> add second col in order to unmess dec sep align
            \ifnum\pgfplotstablepartno=0%
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{\multicolumn{2}{c}{#1}}
                \pgfkeys{/pgfplots/table/@cell content/.add={}{&}}
            \fi
        }
    },
}

\begin{document}
    \begin{filecontents}{Sample.csv}
        Col 1, Col 2, Col 3, Col 4, Col 5, Col 6, Col 7
        1.34, 2.73, 358000, 0.003, 5, 1500, 0.000374
        1.34, 2.73, 358000, 0.003, 7, 1325.4, 0.012356
        1.34, 2.734, 358000, 0.003, 12, 998.331, 0.12345
        1.34, 5.073, 358000, 0.003, 17, 12353.274583, 0.0505134567
        1.34, 22.77, 358000, test, 356, 9999.99, 0.3
    \end{filecontents}

    \pgfplotstabletypeset {Sample.csv}
\end{document}

所以我的问题是:如何才能让我的文本位于列的中心(位于两个“子单元格”的中心)?

答案1

我发现了这个问题:使用时\multicol我根本不需要额外的对齐选项卡。

因此代码必须如下所示:

\documentclass{article}

\usepackage{filecontents}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{xstring}
\usepackage{multicol}

\pgfplotstableset{
    col sep = comma,
    dec sep align={c},
    every head row/.style={before row=\toprule,after row=\midrule},
    every last row/.style={after row=\bottomrule},
    /pgfplots/table/assign cell content/.code={
        \IfDecimal{#1}{
            % format as number
            \pgfkeyssetvalue{/pgfplots/table/@cell content}{\pgfutilensuremath{\pgfmathprintnumber{#1}}}
        }{
            % use as String -> add second col in order to unmess dec sep align
            \ifnum\pgfplotstablepartno=0%
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{\multicolumn{2}{c}{#1}}
            \fi
        }
    },
}

\begin{document}
    \begin{filecontents}{Sample.csv}
        Col 1, Col 2, Col 3, Col 4, Col 5, Col 6, Col 7
        1.34, 2.73, 358000, 0.003, 5, 1500, 0.000374
        1.34, 2.73, 358000, 0.003, 7, 1325.4, 0.012356
        1.34, 2.734, 358000, 0.003, 12, 998.331, 0.12345
        1.34, 5.073, 358000, 0.003, 17, 12353.274583, 0.0505134567
        1.34, 22.77, 358000, test, 356, 9999.99, 0.3
    \end{filecontents}

    \pgfplotstabletypeset {Sample.csv}
\end{document}

相关内容