如何修复新 Tikz 命令定义中的非法参数数量?

如何修复新 Tikz 命令定义中的非法参数数量?

这小段代码不起作用。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
%
\newcommand{\Stack}{
\begin{tikzpicture}[stack/.style={rectangle split, rectangle split parts=#1,draw, anchor=center}]
\node[stack=3]  {
\nodepart{one}\texttt{int} 1
\nodepart{two}\texttt{int} 2
\nodepart{three}\texttt{int} 3
};
\end{tikzpicture}
}
\begin{document}
\Stack
\end{document}

它给出了以下错误:

\Stack 定义中的参数数量非法。1 l.18 }

代码已经过测试,其他方面运行良好。有人能帮忙吗?

答案1

这里的问题是,当你#1\newcommand定义中使用它时,它被解释为宏本身的参数,并且你需要指定你的宏应该接受多少个参数。例如,如果你定义

\newcommand\foo{#1}

会抛出同样的错误。正确的定义应该是

\newcommand\foo[1]{#1}

其中[1],该宏采用一个强制参数,我认为默认值为零,您可以将宏称为

\foo{bar}

当您有一个带参数的样式时,这(可能)类似于在 的定义内有第二个宏定义\Stack。因此,要使#1属于该样式,您需要使用##1,正如 daleif 所提到的。double#表示参数用于“内部”宏。请参阅参数中的双井号(数字符号,哈希字符)##1 是什么意思?以进行更多讨论。

但在您的情况下,您似乎总是对该样式使用相同的参数( ),因此将样式定义修改为而不是,并在节点中更改为3可能更有意义。rectangle split parts=3rectangle split parts=#1stack=3stack

相关内容