エッジ上にノードをランダムに配置する

エッジ上にノードをランダムに配置する

posエッジ ノードの をランダムに設定しようとしています。次の方法が機能します。

\documentclass{article}
\usepackage{tikz}
\tikzset{
    X/.code={
        \pgfmathparse{rnd}
        \xdef\X{\pgfmathresult}
        \pgfkeysalso{pos=\X, label=\X}
    }
}
\begin{document}
    \tikz \draw (0,0) edge node[X] {} (10,0) edge node[X] {} (10,10) edge node[X] {} (0,10);
\end{document}

\edefしかし、の代わりに を使用すると機能しません\xdef。なぜでしょうか? で定義されている閉じたグループはどこにありますか\X? また、グローバル定義を行う必要がない、より多くの要素のソリューションはありますか?

答え1

私はその鍵に気づいていませんでした.evaluted。私にとっては

\documentclass{article}
\usepackage{tikz}
\tikzset{X/.style={pos/.evaluated={rnd}}}
\begin{document}
    \tikz \draw (0,0) edge node[X] {} (10,0) edge node[X] {} (10,10) edge node[X] {} (0,10);
\end{document}

うまくいきました。もちろん、同じランダムな値を 2 回使用しても (私の質問のように)、これは機能しません。しかし、私はとにかくそれを必要としませんでした。そのためには、キー.expanded(例: pos/.expanded) が役立つかもしれませんが、私はそれを試していません。

関連情報