[texhax] scrambled text
Paul Isambert
zappathustra at free.fr
Mon Aug 27 08:38:04 CEST 2012
Daniel Greenhoe <dgreenhoe at gmail.com> a écrit:
>
> On Sun, Aug 26, 2012 at 8:55 PM, Paul Isambert <zappathustra at free.fr> wrote:
> > Indeed you can "\input random.tex" at the beginning of your document and
> > replace \extractletters in my original code with this new definition:
>
> I tried your new code and it works great---Thanks!!!
>
> For a long time I have been using the lcg package for random number
> generation. I modified your code to use lcg instead of random.tex.
> However I don't know much about TeX programming. Would some one want
> to take a look at the code below to see if anything is amiss?
As far as I can see it's ok. I've read the lcg doc quickly and it seems
that you can use "\reinitrand[first=1]" at the beginning of your document
and then only "\chrand[last=\letters]" in the code, but the only
improvement, if any, is speed. Also, the "%" after "\rand" on a line
of its own is useless, but it is harmless too.
Best,
Paul
> Many thanks in advance,
> Dan
>
> %============================================================================
> % Code: see email from Paul Isambert (2012 August 25 Saturday 2:49pm)
> %============================================================================
> % Code 1
> \newcount\letters
> %\newcount\random
> \newcount\scratch
> \def\endofword{\endofword}
>
> \def\scramble#1{%
> \letters=0
> \countletters#1\endofword
> \extractletters{#1}%
> }
>
> \def\countletters#1{%
> \unless\ifx #1\endofword
> \advance\letters 1
> \expandafter\countletters
> \fi
> }
>
> \def\extractletters#1{% see email from Paul Isambert (2012 August 26
> Sunday 8:55pm)
> \def\rest{}%
> \ifnum\letters>1
> \chgrand[first=1,last=\letters]% <--edit
> \rand% <--edit
> %\setrannum{\random}{1}{\letters}% <--previous
> \advance\letters-1 \scratch=1
> \getletter#1\endofword%
> \else
> #1%
> \fi
> }
>
> \def\getletter#1{%
> \ifnum\scratch=\value{rand}% <--edit
> #1%
> \expandafter\getrestofword
> \else
> \advance\scratch 1
> \edef\rest{\rest#1}%
> \expandafter\getletter
> \fi
> }
>
> \def\getrestofword#1\endofword{%
> \expandafter\extractletters\expandafter{\rest#1}%
> }
>
> %\scramble{scramble}
> % End of code 1
>
>
> On Sun, Aug 26, 2012 at 8:55 PM, Paul Isambert <zappathustra at free.fr> wrote:
> > Reinhard Kotucha <reinhard.kotucha at web.de> a écrit:
> >>
> >> On 2012-08-26 at 08:46:26 +0800, Daniel Greenhoe wrote:
> >>
> >> > Hi Paul,
> >> >
> >> > Thank you for the source code. I use XeLaTeX and I tried your "Code
> >> > 1". But it said that
> >> > \pdfuniformdeviate
> >> > was undefined. Is \pdfuniformdeviate only defined in PDFTex? Is there
> >> > some workaround for XeTeX?
> >>
> >> XeTeX is based on Knuth's TeX and thus doesn't inherit pdfTeX
> >> extensions.
> >>
> >> Maybe you can use Donald Arseneau's random.tex package instead of
> >> \pdfuniformdeviate.
> >
> > Indeed you can "\input random.tex" at the beginning of your document and
> > replace \extractletters in my original code with this new definition:
> >
> > \def\extractletters#1{%
> > \def\rest{}%
> > \ifnum\letters>1
> > \setrannum{\random}{1}{\letters}%
> > \advance\letters-1 \scratch=1
> > \getletter#1\endofword%
> > \else
> > #1%
> > \fi
> > }
> >
> > Best,
> > Paul
> >
> > _______________________________________________
> > TeX FAQ: http://www.tex.ac.uk/faq
> > Mailing list archives: http://tug.org/pipermail/texhax/
> > More links: http://tug.org/begin.html
> >
> > Automated subscription management: http://tug.org/mailman/listinfo/texhax
> > Human mailing list managers: postmaster at tug.org
More information about the texhax
mailing list