pgfplotstable: Como usar a leitura do valor da linha (coluna) para estilos
Aug 17 2020
Quero colorir uma linha (coluna) de uma célula com conteúdo especial, por exemplo, 'x'.
Tentei usar
every nth row={\rememberrow}{before row=\rowcolor{orange}}, % WORKS NOT!
na solução .
\xdef\remembercol{\pgfplotstablecol}%
\xdef\rememberrow{\pgfplotstablerow}%
expande corretamente após o pgfplotstabletypeset
, mas não durante a composição.
O que eu tenho que fazer?
\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}
Respostas
cis Aug 18 2020 at 15:19
Com savebox e newcommand funciona:

\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}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas