Как можно сослаться на другой ключ pgf, используя аргумент стиля pgf?

Как можно сослаться на другой ключ pgf, используя аргумент стиля pgf?

Объяснить то, что я пытаюсь сделать, сложнее, чем просто продемонстрировать, поэтому вот упрощенная версия:

\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}

Должно произойти следующее:

  • node={application node}относится к ключу PGF node, который принимает 1 аргумент, который определяется какузел приложения
  • TikZ/PGF расширяет аргументузел приложенияв node/.styleкачествеnode/.style n args={1}{application node, ... \node [above] ... {application node}
  • application nodeанализируется как ключ PGF, добавляемый rectangle, draw=redв его пребывании

Я ссылаюсь на ключ PGF, application nodeкак #1на nodeключ.

Проблема в том, как #1токенизировано. Анализатор ключей PGF видит aи ищет ключ, называемый aвместо application node.

решение1

По-видимому, TikZ требует шаблон аргумента, когда анализатор PGF должен прочитать все токены, хранящиеся в #1(до закрывающей скобки).

\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}

Анри Менке указал, что я мог бы также заключить аргумент в двойные скобки {{application node}}и сохранить .style n argsсинтаксис.

Соответствующая выдержка из справочника TikZ/PGF

Из-за особого способаценитьанализируется, если вы установите ценитьнапример, |first| (без каких-либо фигурных скобок), то |#1| будет установлен на |f|, а |#2| будет установлен на |irst|.

Связанный контент