pgfplotstable: come utilizzare il valore di riga (colonna) letto per gli stili

Aug 17 2020

Voglio colorare una riga (colonna) da una cella con un contenuto speciale, ad esempio "x".

Ho provato a utilizzare
every nth row={\rememberrow}{before row=\rowcolor{orange}}, % WORKS NOT!
nella soluzione .

\xdef\remembercol{\pgfplotstablecol}%
\xdef\rememberrow{\pgfplotstablerow}%

si espande correttamente dopo pgfplotstabletypeset, ma non durante la composizione.

Cosa devo fare?

\documentclass[]{article}
\usepackage{colortbl}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\pgfplotstableset{string type, col sep=comma, header=false}
\pgfplotstableread[]{
a, b, c
d, e, f
g, x, i
j, k, l
}\mytable

\def\literalx{x}

\begin{document}
\pgfplotstabletypeset[
postproc cell content/.code={%
  \def\temp{#1}%
  \ifx\temp\literalx
    \xdef\remembercol{\pgfplotstablecol}%
    \xdef\rememberrow{\pgfplotstablerow}%
  \fi
}, 
%every nth row={\rememberrow}{before row=\rowcolor{orange}}, % WORKS NOT!
]{\mytable}

\textbf{Works:} x is in row no.~\rememberrow\ and column no.~\remembercol.
\end{document}

Risposte

cis Aug 18 2020 at 15:19

Con savebox e newcommand funziona:

\documentclass[]{article}
\usepackage{colortbl}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}

\pgfplotstableset{string type, col sep=comma, header=false}
\pgfplotstableread[]{
a, b, c
d, e, f
g, x, i
j, k, l
}\mytable

\colorlet{CellColor}{red}
\colorlet{RowColor}{orange}
\colorlet{ColColor}{pink}

\def\literalx{x}
\begin{document}

\pgfplotstableset{   myhighlights/.style={}    }
\newcommand\MyTable{%
\pgfplotstabletypeset[myhighlights,
postproc cell content/.code={%
  \def\temp{##1}% <--- !   '##',    not '#'
  \ifx\temp\literalx
    \xdef\remembercol{\pgfplotstablecol}%
    \xdef\rememberrow{\pgfplotstablerow}%
  \fi
}, 
]{\mytable}%
}

\newsavebox{\Mybox}
\savebox{\Mybox}{\MyTable}

\section{Raw Table}
\usebox{\Mybox}

\section{Read out row and column -- works}
x is in row no.~\rememberrow\ and column no.~\remembercol.


\section{Typeset highlighted Table -- works as well}
\pgfplotstableset{myhighlights/.style={%% =======
% Highlight Row:
every row no \rememberrow/.style={
before row={\rowcolor{RowColor}}        }, 
% Highlight Column:
every col no \remembercol/.style={
column type/.add={>{\columncolor{ColColor}}}{}       }, 
% Highlight Cell
every row no \rememberrow\space column no \remembercol/.style={  
@cell content/.add={\cellcolor{CellColor}}{},      },% <--- !  '\space'
}%% =======
}
\MyTable
\end{document}