\newcommand 或其他类似宏的语句的早期扩展

\newcommand 或其他类似宏的语句的早期扩展

我想在 或任何其他宏中存储一个参数列表\newcommand\def然后,这样的列表将被传递给另一个命令。然而,事实证明,该列表被另一个命令视为单个参数。示例:

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes.gates.ee}
\begin{document}
\newcommand{\nodestyle}{scale=2, color=blue}
% \def\nodestyle{scale=2, color=blue}
\newcommand{\customnode}{\node[circle ee, draw, \nodestyle]}

\begin{tikzpicture}
    \customnode at (1,1) (Node) {};
\end{tikzpicture}
\end{document} 

这会产生错误我不知道密钥/tikz/scale=2,color=blue

答案1

您可以预先扩展参数,expl3专为此类扩展控制而设计,但这里仅使用 (e)tex 原语

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes.gates.ee}
\begin{document}
\newcommand{\nodestyle}{scale=2, color=blue}
% \def\nodestyle{scale=2, color=blue}
\newcommand{\customnode}{\expanded{\noexpand\node[circle ee, draw, \nodestyle]}}

\begin{tikzpicture}
    \customnode at (1,1) (Node) {};
\end{tikzpicture}
\end{document} 

答案2

使用本机方法。

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes.gates.ee}

\tikzset{
  nodestyle/.style={scale=2,color=blue},
}
\newcommand{\customnode}{\node[circle ee,draw,nodestyle]}

\begin{document}

\begin{tikzpicture}
    \customnode at (1,1) (Node) {};
\end{tikzpicture}

\end{document}

相关内容