Pgfplotstable und multirow

Pgfplotstable und multirow

Im folgenden Beispiel versuche ich, eine Tabelle pgfplotstablemit einer every even rowRegel zu setzen. Gibt es eine Möglichkeit, diese für bestimmte Spalten zu deaktivieren? Oder gibt es alternativ eine Möglichkeit, die Farbe der Zeilen bestimmter Spalten zu überschreiben?

\documentclass{article}
\usepackage{colortbl}
\usepackage{listings}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\pgfplotstabletypeset[
columns/Z/.style={
    column name={},
    assign cell content/.code={
        \ifnum\pgfplotstablerow=0
            \pgfkeyssetvalue{/pgfplots/table/@cell content}{\multirow{4}{*}{##1}}%
        \else
            \pgfkeyssetvalue{/pgfplots/table/@cell content}{}%
        \fi
    },
},
postproc cell content/.code={
    \ifodd\pgfplotstablerow\relax
    \else
        % ah - an even row number.
        \ifnum\pgfplotstablecol>0
            % ah - introduce a cell color:
            \pgfkeysalso{@cell content={\cellcolor[gray]{0.9}#1}}%
        \fi
    \fi
},
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=\bottomrule},
debug,
columns/a/.style={column name={A},
    column type={S[scientific-notation=engineering, round-precision=2, round-mode=places, table-format=2.2e1]}, string type,
},
row sep=\\, col sep=&]{% here: inline data in tabular format:
Z & a & b \\
data & 1.43 & 2 \\
     & 3.23 & 4 \\
     & 51231.2 & 6 \\
     & 0.007 & 8 \\
}
\end{document}

mwe

Ich möchte, dass die „Daten“ richtig angezeigt werden, ohne Grauzonen multicolumn.

EDIT: Ich habe mein MWE gemäß der Antwort geändert. Wie Sie sehen, stimmt siunitxjetzt etwas mit dem Paket nicht. Das liegt an der Verwendung #1im postproc, aber ich weiß nicht, wie ich das beheben kann.

BWO

Antwort1

Offenbar arbeiten \rowcolorsie \multirownicht gut zusammen.

Ich habe mit dem debugSchalter von experimentiert pgfplotstable, um zu überprüfen, ob dies tatsächlich der Fall ist. Eine Lösung scheint \cellcolorfür zu verwendenjedenZelle mit Hintergrundfarbe.

Normalerweise füge ich postproc cell contentdie entsprechenden \cellcolorAnweisungen ein (und ich habe sie every even rowauch in diesen Stil integriert – anscheinend ist every even rowdas postproc cell contentsnicht kombinierbar).

Hier ist die Lösung:

\documentclass{article}
\usepackage{colortbl}
\usepackage{listings}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\thispagestyle{empty}

\pgfplotstabletypeset[
    columns/Z/.style={
        column name={},
        assign cell content/.code={
            \ifnum\pgfplotstablerow=0
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{\multirow{4}{*}{##1}}%
            \else
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{}%
            \fi
        },
    },
    postproc cell content/.code={
        \ifodd\pgfplotstablerow\relax
        \else
            % ah - an even row number.
            \ifnum\pgfplotstablecol>0
                % ah - introduce a cell color:
                \pgfkeysalso{@cell content={\cellcolor[gray]{0.9}#1}}%
            \fi
        \fi
    },
    every head row/.style={before row=\toprule,after row=\midrule},
    every last row/.style={after row=\bottomrule},
    debug,
    row sep=\\, col sep=&]{% here: inline data in tabular format:
    Z & a & b \\
    data & 1 & 2 \\
         & 3 & 4 \\
         & 5 & 6 \\
         & 7 & 8 \\
}


\begin {tabular}{ccc}%
\toprule &a&b\\\midrule %
\rowcolor [gray]{0.9}\multirow {4}{*}{data}&\pgfutilensuremath {1}&\pgfutilensuremath {2}\\%
&\pgfutilensuremath {3}&\pgfutilensuremath {4}\\%
&\cellcolor [gray]{0.9}\pgfutilensuremath {5}&\cellcolor [gray]{0.9}\pgfutilensuremath {6}\\%
&\pgfutilensuremath {7}&\pgfutilensuremath {8}\\\bottomrule %
\end {tabular}%

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen