为什么 \newcommand 忽略这个参数?

为什么 \newcommand 忽略这个参数?

该代码运行良好:

\documentclass{amsart}
\usepackage{tikz}
\newcommand{\putnode}[1]{\node at (#1,0) (A) {A};}
\begin{document}
\begin{tikzpicture}
\putnode(0);
\node at (0,1) (a) {a};
\node at (1,1) (b) {b};
\node at (2,1) (c) {c};
\node at (3,1) (d) {d};
\end{tikzpicture}
\end{document}

但无论我给 \putnode 什么参数,它都会将 A 置于 (1,0)。我认为上面的代码会将 A 置于 (0,0),因为 #1 被替换为 0。我做错了什么?

答案1

\documentclass{amsart}
\usepackage{tikz}
\newcommand{\putnode}[1]{\node at (#1,0) (A) {A};}
\begin{document}
\begin{tikzpicture}
\putnode{0}
\node at (0,1) (a) {a};
\node at (1,1) (b) {b};
\node at (2,1) (c) {c};
\node at (3,1) (d) {d};
\end{tikzpicture}
\end{document}

您有一个额外的;并且宏参数{}没有被分隔()

答案2

\putnode(0);如果您确实希望使用该格式,\def则可以使用\newcommand并提供合适的参数文本:

\def\putnode(#1);{\node at (#1,0) (A) {A};}

这个定义\putnode为期望(在它之后有一个,然后它将所有内容读取到下一个)作为第一个参数,最后期望一个;

请注意,没有完全相同的字符将触发普通 LaTeX 用户可能会感到困惑的纯 TeX 错误。它也不像 TikZ 代码那样简单,因此不允许在)和之间留空格。但是,您可以在定义中;删除这两个,在宏使用后选择。;\node;

相关内容