pgfplotstable - 条件行格式

pgfplotstable - 条件行格式

我正在使用 pgfplotstable 包创建和排版几个大型表格。我的挑战是根据数据中变量的值将几行加粗。

经过搜索、阅读和测试,我设法使列加粗、单元格加粗和行加粗(第一行、最后一行和特定行),但不以变量的值为条件。

在下面的小例子中,我希望 ID = 1 的行显示为粗体:

\documentclass{article}

\usepackage{pgfplotstable, booktabs}

\pgfplotsset{compat=1.7}

\begin{document}

\pgfplotstabletypeset[
    col sep= semicolon ,
    sci zerofill
]{
A;B;C;ID 
1;4;2;0 
2;1;6;1 
3;6;1;1 
4;2;3;1 
5;1;9;0 
6;4;2;0
}

\end{document}

编辑:

我没有在上面的示例中添加任何格式。因此,我在下面的 MWE 中添加了更多细节。后续问题是,在将指定的行设为粗体之前,如何保持指定的格式?

\documentclass[]{report}

\usepackage{pgfplotstable,booktabs, ifthen}

\pgfplotsset{compat=1.14}

\begin{document}

\pgfplotstableread[col sep= semicolon]{
A;B;C;ID 
C00;100;0.9;0
C01;31;16.9;1
C03;46;1;1 
C04;62;0.3;2 
C05;18;1.9;1 
C06;69;2.0;1
}\mytable

\pgfkeys{/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
set thousands separator={}
} 

\pgfplotstabletypeset[
    col sep = semicolon,
    columns = {A, B, C, ID },
    columns/A/.style={ string type, column type = {l}},
    columns/B/.style={ column type = {r}},
    columns/C/.style={ column type = {r}, precision = 1},
    columns/ID/.style={ column type = {r}, precision = 1},
    every column/.style={
        postproc cell content/.append code={
            \pgfplotstablegetelem{\pgfplotstablerow}{ID}\of{\mytable}
            \ifthenelse{ \pgfplotsretval < 2 }{
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{\bfseries##1}
            }
            {
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{##1}
            } 
        }
    }
    ]{\mytable}

\end{document}

答案1

这是一种可能性。

  • 使用 将内联表读入宏\pgfplotstableread,以便能够使用 引用表中的元素\pgfplotstablegetelem

  • \pgfplotstablegetelem{\pgfplotstablerow}{[index]3}\of{\mytable}\pgfplotstablerow返回宏中当前行(存储在)的第四列(= 索引为 3 的列)的值\pgfplotsretval

enter image description here

\documentclass{article}

\usepackage{pgfplotstable, booktabs,ifthen}
\pgfplotsset{compat=1.7}

\begin{document}
\pgfplotstableread[col sep= semicolon]{
A;B;C;ID 
1;4;2;0 
2;1;6;1 
3;6;1;1 
4;2;3;1 
5;1;9;0 
6;4;2;0
}\mytable

\pgfplotstabletypeset[
    sci zerofill,
    every column/.style=
     {assign cell content/.code=
       {\pgfplotstablegetelem{\pgfplotstablerow}{[index]3}\of{\mytable}%
        \ifthenelse{\equal{\pgfplotsretval}{1}}%
          {\pgfkeyssetvalue{/pgfplots/table/@cell content}{\bfseries##1}}%
          {\pgfkeyssetvalue{/pgfplots/table/@cell content}{##1}}%
       }
     }
]{\mytable}
\end{document}

相关内容