如何使用 pgf 样式参数引用另一个 pgf 键?

如何使用 pgf 样式参数引用另一个 pgf 键?

尝试解释我正在做的事情比仅仅演示它更难,因此这里有一个简化的版本:

\documentclass{article}
\usepackage{tikz}
\tikzset{
  application node/.style={rectangle, draw=red},%
  node/.style n args={1}{#1, append after command={\pgfextra{\let\mainnode=\tikzlastnode}
  node [above] at (\mainnode.north) {#1}
}}}

\begin{document}
\tikz \node [node={application node}] {host.domain.com};
\end{document}

应该发生以下情况:

  • node={application node}指的是接受 1 个参数的 PGF 密钥node,其定义为应用程序节点
  • TikZ/PGF 扩展了论点应用程序节点node/.stylenode/.style n args={1}{application node, ... \node [above] ... {application node}
  • application node被解析为 PGF 密钥,并被添加rectangle, draw=red到其停留时间中

我将 PGF 密钥application node称为#1密钥node

问题在于如何#1标记化。PGF 密钥解析器会发现a并寻找一个名为 的密钥a,而不是application node

答案1

显然,当 PGF 解析器应该读取存储在#1(直到右括号)中的所有标记时,TikZ 需要一个参数模式。

\documentclass{article}
\usepackage{tikz}

\tikzset{
  application node/.style={rectangle, draw=red},%
  node/.style args={#1}{
    #1,  
    append after command={\pgfextra{\let\mainnode=\tikzlastnode}
        node [above] at (\mainnode.north) {#1} 
      },%  
    },%  
}

\begin{document}
\tikz \node [node={application node}] {host.domain.com};
\end{document}

Henri Menke 指出我也可以对参数进行双重支撑{{application node}}并保留.style n args语法。

TikZ/PGF 手册的相关摘录

由于特殊的方式价值被解析,如果你设置 价值例如,|first|(没有任何括号),则 |#1| 将设置为 |f| 且 |#2| 将设置为 |irst|。

相关内容