LATEX-L Archives

Mailing list for the LaTeX3 project


Options: Use Classic View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Content-Type: text/plain; format=flowed; delsp=yes; charset=iso-8859-1
Date: Tue, 1 Jan 2008 17:01:02 +0100
Reply-To: Mailing list for the LaTeX3 project <[log in to unmask]>
From: Morten Høgholm <[log in to unmask]>
Content-Transfer-Encoding: 8bit
In-Reply-To: <[log in to unmask]>
MIME-Version: 1.0
Sender: Mailing list for the LaTeX3 project <[log in to unmask]>
Parts/Attachments: text/plain (65 lines)
On Mon, 31 Dec 2007 16:44:35 +0100, Andreas Matthias wrote:

Hi Andreas,

> I struggled a while to understand how to use \prg_whiledo:nT.
> I think I figured it out, but it seems to be rather clumsy:
> \RequirePackage{l3prg}
> \ExplSyntaxOn
> \tlp_new:N \a_tlp
> \int_new:N \a_int
> \int_zero:N \a_int
> \prg_whiledo:nT {
>   \tlp_set:Nx \a_tlp {
>     \predicate_p:n {
>       \int_compare_p:nNn \a_int < 4 &&
>       \c_true % some complex tests here
>     }
>   }
>   \exp_after:NN \tlp_if_eq:NNT \a_tlp

This last line should just be
   \bool_if:NT \a_tlp
and I can see we left out \bool_set:Nn functions which evaluate such  
predicate expressions. It would make sense for such a function to work  
that way, wouldn't it?

The entire test could be simplified to

\prg_whiledo:nT {
     \int_compare_p:nNn \a_int < 4 &&
     \c_true % some complex tests here
   \io_put_term:x{Loop~ \int_use:N \a_int}
   \int_incr:N \a_int

> In xtheorem.sty it is used as:
>     \prg_whiledo:nT{
>       \int_compare:nNnT \etex_lastnodetype:D = \c_eleven
>     }{\tex_unskip:D}
> And actually, this was the way it expected it to work? But
> it doesn't work, does it? I didn't run xtheorem.sty, though.

The idea behind these generic constructs is to have input as
   \prg_whiledo:nT {% or F
     <various stuff>
     \some_test_function:..T % or :..F
   { <true code> }

So the construction in xtheorem.sty ought to work. (It should be replaced  
by a simpler \int_whiledo:nNnT but that is not important.)