\documentclass{standalone}
\usepackage{tikz}
\newcounter{xi}
\setcounter{xi}{0}
\newcommand{\foo}[0]{
\addtocounter{xi}{1};
\coordinate (x{\value{xi}}) at (1,2);
}
\begin{document}
\begin{tikzpicture}
\foo{};
\end{tikzpicture}
\end{document}
每次调用时\foo
我都希望初始化一个新节点,一个名为“xK”的新节点,其中 K 是每次调用时自动增加的计数器的值。
答案1
使用\coordinate (x\the\value{xi}) at (1,2);
。以下显示这两个节点确实是通过多次调用 创建的\foo{}
:
参考:
注释(感谢@GonzaloMedina):
- 无需将计数器设置为 0 - 在创建新计数器时会自动完成。
- 的定义
\foo
也可以这样给出:\newcommand{\foo}{\stepcounter{xi}\coordinate (x\the\value{xi}) at (1,2);}
。 - 无需
\foo
以分号结尾来调用。
话虽如此,我的个人的;
偏好是初始化计数器(编程习惯),并在每个语句后添加结尾tikzpicture
。我通常不会用 来终止 的定义,\foo
在这种情况下需要;
结尾。;
代码:
\documentclass{standalone}
\usepackage{tikz}
\newcounter{xi}
\setcounter{xi}{0}
\newcommand{\foo}[0]{
\addtocounter{xi}{1};
\coordinate (x\the\value{xi}) at (1,2);
}
\begin{document}
\begin{tikzpicture}
\foo{};
\foo{};
\node [circle, minimum size=3pt, inner sep=3pt, fill=blue ] at (x1) {};
\node [circle ,minimum size=6pt, inner sep=6pt, fill=red, fill opacity=0.5] at (x2) {};
\end{tikzpicture}
\end{document}
答案2
你的问题是?
运行您的代码时,我收到一条错误消息,因为\value{xi}
没有产生文本,而只是计数器本身。
\value{xi}
用替换\arabic{xi}
可以消除错误,但我无法理解问题是否已解决。