我需要从表中排除第 0、3、6...行。\pgfmathparse{Mod(#1, 3) == 0}
内部不起作用row predicate/.code={}
,它出现以下错误:
! Package PGF Math Error: Sorry, the operation 'Mod' has not yet been implemented in the floating point unit :-( (in 'Mod(0, 3) == 0').
我从另一个问题复制了以下 MWE。我想根据行的索引而不是它们的值来排除行。
\documentclass{minimal}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
num value
1 2
2 5
1 3
3 2
1 4
2 1
}\data
\pgfplotstabletypeset[row predicate/.code={%
\ifnum\pgfplotstablegetelem{#1}{num}\of{\data}=1\relax
\else\pgfplotstableuserowfalse\fi}]{\data}
\end{document}
答案1
如果要过滤每第 n 行,可以使用\pgfmathparse{int(mod(#1,3))}
(注意小写m
),然后使用\ifnum\pgfmathresult>0\relax
来检查是否使用该行:
\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
num value
1 2
2 5
1 3
3 2
1 4
2 1
}\data
\pgfplotstabletypeset[row predicate/.code={%
\pgfplotstablegetelem{#1}{num}\of{\data}
\pgfmathparse{int(mod(#1,3))}
\ifnum\pgfmathresult>0\relax
\else\pgfplotstableuserowfalse\fi}]{\data}
\end{document}
如果您想按价值单元格,如您的代码示例所示,您需要稍微调整代码:
该\pgfplotstablegetelem
宏不会展开到其返回值;相反,它将返回值写入名为 的宏\pgfplotsretval
。如果在条件中使用该宏\ifnum
,它将按预期工作:
\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
num value
1 2
2 5
1 3
3 2
1 4
2 1
}\data
\pgfplotstabletypeset[row predicate/.code={%
\pgfplotstablegetelem{#1}{num}\of{\data}
\ifnum\pgfplotsretval=1\relax
\else\pgfplotstableuserowfalse\fi}]{\data}
\end{document}