Como posso me referir a outra chave pgf usando um argumento de estilo pgf?

Como posso me referir a outra chave pgf usando um argumento de estilo pgf?

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 PGF nodeque leva 1 argumento, que é definido comonó de aplicativo
  • TikZ/PGF expande o argumentonó de aplicativoem node/.stylecomonode/.style n args={1}{application node, ... \node [above] ... {application node}
  • application nodeé analisado como uma chave PGF, sendo adicionado rectangle, draw=redem sua permanência

Refiro-me à chave PGF application nodecomo #1na nodechave.

O problema é como #1é tokenizado. O analisador de chave PGF vê ae procura uma chave chamada aem 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 argssintaxe.

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|.

informação relacionada