Wie kann ich mit einem Argument im PGF-Stil auf einen anderen PGF-Schlüssel verweisen?

Wie kann ich mit einem Argument im PGF-Stil auf einen anderen PGF-Schlüssel verweisen?

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üssel node, der 1 Argument annimmt, das definiert ist alsAnwendungsknoten
  • TikZ/PGF erweitert das ArgumentAnwendungsknotenin node/.stylealsnode/.style n args={1}{application node, ... \node [above] ... {application node}
  • application noderectangle, draw=redwird als PGF-Schlüssel analysiert und in seinem Aufenthalt hinzugefügt

Ich bezeichne den PGF-Schlüssel application nodeals #1den nodeSchlüssel.

Das Problem besteht darin, wie #1tokenisiert wird. Der PGF-Schlüsselparser sieht aund sucht nach einem Schlüssel namens aanstelle von application node.

Antwort1

#1Anscheinend 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 argsSyntax 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.

verwandte Informationen