我制作了这个简单的乳胶文件:
\documentclass{minimal}
\usepackage{tikz}
\newcommand\randdot{%
\tikz{\pgfmathsetmacro{\r}{0.01+0.05*random()}\fill (0,0) circle (\r);}\ }
\begin{document}
\randdot\randdot\randdot\randdot\randdot\randdot
Test \leaders\hbox{\randdot\ }\hfill 3 \hfill \
\randdot\randdot\randdot\randdot\randdot\randdot
\end{document}
新命令 randdot 排版一个随机大小的点。该命令运行良好,但是当我在领导者中使用它时,点不再是随机的。领导者命令必须仅评估一次 randdot,然后复制它...
我如何才能获得一个随机的领导者,每个点的评估都不同?
谢谢 !!
答案1
David 提到的 TikZ 方法是现在著名的宏(感谢 Andrew Stacey 和 Peter Grill) \tikzmark
。基本上,您将 TikZ 坐标留在您喜欢的位置,然后在以后的 TikZ 图片中引用它们。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\tikzset{randlead/.style={decoration={
markings,% switch on markings
mark=% actually add a mark
between positions 0 and 1 step 5mm
with
{
\pgfmathsetmacro{\r}{0.01+0.05*random()}\fill (0,0) circle (\r);
}
},
decorate
}
}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture,baseline=-0.5ex] \node (#1) {};}
\begin{document}
Test\tikzmark{a1} \hfill \tikzmark{a2}3 \hfill
Test some text and then Test \tikzmark{a3} \hfill \tikzmark{a4}165 \hfill
\begin{tikzpicture}[overlay,remember picture]
\draw[randlead] (a2) -- (a1);
\draw[randlead] (a4) -- (a3);
\end{tikzpicture}
\end{document}
可以进行进一步的调整,但请将此作为概念证明。
答案2
可能有一种 tikz 方法来获取坐标,但我在这里使用 pdftex 原语。使用胶水代替引线,但测量距离并在第二次运行时覆盖一些框。
\documentclass{minimal}
\usepackage{tikz}
\newcommand\randdot{%
\tikz{\pgfmathsetmacro{\r}{0.01+0.05*random()}\fill (0,0) circle (\r);}\ }
\begin{document}
\makeatletter
\randdot\randdot\randdot\randdot\randdot\randdot
Test \leaders\hbox{\randdot\ }\hfill 3 \hfill \
Test %
\pdfsavepos\write\@auxout{\gdef\noexpand\leada{\the\pdflastxpos}}%
\ifx\leada\@undefined\else
\rlap{%
\dimen@\leadb sp
\advance\dimen@ - \leada sp
\loop
\setbox0\hbox{\randdot\ }%
\advance\dimen@-\wd\z@
\ifdim\dimen@>\z@
\box\z@
\repeat
}%
\fi
\hfill
\pdfsavepos\write\@auxout{\gdef\noexpand\leadb{\the\pdflastxpos}}%
4 \hfill \
\randdot\randdot\randdot\randdot\randdot\randdot
\end{document}