Я пытаюсь установить 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
) может быть полезен, но я не пробовал.