Размещение узлов случайным образом на ребрах

Размещение узлов случайным образом на ребрах

Я пытаюсь установить 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}

сделал работу. Конечно, если я хочу использоватьтакой жеслучайное значение дважды (как в моем вопросе), это не работает. Но мне это и не нужно. Для этого ключ .expanded(например, pos/.expanded) может быть полезен, но я не пробовал.

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