有没有办法\x1, \x2,..
在循环中创建多个编号变量(如)?
\usetikzlibrary{math}
顺便说一句:如果存在没有库的解决方案,我就不需要使用math
。
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\foreach \N in {1,...,5}{%%
\pgfmathsetmacro\tmp{random(1,52)} Test: \tmp ~
%
\tikzmath{\x\N = \tmp;} % Does not work
\tikzset{ declare function={ x(\N) = \tmp; }, } % Does not work
}%%
\section{Does not work}
%\pgfmathprint{\x3} % Does not work
%\pgfmathprint{x(3)} % Does not work
\end{document}
答案1
正常\foreach
循环会创建一个组。除非进行全局定义,否则您在其中执行的所有操作之后都会丢失。
使用 PGFKeys 和 PGFFor 的基本工具,我们可以定义一些宏作为函数的结果random
。A在内部.list
使用\foreach
(允许...
符号),但不在循环组内执行键。
为了访问这些数字,我们使用\cisNum
宏(只是名称不同\x
)。
代码
\documentclass{article}
\usepackage{pgfmath, pgffor, pgfkeys}
\pgfkeys{/cis/.cd,
create random numbers/.style n args={3}{
/cis/temp/.code=%
\expandafter\pgfmathsetmacro\csname cis_num_##1\endcsname{random(#1,#2)},
/cis/temp/.list={#3}}}
\newcommand*\cisNum[1]{\csname cis_num_#1\endcsname}
\begin{document}
\pgfmathsetseed{687855}
\pgfkeys{/cis/create random numbers={1}{52}{1, ..., 5}}
\pgfkeys{/cis/create random numbers={53}{104}{6, ..., 10}}
\foreach \N in {1, ..., 5} {Test: \pgfmathprint{\cisNum{\N}}\quad}\par
\foreach \N in {6, ..., 10}{Test: \pgfmathprint{\cisNum{\N}}\quad}
\end{document}
输出
测试:22 测试:32 测试:34 测试:49 测试:42
测试:60 测试:53 测试:65 测试:91 测试:83