PGFPLOTSTABLE 配置,标题的粗体样式、特定行以及 CSV 的特定格式

PGFPLOTSTABLE 配置,标题的粗体样式、特定行以及 CSV 的特定格式

我开始使用 pgfplotstable 包,因为它似乎是一个强大的工具并且能够做我想要做的事情。

我正在导入自定义 CSV,由于这些 CSV 会随时间而变化,我需要使用条件格式绘制相应的表格。我设法让 95% 符合我的要求,但像往常一样,最后 5% 却很难实现。

以下是 MWE:

\documentclass{report}
\usepackage{pgfplotstable}
\usepackage{booktabs}

\begin{document}

\pgfplotstableread[col sep=comma]{test.csv}\table

\pgfplotstableset{
    bold/.append style={
        postproc cell content/.append code={
                \pgfkeysalso{@cell content=\textbf{##1}}%
        },
    },
    bold last row/.style={
        postproc cell content/.append code={
            \count0=\pgfplotstablerow
            \advance\count0 by1
            \ifnum\count0=\pgfplotstablerows
                \pgfkeysalso{@cell content=\textbf{##1}}%
            \fi
        },
    },
}

\begin{center}
\pgfplotstabletypeset[
string type,
% bolding the first row of data, and then the 4th, and finally the last one
every row 0 column 0/.style={bold},
every row 0 column 1/.style={bold},
every row 0 column 2/.style={bold},
every row 3 column 0/.style={bold},
every row 3 column 1/.style={bold},
every row 3 column 2/.style={bold},
bold last row,
%columns/0/.style={dec sep align, precision=3} % this doesn't work the way it is
%columns/1/.style={dec sep align, precision=3} % this doesn't work the way it is
%columns/2/.style={dec sep align, precision=3} % this doesn't work the way it is
every head row/.style={before row={\toprule},after row={\midrule}},
every last row/.style={before row={\midrule},after row={\toprule}},
]\table
\end{center}
\end{document} 

此外,所需的 test.csv 如下所示:

Header 1,Header 2,Header 3
Cat 1 total,12767849.250,14470789.000
cat 1.1,5545718.200,NA
cat 1.2,7222131.050,NA
cat 2 total,3496774.665,5937501.000
cat 2.1,939910.000,NA
cat 2.2,856060.565,NA
cat 2.3,839982.000,NA
cat 2.4,433976.100,NA
cat 2.5,426846.000,NA
grand total,16264623.915,20408290.000

我还想做以下事情:

  • 粗体标题

  • 正如您所看到的,‘cat 2 total’这一行是故意用粗体显示的,但我还需要在这一行之前加一个中间规则。

  • 第一列(标题 1)需要为 l 类型(左对齐)

  • 其他列需要为“dec sep align”(按小数点分隔符对齐)类型,并且我需要能够选择我想要的精度级别。我以为代码中的注释行可以做到这一点,但它没有做到,而且会干扰其他内容。

  • 最后,我选择在没有值的地方输入“NA”,但也许有更好的方法?将单元格留空?

我猜对于知道如何做的人来说这很容易,所以提前感谢您的帮助。

编辑 1:更新

我稍微修改了上面的代码,现在使用下面的代码

\begin{center}
\pgfplotstabletypeset[
display columns/0/.style={
    column name={\textbf{Column 1}},column type = {l},string type
  },
display columns/1/.style={
    column name={\textbf{Column 2}},fixed,column type = {r}
  },
display columns/2/.style={
    column name={\textbf{Column 3}},fixed,column type = {r}
  },
% bolding the first row of data, and then the 4th, and finally the last one
every row 0 column 0/.style={bold},
every row 0 column 1/.style={bold},
every row 0 column 2/.style={bold},
every row 3 column 0/.style={bold},
every row 3 column 1/.style={bold},
every row 3 column 2/.style={bold},
bold last row,
every head row/.style={before row={\toprule},after row={\midrule}},
%every row no/3/.style={before row=\midrule} %that will break the head row ruling...
every last row/.style={before row={\midrule},after row={\toprule}},
]\tableone
\captionof{table}{Tonnes dumped per location}
\end{center}

通过定义列名、类型和内容,我还可以使用粗体显示标题,但这可能不是最好的方法......这样,我应该能够使用评论中的建议的十进制分隔符对齐和精度。但是,加粗后无法正常工作。它似乎会选择采用正确的格式(“固定”参数)而不加粗,或者加粗但不格式化为其他数字......我确信我在这里遗漏了一些东西。请注意,我只是想让“固定”在加粗或不加粗时都能工作,目前使用 flush 来处理对齐问题。理想情况下,当我让它按照我想要的方式工作时,我会使用精度和十进制分隔符对齐。

另外,我可以在第 3 行之前获得中间规则,但是如果我这样做(使用上面代码中的注释行),它会破坏“每个头行”代码,因为它不是第 3 行......

所以我剩下的两个问题是:

  1. 我想要第 3 行之前的中间规则,但希望保留头部和最后一行的格式。

  2. 我希望数字按原样对齐,包括加粗时。粗体功能似乎会覆盖 dec sep align 设置。

感谢您的帮助。

相关内容