多条带节点

多条带节点

我正在尝试创建一个pgf键,该键将使用概述的方法实现具有从左到右条纹的多色节点这里

不过,我想提供一种更方便的用法,也许是这样的:

\node[colorstripes={.3:yellow,.5:red,1.:blue}]{hello world};

将节点左侧的 30% 设为黄色,接下来的 20% 设为红色,右半部分设为蓝色。

为此,我尝试采用以下策略这里循环遍历某个pgf键的值。但是,我并没有取得很大进展。以下是我目前尝试的方法:

\pgfkeys{
  apply to key/.style n args={2}{@body loop/.code={#1},@body loop/.list/.expanded=\pgfkeysvalueof{#2}},
  colorstripes/.initial = {},
}
\pgfkeys{
  apply to key={%
    ($(path picture bounding box.north west)!#1!(path picture bounding box.south west)$)
    rectangle
    ($(path picture bounding box.north east)!#1!(path picture bounding box.south east)$);
  }{colorstripes}}
}

但是,我还不知道如何将参数拆分#1为“宽度”和“颜色”部分,并且我还需要访问“最后”项来计算条纹的实际宽度。而且即使现在,TikZ 也不喜欢我的代码,因为它会抱怨Extra },所以我显然不明白我在这里做什么。

如有任何建议、解释或现成的解决方案,我们将不胜感激。

答案1

可能像这样吗?

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{calc}
\def\atchar{@}
\tikzset{%
    background stripes/.style={%
        path picture={%
          \pgfnodealias{@}{path picture bounding box}%
          \tikzset{.. background stripes={0|#1,@:@,;}}%
        }
    },
    .. background stripes/.code args={#1|#2:#3,#4;}{%
      \def\tmp{#2}%
      \ifx\tmp\atchar%
      \else%
        \fill [#3] ($(@.north west)!#1!(@.south west)$)
          rectangle ($(@.north east)!#1+#2!(@.south east)$);
        \tikzset{.. background stripes={#1+#2|#4;}}%
      \fi%
    }
}
\begin{document}
\begin{tikzpicture}
\node [draw, align=center, background stripes={
    .20:red, .30:yellow, .10:pink, .05: green, .05:orange, .20:purple, .10:blue
  }] { Some text \\ with a \\ stripy \\ background };
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容