![\newcommand 或其他类似宏的语句的早期扩展](https://linux22.com/image/466087/%5Cnewcommand%20%E6%88%96%E5%85%B6%E4%BB%96%E7%B1%BB%E4%BC%BC%E5%AE%8F%E7%9A%84%E8%AF%AD%E5%8F%A5%E7%9A%84%E6%97%A9%E6%9C%9F%E6%89%A9%E5%B1%95.png)
我想在 或任何其他宏中存储一个参数列表\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}