¿Cómo puedo hacer referencia a otra clave pgf usando un argumento de estilo pgf?

¿Cómo puedo hacer referencia a otra clave pgf usando un argumento de estilo pgf?

Tratar de explicar lo que intento hacer es más difícil que simplemente demostrarlo, así que aquí hay una versión 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}

Debería suceder lo siguiente:

  • node={application node}se refiere a la clave PGF nodeque toma 1 argumento, que se define comonodo de aplicación
  • TikZ/PGF amplía el argumentonodo de aplicaciónen node/.stylecomonode/.style n args={1}{application node, ... \node [above] ... {application node}
  • application nodese analiza como una clave PGF, agregándose rectangle, draw=reden su estancia

Me refiero a la clave PGF application nodecomo #1en la nodeclave.

El problema es cómo #1se tokeniza. El analizador de claves PGF ve ay busca una clave llamada aen lugar de application node.

Respuesta1

Aparentemente, TikZ requiere un patrón de argumento cuando se supone que el analizador PGF debe leer todos los tokens almacenados #1(hasta la llave de cierre).

\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 señaló que también podría haber reforzado el argumento {{application node}}y conservar la .style n argssintaxis.

Extracto relevante del manual de TikZ/PGF

Debido a la forma especial en quevalorse analiza, si configura valora, por ejemplo, |primero| (sin llaves), luego |#1| se establecerá en |f| y |#2| se establecerá en |primero|.

información relacionada