嘗試解釋我想要做的事情比僅僅演示它更困難,所以這裡是一個簡化版本:
\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/.style
如node/.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|。