如何使用 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}指 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|將被設定為 |first|。

相關內容