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}