尝试创建一个扩展 tikz 的新命令时,我被卡住了,无法更改所用宏的颜色\fill
。任何或的构造.unknown-handler
都.search also={/tikz}
失败了。解决方案将宏内的关键选项传递给 TikZ 绘图命令将键添加到\begin{tikzpicture}
而不是\fill
。
梅威瑟:
\documentclass{article}
\usepackage{tikz}
\newlength\tikwidth
\pgfkeys{/tikzTest/.cd,
TestWidth/.code = \setlength{\tikwidth}{#1},
/tikzTest/.search also = {/tikz},
}
%%%% userlevel call \Block[]()()
\def\Block[#1]#2#3{
\begin{tikzpicture}
\pgfkeys{/tikzTest/.cd,#1}
\fill (#2) rectangle (#3);
\end{tikzpicture}
}
\begin{document}
\Block[color=red] {0,0}{0.5,0.5}
\Block[color=blue] {0.5,0.5}{1,1};
\end{document}
这样就得到了两个黑色方块,而不是一个红色和一个蓝色。
我不知道我错过了什么......
答案1
问题是\pgfkeys
没有设置当前图片或路径的选项。因此您必须直接将选项传递给图片。
您还应该使用\newcommand
可选参数,因此如果可选参数不存在它也不会失败,并且您需要删除行尾以%
防止出现虚假空格。
\documentclass{article}
\usepackage{tikz}
\newlength\tikwidth
\pgfkeys{
/tikzTest/.cd,
TestWidth/.code = \setlength{\tikwidth}{#1},
/tikzTest/.search also = {/tikz},
}
%%%% userlevel call \Block[]()()
\newcommand\Block[3][]{%
\begin{tikzpicture}[/tikzTest/.cd,#1]
\fill (#2) rectangle (#3);
\end{tikzpicture}%
}
\begin{document}
\Block[fill=red]{0,0}{0.5,0.5}
\Block[fill=blue]{0.5,0.5}{1,1}
\Block{0,0}{.5,.5}
\end{document}
答案2
您可以通过按键强制执行选项every path
。
\documentclass{article}
\usepackage{tikz}
\newlength\tikwidth
\pgfkeys{
/tikzTest/.is family,
/handler config=full or existing,
/tikzTest/.search also={/tikz},
/tikzTest/TestWidth/.code = \setlength{\tikwidth}{#1}
}
%%%% userlevel call \Block[]()()
\def\Block[#1]#2#3{%
\begin{tikzpicture}
\pgfkeys{/tikzTest/.cd,every path/.append style={#1}}
\path (#2) rectangle (#3);
\end{tikzpicture}%
}
\begin{document}
\Block[fill=red,line width=1.4mm,draw=yellow] {0,0}{0.5,0.5}
\Block[fill=blue] {0.5,0.5}{1,1};
\end{document}