使用节点的新命令进入 tikzpicture 环境和 TikZ 矩阵

使用节点的新命令进入 tikzpicture 环境和 TikZ 矩阵

为什么这不常见呢?

\newcommand{\test}[2][]{
\node[draw, #1] {#2};
}

只有当我说

\newcommand{\test}[2][]{
\begin{tikzpicture}
\node[draw, #1] {#2};
\end{tikzpicture}
}

它有时会有效-但每次都是完整的 tikzpicture......?

暗示:我想要将更复杂的命令(包含foreach)多次设置到 TikZ 矩阵中,因此以下 MWE 包含一个 TikZ 矩阵。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\newcommand{\test}[2][]{
\node[draw, #1] {#2};
}

\test{aaa} % Does not work! ==================

\begin{tikzpicture}
\matrix (m) [matrix of nodes, nodes in empty cells]{
a & b \\
\test{aaa} & \test[red]{bbb} \\
% Does not work! ==================
};
\end{tikzpicture}
\end{document}

答案1

代码无法使用,\newcommand因为命令不可扩展,如下例所示:\testA用 定义\newcommand,但不能在 中使用\edef。而\testC用 定义\NewExpandableDocumentCommand\testC可以在 中使用\edef

\documentclass[border=6pt]{standalone}
\newcommand{\testA}[2][]{A}
\def\testB{\testA{B}}%works with \def but not with \edef
\NewExpandableDocumentCommand\testC{O{}m}{C}
\edef\testD{\testC{D}}%works with \def and \edef
\begin{document}
\testB ; \testD
\end{document}

在此处输入图片描述

如果命令\test用定义,\NewExpandableDocumentCommand\test可以在里面使用\matrix

\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\NewExpandableDocumentCommand\test{O{}m}{\node[draw, #1] {#2};}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes, nodes in empty cells]{
a & b \\
\test{aaa} & \test[red]{bbb} \\
%Does work
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容