![不允许将阴影定义为宏吗?](https://linux22.com/image/304222/%E4%B8%8D%E5%85%81%E8%AE%B8%E5%B0%86%E9%98%B4%E5%BD%B1%E5%AE%9A%E4%B9%89%E4%B8%BA%E5%AE%8F%E5%90%97%EF%BC%9F.png)
真的不可能将阴影(带或不带选项)定义为宏吗?
\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}