Dec sep align 和字符串类型单元格不兼容?

Dec sep align 和字符串类型单元格不兼容?

我想使用 包含文本的某些单元格dec sep align的功能。我尝试了以下方法:pgfplotstable

\documentclass{article}

\usepackage{pgfplotstable}
\usepackage{booktabs}

\begin{document}

\pgfplotstabletypeset[%
col sep=&, row sep=\\,header=false,
every head row/.style={before row={\toprule}, after row={\midrule}},
every last row/.style={after row=\bottomrule},
display columns/0/.style={column name={A}, string type, column type={l}},
display columns/1/.style={column name={B}, dec sep align={l}},
display columns/2/.style={column name={C}, dec sep align={l}},
every row 2  column 1/.style={string type},
every row 3  column 1/.style={string type},
]
{%
  Xyzzy ! &     208.5  &   42.01  \\
  Nothing &    7.91  &   42.1  \\
  Happens &     --   &   200.2 \\
  \ldots  &      z   &  4.54 \\
}
\end{document}

但结果却是这样的:

越野车桌

您知道为什么文本单元格与下一个单元格之间的分隔线会被吞没吗?我该如何纠正这种行为?我欢迎任何可以制作正确间距表格(小数点分隔符对齐)的建议,即使我必须放弃那个pgfplotable特定的表格。但我宁愿坚持下去,这样我就可以保留大部分表格。

我放弃了之前的编辑,提出了另一个问题(看这里)因为担心把它们放在一起会让人感到困惑

答案1

dec sep align其列拆分为两个子列(小数点分隔符之前和之后的数字部分各一个)。通常,pgfplotstable检查单元格中的数字是否有小数点分隔符,如果没有,则添加一个空单元格作为小数部分的占位符。当您设置为单个单元格时,不会进行该检查,也不会添加string type占位符单元格(只是一个)。但是,仍然假设列始终包含两个单元格,因此将使用下一列的第一个单元格而不是占位符单元格。&pgfplotstabledec sep align

因此,我们必须手动添加一个空的占位符单元格。我们不能直接&在表格中的字符串后面添加一个,因为这会使列计数偏离,所以我们必须更狡猾一些:有一个postproc cell content键,它允许我们在处理完单元格后向其中添加内容。&不过,在这里只添加一个也行不通,因为那会增加两个&s(因为如上所述,pgfplotstable仍然假设一列中有两个单元格dec sep align,并且postproc cell content这两个单元格都会执行该键)。幸运的是,有一个名为的宏\pgfplotstablepartno包含当前“子单元格”的索引,它用于小数分隔符0之前的部分和1之后的部分。这可以在一个中用于\ifnum仅添加一个&

用新的方式包装它,我们得到

\pgfkeys{
    /pgfplots/table/string type in dec sep align/.style={
        string type,
        postproc cell content/.code={%
            \ifnum\pgfplotstablepartno=0%
                \pgfkeys{/pgfplots/table/@cell content/.add={}{&}}
            \fi
        }%
    }
}

这允许我们将列中的单个单元格设置dec sep alignstring type in dec sep align。这将产生所需的输出:

\documentclass{article}

\usepackage{pgfplotstable}
\usepackage{booktabs}



\begin{document}

\pgfkeys{
    /pgfplots/table/string type in dec sep align/.style={
        string type,
        postproc cell content/.code={%
            \ifnum\pgfplotstablepartno=0%
                \pgfkeys{/pgfplots/table/@cell content/.add={}{&}}
            \fi
        }%
    }
}

\pgfplotstabletypeset[%
col sep=&, row sep=\\,header=false,
every head row/.style={before row={\toprule}, after row={\midrule}},
every last row/.style={after row=\bottomrule},
display columns/0/.style={column name={A}, string type, column type={l}},
display columns/1/.style={column name={B}, dec sep align},
display columns/2/.style={column name={C}, dec sep align},
every row 2  column 1/.style={string type in dec sep align},
every row 3  column 1/.style={string type in dec sep align},
]
{%
  Xyzzy ! &     208.5  &   42.01  \\
  Nothing &    7.91  &   42.1  \\
  Happens &     --  &   200.2 \\
  \ldots  &      z   &  4.54 \\
}
\end{document}

相关内容