[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