TikZ:节点自动编号,\value{counterName}

TikZ:节点自动编号,\value{counterName}
\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}可以消除错误,但我无法理解问题是否已解决。

相关内容