Print

Print


Hello Frank,

thanks for your explanatory notes.


Frank Mittelbach wrote:

> I think you got the subject quite right when you wrote that \tlp_use:N is
> harmful. When we experimented with the various data types it seemed logical at
> first glance to include a "use" for tlps but personally I always was kind of
> sceptical (and usually didn't use it) and your example gives a good reason why
> it isn't really workable.
> 
> So I think the spec here should be that tlps hold tokens and their "use" is to
> put the tlp into the input stream directly. after all TeX's model of execution
> is to simply go through the input token list and expand and execute them one
> by one and a tlp is simply a storage bin for such a sequence of input tokens.

I see.

>  > Here is an example that actually does what I want it to, but might not
>  > be considered clean code since it depends on implementation details:
>  > 
>  >   \RequirePackage{l3prop}
>  >   \ExplSyntaxOn
>  > 
>  >   \tlp_new:Nn \a_tlp {aaa}
>  >   \tlp_new:Nn \b_tlp {bbb\a_tlp}
>  > 
>  >   \prop_new:N \a_plist
>  >   \prop_gput:Nno \a_plist {key} {\b_tlp}
>  >   \showthe\a_plist
> 
> the above gives you
> 
>    bbb\a_tlp  and not bbbaaa
> 
> as value.

Yes. Otherwise one would have to use \prop_gput:Nnx.

> if that is what you wanted then I would say with the spec that the
> "use" of tlps is to simply put them into the input stream the above wouldn't
> use implementation details but specification details.

That's good.


>  > And then: What's the error message in \tlp_use:N for? It looks
>  > so arbitrarily. Probably it's not?
> 
> well I don't know when that was added, but i can see some logic behind it (not
> that i think it is worth having really (as i think one should get rid of the
> whole cmd). I think the idea was that a tlp is a storage bin so could never be
> "\scan_stop:", but either "empty" or contains a list of tokens. So
> "\scan_stop:" means something like \tlp_use:c tried to use a tlp that simply
> doesn't exist

Oh, of course. I couldn't figure out where the \scan_stop: should
come from. But then I didn't thought about \tlp_use:c.


Ciao
Andreas