Tentar explicar o que estou tentando fazer é mais difícil do que apenas demonstrar, então aqui está uma versão simplificada:
\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}
O seguinte deve acontecer:
node={application node}
refere-se à chave PGFnode
que leva 1 argumento, que é definido comonó de aplicativo- TikZ/PGF expande o argumentonó de aplicativoem
node/.style
comonode/.style n args={1}{application node, ... \node [above] ... {application node}
application node
é analisado como uma chave PGF, sendo adicionadorectangle, draw=red
em sua permanência
Refiro-me à chave PGF application node
como #1
na node
chave.
O problema é como #1
é tokenizado. O analisador de chave PGF vê a
e procura uma chave chamada a
em vez de application node
.
Responder1
Aparentemente, o TikZ requer um padrão de argumento quando o analisador PGF deve ler todos os tokens armazenados #1
(até a chave de fechamento).
\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 apontou que eu também poderia ter reforçado o argumento {{application node}}
e mantido a .style n args
sintaxe.
Trecho relevante do Manual TikZ/PGF
Devido ao modo especial comovaloré analisado, se você definir valorpara, por exemplo, |primeiro| (sem chaves), então |#1| será definido como |f| e |#2| será definido como |primeiro|.