在宏中直接使用 #1

在宏中直接使用 #1

这个帖子我发现了一些我现在经常使用的有效代码:

\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}

但是,我想创建一个 \newcommand 来实现这一点,但是它应该使用的表(此例中为 \data)是一个参数。

当然,这与 #1 的其他含义相冲突,即作为我的函数的第一个参数。有补救办法吗?

答案1

如果您引用的是宏中的宏的参数(/.code在本例中是在 内),则需要使用##1而不是#1

\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}

\pgfplotstableread{
  num       value
  1         2
  2         5
  1         3
  3         2
  1         4
  2         1
}\data

\newcommand{\filteredtable}[2]{
\pgfplotstabletypeset[row predicate/.code={%
  \pgfplotstablegetelem{##1}{num}\of{#1}
  \ifnum\pgfplotsretval=#2\relax
  \else\pgfplotstableuserowfalse\fi}]{#1}
}

\verb|\filteredtable{\data}{1}|

\filteredtable{\data}{1}\vspace{1cm}

\verb|\filteredtable{\data}{2}|

\filteredtable{\data}{2}

\end{document}

相关内容