我需要使用计数器动态创建 TiKz 中节点的 ID,以便我可以根据前一个节点定位新节点。计数器的创建方式如下,并且会随着每个新节点而增加:
\documentclass[10pt]{article}
\begin{document}
\thispagestyle{empty}
\newcounter{nojobs}\setcounter{nojobs}{0}
动态创建 TiKz 节点的命令定义如下(此命令可以根据需要多次调用):
\newcommand{\job}[7]{
\stepcounter{nojobs}
\node [
regular polygon,
regular polygon sides=3,
fill=headergray,
anchor=north,
shift={(+0.0cm,+0.0cm)},
minimum width=\tipheight,
minimum height=\tipheight,
shape border rotate=90
]
(__job_\value{nojobs})
at
(__job_\the\numexpr\value{nojobs}-1\relax.south)
{};
}
问题是,每当调用该命令时,LaTeX 都会说:
! Undefined control sequence.
\job ...par \par \stepcounter {nojobs} \par \node
- 这是解决问题的正确方法吗?还有其他解决方案吗?
- 计数器变量能这样使用吗?
- 计数器变量可以减少并用于计算前一个节点 ID 吗?
答案1
您的方法是有效的 —— 原则上。以下是使其发挥作用的第一步。唯一真正的“改进”是使用\pgfmathtruncatemacro
。
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning,backgrounds,shapes}
\thispagestyle{empty}
\newcounter{nojobs}\setcounter{nojobs}{0}
\newcommand{\job}[7]{
\stepcounter{nojobs}
\pgfmathtruncatemacro{\ni}{\value{nojobs}}
\pgfmathtruncatemacro{\nj}{\value{nojobs}-1}
\node
[
regular polygon,
regular polygon sides=3,
% fill=headergray,
anchor=north,
shift={(+0.0cm,+0.0cm)},
% minimum width=\tipheight,
% minimum height=\tipheight,
shape border rotate=90
]
(jobnode\ni)
at
(jobnode\nj.south)
{#1};
}
\begin{document}
\tikz{\node (jobnode0) at (0,0) {};\job1234567\job2345678}
\end{document}
我的水晶球坏了,所以我不得不注释掉一些没有可编译的 MWE 就不知道的选项。
编辑:我删去了.0
我答案早期版本中返回的浮点数,并使用注释来这个问题。