TikZ:调用样式时更新系列中的键值

TikZ:调用样式时更新系列中的键值

我想运行一些代码来装饰一个节点,并且我想通过 TikZ 样式来控制它。我还希望 tikz 样式能够获取一些参数(例如表单中的参数)mystyle={arg1=val1, arg2=val2},并将它们传递给绘图代码。

这是我正在尝试的:

    \documentclass{standalone}
    \usepackage{tikz}
    \begin{document}
      \begin{tikzpicture}
        \tikzset{
          % Give a initial value "init" to mystyle/arg
          mystyle/arg/.initial=init,
          % Define a key that actually does the drawing
          mystyle/draw stuff/.code={
            % Just some arrows pointing to the node that use the argument value
            \foreach \angle in {0, 60, ..., 300} {
              \draw[<-] (\tikzlastnode) -- ++(\angle:1cm)
                node {\pgfkeysvalueof{/tikz/mystyle/arg}};
            }
          },
          % Now define the style
          mystyle/.style={
            % Append code that triggers the key that draws
            append after command=[mystyle/draw stuff],
            % "enter mystyle"
            mystyle/.cd,
            % Import whatever the user specified
            #1
          }
        }
        \node [mystyle={arg=bar}] {foo};
      \end{tikzpicture}
    \end{document}

据我了解,当mystyle={arg=bar}被调用时,#1{arg=bar}并且它在 内被导入mystyle,因此应该设置/mystyle/argbar。所以它应该生成类似这样的内容:

客观的

我得到的却是:

意想不到的结果

所以\pgfkeysvalueof{/tikz/mystyle/arg}永远不会更新到bar

考虑到这种语法在 TikZ 中广泛使用,这听起来应该很容易做到,但我不知道如何让它工作。是否#1需要以某种方式扩展?

答案1

您尝试的方法几乎有效。但是,我强烈建议将附加路径放在pic为此而制作的 中。您也可以通过以下方式处理选项:

\tikzset{/tikz/mystyle/.cd,#1}

由于您正在创建其他节点,我建议通过以下方式将原始节点保存在宏中

\let\myln\tikzlastnode

结果如下:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}
    \tikzset{
      % Give a initial value "init" to mystyle/arg
      mystyle/arg/.initial=init,
      % Define a key that actually does the drawing
      pics/mystyle/draw stuff/.style={code={
        % Just some arrows pointing to the node that use the argument value
        \let\myln\tikzlastnode
        \tikzset{/tikz/mystyle/.cd,#1}
        \foreach \angle in {0, 60, ..., 300} {
          \draw[<-] (\myln) -- ++(\angle:1cm)
            node[anchor=\angle+180] {\pgfkeysvalueof{/tikz/mystyle/arg}};
        }
      }},
      % Now define the style
      mystyle/.style={
        % Append code that triggers the key that draws
        append after command={pic{mystyle/draw stuff={#1}}},
        % "enter mystyle"
        mystyle/.cd,
        % Import whatever the user specified
        #1
      }
    }
    \path node [mystyle={arg=bar}] {foo} (4,0) node[mystyle={arg=purr}]{cat};
  \end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,在这种情况下,您可以避免pic使用而改用edges。

相关内容