尝试解释我正在做的事情比仅仅演示它更难,因此这里有一个简化的版本:
\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/.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| 将设置为 |irst|。