
Ampliando el tema tratado enpgfplotstable: ¿cómo puedo cambiar el color del contenido de una celda manteniendo el estilo?, correctamente resuelto por@frougon, Necesito cambiar el color de una sola celda en string style
, uso siunitx
para redondear números string style
en type column={S}
.
\documentclass{scrbook}
\usepackage[table]{xcolor}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{
round-mode = places,
round-precision = 2, % precisión
}
\begin{filecontents*}{my-data.csv}
c1 & c2 & c3
Story4 & 33.7835 & 33.7878
Story3 & 38.4334 & 38.4334
Story2 & 37.7156 & 37.7156
Story1 & 38.4056 & 38.4034
\end{filecontents*}
\pgfplotstableread[col sep=&]{my-data.csv}\myLoadedTable
\begin{document}
\begin{table}
\pgfplotstabletypeset[
display columns/0/.style={column type={c},
column name=\textbf{$Story$}, string type},
display columns/1/.style={column type={S},
column name=\textbf{$U_x$}, string type},
display columns/2/.style={column type={S},
column name=\textbf{$U_y$},string type},
every head row/.style={before row={\toprule},after row=\midrule},
every last row/.style={after row={\bottomrule}},
my special cell/.style={@cell content=\textcolor{blue}{#1}},
every row 3 column 2/.append style={
postproc cell content/.append style={
my special cell/.expanded={%
\pgfkeysvalueof{/pgfplots/table/@cell content}%
},
},
},]{\myLoadedTable}
\end{table}
\end{document}
al cambiar el estilo de una celda, el redondeo deja de tener efecto, obtengo:
Respuesta1
Todo lo que necesitas es usar my special cell/.style={@cell content=\color{blue}#1}
.
\documentclass{scrbook}
\usepackage[table]{xcolor}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{
round-mode = places,
round-precision = 2, % precisión
}
\begin{filecontents*}{my-data.csv}
c1 & c2 & c3
Story4 & 33.7835 & 33.7878
Story3 & 38.4334 & 38.4334
Story2 & 37.7156 & 37.7156
Story1 & 38.4056 & 38.4034
\end{filecontents*}
\pgfplotstableread[col sep=&]{my-data.csv}\myLoadedTable
\begin{document}
\begin{table}
\pgfplotstabletypeset[
display columns/0/.style={column type={c},
column name=\textbf{$Story$}, string type},
display columns/1/.style={column type={S},
column name=\textbf{$U_x$}, string type},
display columns/2/.style={column type={S},
column name=\textbf{$U_y$},string type},
every head row/.style={before row={\toprule},after row=\midrule},
every last row/.style={after row={\bottomrule}},
my special cell/.style={@cell content=\color{blue}#1},
every row 3 column 2/.append style={
postproc cell content/.append style={
my special cell/.expanded={%
\pgfkeysvalueof{/pgfplots/table/@cell content}%
},
},
},]{\myLoadedTable}
\end{table}
\end{document}
APÉNDICE: Si desea jugar con el peso de la fuente, etc., es posible que desee indicarle siunitx
que no lo ignore. Una forma de hacerlo es agregar la detect-all=true
opción a \sisetup
.
\documentclass{scrbook}
\usepackage[table]{xcolor}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{
round-mode = places,
round-precision = 2, % precisión
detect-all=true
}
\begin{filecontents*}{my-data.csv}
c1 & c2 & c3
Story4 & 33.7835 & 33.7878
Story3 & 38.4334 & 38.4334
Story2 & 37.7156 & 37.7156
Story1 & 38.4056 & 38.4034
\end{filecontents*}
\pgfplotstableread[col sep=&]{my-data.csv}\myLoadedTable
\begin{document}
\begin{table}
\pgfplotstabletypeset[
display columns/0/.style={column type={c},
column name=\textbf{$Story$}, string type},
display columns/1/.style={column type={S},
column name=\textbf{$U_x$}, string type},
display columns/2/.style={column type={S},
column name=\textbf{$U_y$},string type},
every head row/.style={before row={\toprule},after row=\midrule},
every last row/.style={after row={\bottomrule}},
my special cell/.style={@cell content=\color{blue}\bfseries#1},
every row 3 column 2/.append style={
postproc cell content/.append style={
my special cell/.expanded={%
\pgfkeysvalueof{/pgfplots/table/@cell content}%
},
},
},]{\myLoadedTable}
\end{table}
\end{document}
Respuesta2
Tenga en cuenta que actualicé elotra respuestautilizar el \pgfkeysgetvalue{/pgfplots/table/@cell content}{...}
enfoque en lugar my special cell/.expanded={...}
de recuperar el contenido de la celdasin expandirlo demasiado temprano,antes de envolverlo dentro \textcolor
.
Parece posible usarlo siunitx
con pgfplotstable
, 1 , sin embargo, siunitx
no se menciona en el pgfplotstable
manual. Por lo tanto, por ahora, solo propondré el enfoque mencionado allí, que es utilizar /pgfplots/table/dec sep align
. De forma predeterminada, esto utiliza el centrado horizontal dentro de la columna, pero puede especificar un tipo de alineación diferente con dec sep align=l
o dec sep align=r
. Aquí vamos. :-)
\documentclass{article}
\usepackage{xcolor}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.16}
\usepackage{booktabs}
\begin{filecontents*}{my-data.csv}
c1 & c2 & c3
Story4 & 33.7835 & 33.7878
Story3 & 38.4334 & 38.4334
Story2 & 37.7156 & 37.7156
Story1 & 38.4056 & 38.4034
\end{filecontents*}
\pgfplotstableread[col sep=&]{my-data.csv}\myLoadedTable
\begin{document}
\pgfplotstabletypeset[
my numeric col/.style={fixed, fixed zerofill, precision=2, dec sep align},
columns/c1/.style={column type={c}, column name=\textbf{Story}, string type},
columns/c2/.style={my numeric col, column name=$U_x$},
columns/c3/.style={my numeric col, column name=$U_y$},
every head row/.style={before row={\toprule},after row=\midrule},
every last row/.style={after row={\bottomrule}},
my special cell/.style={@cell content=\textcolor{blue}{#1}},
every row 3 column 2/.append style={
postproc cell content/.append code={%
\pgfkeysgetvalue{/pgfplots/table/@cell content}{\myTmpCellContents}%
\pgfkeysalso{my special cell/.expand once={\myTmpCellContents}}%
},
}]{\myLoadedTable}
\end{document}
Nota