我正在使用\foreach
命令在 TikZ 中生成一个图形,使用宏动态设置节点值(改编自这个问题:TikZ:使用循环绘制节点网格)。
现在,我想稍后在文档中重复使用节点的标签,但它们似乎没有被存储(请参阅是否可以引用节点标签并重新使用它来标记 tikz 中的其他节点?)。因此我需要以某种方式使用宏来存储标签。
是否有可能以某种方式动态生成宏/变量的名称(例如\label1
,,\label2
......,\labelN
),然后用来\pgftruncatemacro{\myLabel}{...}
在其中存储值?
这是我的代码示例(当然我还没有执行上述操作)。我已经指出了相关部分。我本质上想要获取由\x
和索引的变量,\y
以便稍后可以将它们用作“ \label\x\y
”:
\documentclass{minimal}
\usepackage{tikz}
\tikzset{mainstyle/.style={circle,draw,fill=gray!40,minimum size=20}}
\begin{document}
\begin{tikzpicture}
\def\xmin{1}
\def\xmax{4}
\def\ymin{1}
\def\ymax{5}
\def\lattconst{3.0}
\foreach \x in {\xmin,...,\xmax}
\foreach \y in {\ymin,...,\ymax}
{
%%%
% This should be a dynamic, e.g. “\{label\x\y}”
\pgfmathtruncatemacro{\label}{\x - \xmax * \y + \xmax * \ymax}
%%%
\pgfmathsetmacro{\xpos}{\lattconst*\x}
\pgfmathsetmacro{\ypos}{\lattconst*\y}
\node [mainstyle] (\x\y) at (\xpos,\ypos) {\label};
}
\end{tikzpicture}
\end{document}
答案1
这里有一种通过两个宏和来存储\label
与\x
和的关系的方法。\y
\storelabel
\getlabel
\documentclass{article}
\usepackage{tikz}
\newcommand\storelabel[2]{\expandafter\xdef\csname label#1\endcsname{#2}}
\newcommand\getlabel[1]{\csname label#1\endcsname}
\begin{document}
\begin{tikzpicture}
\tikzset{mainstyle/.style={circle,draw,fill=gray!40,minimum size=20}}
\def\xmin{1}
\def\xmax{4}
\def\ymin{1}
\def\ymax{5}
\def\lattconst{3.0}
\foreach \x in {\xmin,...,\xmax}
\foreach \y in {\ymin,...,\ymax}
{
\pgfmathtruncatemacro{\label}{\x - \xmax * \y + \xmax * \ymax}
\storelabel{\x-\y}{\label}
%%%
\pgfmathsetmacro{\xpos}{\lattconst*\x}
\pgfmathsetmacro{\ypos}{\lattconst*\y}
\node [mainstyle] (\x-\y) at (\xpos,\ypos) {\label};
}
\end{tikzpicture}
Label of 3-4 is \getlabel{3-4}.
Label of 1-1 is \getlabel{1-1}.
Label of 4-5 is \getlabel{4-5}.
\end{document}