该代码运行良好:
\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
;