Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I am trying to add an asterisk to the content of certain cells depending on the cell's content (essentially, adding a marker for significant p-values) but I am having trouble trying to do so on a per-column rather than per-table basis. I adapted an answer to a similar question that colours cells based on their numerical value but that seems to only work when applied to the whole table. If I try to apply the style to a single column (uncommenting the two lines in the example below), I get a Missing number, treated as zero. error that seems to expect a number after the closing square bracket instead of the file name.

\pgfplotstabletypeset [assume math mode=false,
%  columns/a/.style={ % Uncommenting causes #1 to be empty
    postproc cell content/.style={
      /pgfplots/table/@cell content/.add={}{%
        \pgfmathparse{int(less(#1,\bordervalue))}
        \ifnum\pgfmathresult=1
           $^*$
        \else
           $^\dagger$
        \fi
      },
    },
%  },
]{mwe.dat}

Applying postproc cell content/.style to the whole table

This seems to be because, once I wrap the postproc cell content style in a column style, it no longer has access to the contents of that cell. #1, @unprocessed cell content, @cell content after rowcol styles, and @preprocessed cell content all equate to nothing, while @cell content always equates to the content of the very last cell of the whole table.

% #1 is empty when wrapped in a column style
\pgfplotstabletypeset [assume math mode=false,
  columns/a/.style={
    postproc cell content/.style={
      /pgfplots/table/@cell content/.add={}{#1},
    },
  },
]{mwe.dat}

#1 is empty in postproc cell content when wrapped in a column style

% @cell content contains the last cell of the whole table
\pgfplotstabletypeset [assume math mode=false,
  columns/a/.style={
    postproc cell content/.style={
      /pgfplots/table/@cell content/.add={}{\pgfkeysvalueof{/pgfplots/table/@cell content}},
    },
  },
]{mwe.dat}

@cell content contains the last cell of the whole table

Results are similar when using .code instead of .style:

% Using .code, @cell content still only contains the very last cell of the table
\pgfplotstabletypeset [assume math mode=false,
  columns/a/.style={
    postproc cell content/.code={%
      \pgfkeyssetvalue{/pgfplots/table/@cell content}{\pgfkeysvalueof{/pgfplots/table/@cell content}}%
    },
  },
]{mwe.dat}

Using .code instead of .style, @cell content still only contains the very last cell of the table.

Full MWE:

\documentclass{article}
\usepackage{filecontents}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\pgfplotsset{compat=1.7}

\begin{filecontents}{mwe.dat}
a         b         c         d         e
1.7333    1.6472    1.5418    1.4682    1.5740  
1.1525    1.2878    1.2652    1.3511    1.5102  
1.2181    1.1500    1.2220    1.2425    1.5699  
0.9786    1.1051    1.1472    1.3096    1.6757  
0.9569    0.9190    1.0433    1.2924    1.4867  
\end{filecontents}

\pgfplotstableset{
  every head row/.style={before row=\toprule,after row=\midrule},
  every last row/.style={after row=\bottomrule},
}

\begin{document}

\def\bordervalue{1.4}
\pgfplotstabletypeset [assume math mode=false,
%  columns/a/.style={
    postproc cell content/.style={
      /pgfplots/table/@cell content/.add={}{%
        \pgfmathparse{int(less(#1,\bordervalue))}
        \ifnum\pgfmathresult=1
           $^*$
        \else
           $^\dagger$
        \fi
      },
    },
%  },
]{mwe.dat}

\bigskip 

\pgfplotstabletypeset [assume math mode=false,
  columns/a/.style={
    postproc cell content/.style={
      /pgfplots/table/@cell content/.add={}{\pgfkeysvalueof{/pgfplots/table/@cell content}},
    },
  },
]{mwe.dat}

\bigskip 

\pgfplotstabletypeset [assume math mode=false,
  columns/a/.style={
    postproc cell content/.append code={%
      \ifnum\pgfplotstablerow=0
        \pgfkeyssetvalue{/pgfplots/table/@cell content}{\pgfkeysvalueof{/pgfplots/table/@cell content}}%
      \fi
    },
  },
]{mwe.dat}

\end{document}
share|improve this question

1 Answer 1

up vote 6 down vote accepted

You can just use ##1 instead of #1 in your first approach:

\documentclass{article}
\usepackage{filecontents}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\pgfplotsset{compat=1.7}

\begin{filecontents}{mwe.dat}
a         b         c         d         e
1.7333    1.6472    1.5418    1.4682    1.5740  
1.1525    1.2878    1.2652    1.3511    1.5102  
1.2181    1.1500    1.2220    1.2425    1.5699  
0.9786    1.1051    1.1472    1.3096    1.6757  
0.9569    0.9190    1.0433    1.2924    1.4867  
\end{filecontents}

\pgfplotstableset{
  every head row/.style={before row=\toprule,after row=\midrule},
  every last row/.style={after row=\bottomrule},
}

\begin{document}

\def\bordervalue{1.4}
\pgfplotstabletypeset [assume math mode=false,
columns/a/.style={
    postproc cell content/.style={
      /pgfplots/table/@cell content/.add={}{%
        \pgfmathparse{int(less(##1,\bordervalue))}
        \ifnum\pgfmathresult=1
           $^*$
        \else
           $^\dagger$
        \fi
      },
    },
},
]{mwe.dat}


\end{document}
share|improve this answer
    
It had to be something very simple ... Would you mind explaining what the difference between #1 and ##1 is in this case and/or in general? –  ThomasH Mar 1 '13 at 17:26
2  
It allows you to access the arguments of a nested macro: tex.stackexchange.com/questions/42463/… –  Jake Mar 1 '13 at 17:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.