Zu erklären, was ich versuche, ist schwieriger, als es einfach zu demonstrieren, deshalb hier eine vereinfachte Version:
\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}
Folgendes sollte passieren:
node={application node}
bezieht sich auf den PGF-Schlüsselnode
, der 1 Argument annimmt, das definiert ist alsAnwendungsknoten- TikZ/PGF erweitert das ArgumentAnwendungsknotenin
node/.style
alsnode/.style n args={1}{application node, ... \node [above] ... {application node}
application node
rectangle, draw=red
wird als PGF-Schlüssel analysiert und in seinem Aufenthalt hinzugefügt
Ich bezeichne den PGF-Schlüssel application node
als #1
den node
Schlüssel.
Das Problem besteht darin, wie #1
tokenisiert wird. Der PGF-Schlüsselparser sieht a
und sucht nach einem Schlüssel namens a
anstelle von application node
.
Antwort1
#1
Anscheinend erfordert TikZ ein Argumentmuster, wenn der PGF-Parser alle darin gespeicherten Token (bis zur schließenden Klammer) lesen soll .
\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 wies darauf hin, dass ich das Argument auch in eine doppelte Klammer hätte setzen {{application node}}
und die .style n args
Syntax beibehalten können.
Relevanter Auszug aus dem TikZ/PGF-Handbuch
Aufgrund der besonderen Art und Weise derWertwird analysiert, wenn Sie Wertbeispielsweise auf |first| (ohne Klammern), dann wird |#1| auf |f| und |#2| auf |irst| gesetzt.