不允许将阴影定义为宏吗?

不允许将阴影定义为宏吗?

真的不可能将阴影(带或不带选项)定义为宏吗?

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shadows}
\newcommand{\test}{drop shadow={shadow xshift=1ex}}
\begin{document}
\begin{tikzpicture}
 \node[rectangle,fill=red,drop shadow={shadow xshift=1ex}] at (0,0) {test};
 \node[rectangle,fill=green,\test] at (5,0) {test};
\end{tikzpicture}
\end{document}

当我测试此文件时,我收到消息“pgfkeys 错误:我不知道密钥...”。我经常使用\node带有此类宏的其他选项,到目前为止没有任何问题。

答案1

不,你不能这样做,因为存在扩展问题。命令\node接收的\test是它的内容,而它显然不知道这一点。

有两种基本解决方案:(1)使用\tikzset(或\tikzstyle):

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shadows}
\tikzset{ test/.style = {drop shadow={shadow xshift=1ex}} }
\begin{document}
\begin{tikzpicture}
 \node[rectangle,fill=red,drop shadow={shadow xshift=1ex}] at (0,0) {test};
 \node[rectangle,fill=green,test] at (5,0) {test};
\end{tikzpicture}
\end{document}

(2)使用肮脏的伎俩,在之前\edef扩展\test到其内容中\node(2)在展开请不要那样做旗帜:

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shadows}
\newcommand{\test}{drop shadow={shadow xshift=1ex}}
\begin{document}
\begin{tikzpicture}
 \node[rectangle,fill=red,drop shadow={shadow xshift=1ex}] at (0,0) {test};
 \edef\xyz{\noexpand\node[rectangle,fill=green,\test]}
 \xyz at (5,0) {test};
\end{tikzpicture}
\end{document}

相关内容