以宏作为输入的新命令

以宏作为输入的新命令

我已经定义了两个点数组,如下所示:

\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

相关内容