我已经定义了两个点数组,如下所示:
\def\blah{{0,1,2,3},{0,1,2,3}}
\def\foo{{0,1,2,3},{3,2,1,0}}
我想在TikZ
图像中使用这些点。由于我有很多这样的数组,所以我想创建一个新命令,例如:
\newcommand{\imagemap}[1]{
\begin{tikzpicture}
\foreach \row [count=\j] in #1 {
\foreach \elem [count=\i] in \row {
\draw (\i,\j)--(\j,\i);
}
}
\end{tikzpicture}
}
因此我可以使用\imagemap{foo}
或而\imagemap{blah}
不必为每个数组重新定义新命令。不幸的是,这似乎不起作用。
工作是什么?\imagemap{\foo}
和\imagemap{\blah}
有什么方法可以重新调整命令,以便我不必在括号内使用斜线?
答案1
是的当然:
\newcommand{\imagemap}[1]{%
\expandafter\doimagemap\csname #1\endcsname
}
\newcommand{\doimagemap}[1]{%
\begin{tikzpicture}
\foreach \row [count=\j] in #1 {
\foreach \elem [count=\i] in \row {
\draw (\i,\j)--(\j,\i);
}
}
\end{tikzpicture}%
}
诀窍是在开始执行\imagemap
之前定义构建单个标记(可以说是添加了反斜杠)\doimagemap
。从字符串构建控制序列的构造是\csname
;字符串的结尾由表示\endcsname
。