为什么这不常见呢?
\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}