Estou tentando definir pos
aleatoriamente 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 \edef
em vez de \xdef
. Por que? Onde está fechado o grupo que \X
foi 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 .evaluted
chave. 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 .expanded
chave (por exemplo, pos/.expanded
) pode ser útil, mas ainda não tentei.