将 pgfkeys 添加到 tikz \fill

将 pgfkeys 添加到 tikz \fill

尝试创建一个扩展 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}

在此处输入图片描述

相关内容