Colocando nós aleatoriamente nas bordas

Colocando nós aleatoriamente nas bordas

Estou tentando definir posaleatoriamente o valor de um nó de borda. Os seguintes trabalhos:

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

No entanto, não funciona com um \edefem vez de \xdef. Por que? Onde está fechado o grupo que \Xfoi definido? E existe uma solução com mais elementos que não exija que eu faça definições globais?

Responder1

Eu não estava ciente da .evalutedchave. Para mim,

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

fez o trabalho. Claro, se eu quiser usar omesmovalor aleatório duas vezes (como na minha pergunta), isso não funciona. Mas eu não precisava disso de qualquer maneira. Para isso, a .expandedchave (por exemplo, pos/.expanded) pode ser útil, mas ainda não tentei.

informação relacionada