Knoten zufällig auf Kanten platzieren

Knoten zufällig auf Kanten platzieren

Ich versuche, die poseines Randknotens zufällig festzulegen. Folgendes funktioniert:

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

Allerdings funktioniert es nicht mit einem \edefanstelle von \xdef. Warum? Wo ist die geschlossene Gruppe, die \Xin definiert wurde? Und gibt es eine Lösung mit mehr Elementen, bei der ich keine globalen Definitionen vornehmen muss?

Antwort1

Ich kannte den .evalutedSchlüssel nicht. Für mich

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

hat den Job gemacht. Natürlich, wenn ich die verwenden möchteDasselbeWenn ich zweimal einen Zufallswert eingeben muss (wie in meiner Frage), funktioniert das nicht. Aber das habe ich auch nicht gebraucht. Dafür könnte der .expandedSchlüssel (z. B. pos/.expanded) hilfreich sein, aber das habe ich nicht ausprobiert.

verwandte Informationen