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}node1つの引数を取るPGFキーを参照します。引数は次のように定義されます。アプリケーションノード
  • TikZ/PGFは議論を拡大するアプリケーションノードとしてnode/.stylenode/.style n args={1}{application node, ... \node [above] ... {application node}
  • application nodePGFキーとして解析され、rectangle, draw=redその滞在に追加されます

キー内のapplication nodePGFキーを参照します。#1node

問題は、 がどのように#1トークン化されるかです。PGF キー パーサーは、の代わりに とa呼ばれるキーを見つけて検索します。aapplication node

答え1

どうやら、PGF パーサーが#1(閉じ括弧まで) に格納されているすべてのトークンを読み取る必要がある場合、TikZ では引数パターンが必要になります。

\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 氏は、引数を二重に括弧で囲ん{{application node}}で構文を維持することもできたと指摘しました.style n args

TikZ/PGF ハンドブックからの関連抜粋

特別な方法のため価値設定すると解析されます 価値たとえば、|first| (括弧なし) とすると、|#1| は |f| に設定され、|#2| は |irst| に設定されます。

関連情報