5

The TikZ code of Schulte Table (Tran Le Nam's author):

\documentclass[12pt,tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\usepackage{xstring}
\begin{document}
\large
\begin{tikzpicture}
\def\n{5}
\def\mylist{}
\pgfmathsetmacro{\numbermax}{\n*\n}
\foreach \x in {1,...,\numbermax}{ 
    \xdef\mylist{\mylist\noexpand{\x\noexpand}}
}
\begin{scope} 
\pgfmathsetmacro{\nt}{\n-1}
\foreach \i in {0,...,\nt}
{
    \foreach \j in {0,...,\nt}
    { \pgfmathdeclarerandomlist{mynum}{\mylist}
        \pgfmathrandomitem{\mynum}{mynum}
        \StrSubstitute{\mylist}{{\mynum}}{}[\sublist]
        \global\let\mylist\sublist 
        \pgfmathparse{0.9*rnd+0.3} \pgfmathsetmacro{\maum}{\pgfmathresult}
        \pgfmathparse{0.8*rnd} \pgfmathsetmacro{\mauh}{\pgfmathresult}
        \definecolor{mau}{rgb}{\maum,\mauh,0.1}
        \node[color=mau] at ($ (\i+0.5, \j+0.5 ) $) {\mynum};
    } 
}
\draw (0,0) grid (\n,\n);
\end{scope}
\end{tikzpicture}
\end{document}

enter image description here

Truly, until now, I don't know about "the random syntax" in any PSTricks documentations. Can I find "the random syntax" in where?

Update:

\documentclass[12pt,pstricks,border=5pt]{standalone}
\usepackage{pst-math}
\usepackage{multido}
\begin{document}
\newcounter{RandNo} 
\setcounter{RandNo}{1}
\def\n{7} \def\m{10}
\def\N{\the\numexpr\m*\n}
\defineRandIntervall(1,\N){\N}
\makeRandomNumberList 
%\resetcolorseries[\N]{test}

\begin{pspicture}(\m,\n)
\psgrid[subgriddiv=0,gridlabels=0pt]
\multido{\rRow=0.5+1.0}{\n}{\multido{\rCol=0.5+1.0}{\m}{%
        \rput(\rCol,\rRow){\getNumberFromList{\theRandNo}}%
        \stepcounter{RandNo}}}
\end{pspicture}
\end{document}

It produces figure normally:

enter image description here

BUT

\documentclass[12pt,pstricks,border=5pt]{standalone}
\usepackage{pst-math}
\usepackage{multido}
\definecolorseries{test}{rgb}{step}[rgb]{.95,.85,.55}{.17,.47,.37}
\begin{document}
\newcounter{RandNo} 
\setcounter{RandNo}{1}
\def\n{7} \def\m{10}
\def\N{\the\numexpr\m*\n}
\defineRandIntervall(1,\N){\N}
\makeRandomNumberList 
\resetcolorseries[\N]{test}

\begin{pspicture}(\m,\n)
\psgrid[subgriddiv=0,gridlabels=0pt]
\multido{\rRow=0.5+1.0}{\n}{\multido{\rCol=0.5+1.0}{\m}{%
    \rput(\rCol,\rRow){\textcolor{test!!+}{\getNumberFromList{\theRandNo}}%
        \stepcounter{RandNo}}}
\end{pspicture}
\end{document}

Compiler gets no result .... :((

5

Does not work with xelatex (it doesn't know the random function)

\documentclass[12pt]{article}
\usepackage{pstricks,pst-calculate,multido}
\usepackage{auto-pst-pdf}
\definecolorseries{test}{rgb}{step}[rgb]{.95,.85,.55}{.17,.47,.37}
\begin{document}

\def\n{5}
\begin{pspicture}(\n,\n)
\psgrid[subgriddiv=0,gridlabels=0pt]
\resetcolorseries[25]{test}
\multido{\rRow=0.5+1.0}{\n}{%
  \multido{\rCol=0.5+1.0}{\n}{%
    \rput(\rCol,\rRow){\textcolor{test!!+}{\pscalculate{randint(1,25)}}}
}}
\end{pspicture}

\end{document}

enter image description here

And a solution with single random numbers. The random stuff is part of an up-to-date pst-math:

\documentclass[12pt]{article}
\usepackage{pstricks,pst-math}
\usepackage{multido}
\usepackage{auto-pst-pdf}
\definecolorseries{test}{rgb}{step}[rgb]{.95,.85,.55}{.17,.47,.37}
\begin{document}

\newcounter{RandNo} \setcounter{RandNo}{1}
\def\n{5} \def\N{\the\numexpr\n*\n}
\defineRandIntervall(1,\N){\N}
\makeRandomNumberList  
\resetcolorseries[25]{test}

\begin{pspicture}(\n,\n)
\psgrid[subgriddiv=0,gridlabels=0pt]
\multido{\rRow=0.5+1.0}{\n}{\multido{\rCol=0.5+1.0}{\n}{%
  \rput(\rCol,\rRow){\textcolor{test!!+}{\getNumberFromList{\theRandNo}}}%
  \stepcounter{RandNo}}}
\end{pspicture}

\end{document}

enter image description here

for big squares it makes more sense to use luatex for doing the calculation. Run the following example with lualatex --shell-escape <file> It needs the package luarandom, available in the next few days for TeXLive or MikTeX. Or here: http://comedy.dante.de/~herbert/TeXnik/tex/lualatex/luarandom/

\documentclass[12pt]{article}
\usepackage{xcolor,pstricks}
\usepackage{multido}
\usepackage{pst-math}
\usepackage{auto-pst-pdf-lua}
\ifpdf\else\usepackage[T1]{fontenc}\fi
\begin{document}

\newcounter{RandNo} \setcounter{RandNo}{1}
\def\n{10} \def\N{\the\numexpr\n*\n}
\makeRandomNumberList{1}{\N}{\N}  

\begin{pspicture}(\n,\n)
\psgrid[subgriddiv=0,gridlabels=0pt]
\multido{\rRow=0.5+1.0}{\n}{\multido{\rCol=0.5+1.0}{\n}{%
  \edef\RNumber{\getNumberFromList{\theRandNo}}%
  \rput(\rCol,\rRow){\textcolor{randomhsb}{\RNumber}%
    \stepcounter{RandNo}}}}
\end{pspicture}

\end{document}

enter image description here

5
  • What is the syntax random in your answer? – user173875 Dec 12 '18 at 11:33
  • 1
    \pscalculate{randint(1,25)} get an integer random between 1 and 25 – user2478 Dec 12 '18 at 11:36
  • If you add these syntax into pst-math package, you also add its guide. Extension for n>5 are very exciting. :-)) – user173875 Dec 13 '18 at 8:39
  • Compiler gets no result .... :(( is a totally useless statement! You should provide an error message or a wrong output! Control your parantheses, which can easily be done in an editor where corresponding {...} are highlited. – user2478 Dec 16 '18 at 8:18
  • use comedy.dante.de/~herbert/TeXnik/tex/generic/pstricks/… – user2478 Dec 16 '18 at 12:21
2

A pure PSTricks solution is also possible but we should not reinvent the wheel.

\documentclass[12pt,pstricks,border=1pt]{standalone}
\usepackage{tikz,xstring}
\usetikzlibrary{calc}
\def\n{5}\def\mylist{}

\pgfmathsetmacro{\numbermax}{\n*\n}
\foreach \x in {1,...,\numbermax}{ 
    \xdef\mylist{\mylist\noexpand{\x\noexpand}}
}
\pgfmathsetmacro{\nt}{\n-1}
\newpsstyle{gridstyle}{griddots=0,subgriddiv=1}
\begin{document}
\large
\begin{pspicture}[showgrid](\n,\n)
\foreach \i in {0,...,\nt}
{
    \foreach \j in {0,...,\nt}
    {   \pgfmathdeclarerandomlist{mynum}{\mylist}
        \pgfmathrandomitem{\mynum}{mynum}
        \StrSubstitute{\mylist}{{\mynum}}{}[\sublist]
        \global\let\mylist\sublist 
        \pgfmathparse{0.9*rnd+0.3} \pgfmathsetmacro{\maum}{\pgfmathresult}
        \pgfmathparse{0.8*rnd} \pgfmathsetmacro{\mauh}{\pgfmathresult}
        \definecolor{mau}{rgb}{\maum,\mauh,0.1}
        \rput(!\i\space .5 add \j\space .5 add){\color{mau}\mynum}
    } 
}
\end{pspicture}
\end{document}

enter image description here

About Pseudo random generator

Rand produces a floating point random number between 0 and 1 inclusive and rand produces a "huge" integer.

\documentclass[pstricks,border=12pt,12pt]{standalone}
\pstVerb{realtime srand}

\begin{document}
\begin{pspicture}[showgrid](6,6)
        \psLoop{5}{\qdisk(!Rand 6 mul Rand 6 mul){!Rand 4 div}}
\end{pspicture}
\end{document}

enter image description here

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy