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

  • What is the syntax random in your answer? – chishimotoji Dec 12 '18 at 11:33
  • 1
    \pscalculate{randint(1,25)} get an integer random between 1 and 25 – Herbert 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. :-)) – chishimotoji 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. – Herbert Dec 16 '18 at 8:18
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

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.