这小段代码不起作用。
\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=3
rectangle split parts=#1
stack=3
stack