LATEX-L Archives

Mailing list for the LaTeX3 project

LATEX-L@LISTSERV.UNI-HEIDELBERG.DE

Options: Use Forum View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

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

Print Reply
Mime-Version:
1.0 (Apple Message framework v929.2)
Content-Type:
text/plain; charset=ISO-8859-1; format=flowed; delsp=yes
Date:
Tue, 18 Nov 2008 00:17:07 +1030
Reply-To:
Mailing list for the LaTeX3 project <[log in to unmask]>
Subject:
From:
Will Robertson <[log in to unmask]>
In-Reply-To:
Content-Transfer-Encoding:
8bit
Sender:
Mailing list for the LaTeX3 project <[log in to unmask]>
Parts/Attachments:
text/plain (48 lines)
On 07/11/2008, at 2:00 AM, Morten Høgholm wrote:

> Question is if you want to have the non-NN variants to be protected.
> If you do, then funny things can happen expansion-wise if you have
> active characters in the c-argument. Case in question: An active
> character appears in the c-argument (say, a colon in a reference
> label). If such a character uses the \ifincsname feature to turn
> normal in critical places, this will not kick in if \let:cN is
> protected and you can wind up with some strange things in place. If
> the functions are non-protected, they will perform argument expansion
> as usual and then stop once \let:NN is met.

Is this actually useful in practise? I'm trying to put some tests  
together and I'm a bit stumped. I haven't done too much expansion  
control in restricted contexts, so forgive any trivial cases I'm  
overlooking. I'm thinking out loud here; some of the following might  
be rather obvious in hindsight.

I'm assuming we've got something like
   \def\expanded#1{\edef\tmp{#1}\tmp}
in which all the "funny stuff" is going on, since it's the only  
expansion environment I can think of (in my tired state) where we  
would be worried about the "c" argument being expanded in the wrong  
context.

So if I write something like
   \def\tmpa{abc}
   \def\tmpz{xyz}
   \expanded{ \let:cc{tmpa}{tmpz} }
this expands, sort of, to
   \exp_args:Ncc\let:NN{tmpa}{tmpz}
then
   \let:NN\tmpa\tmpz
then
   \let:NN abc xyz
which is obviously bad news.

At least any active characters are indeed expanded "correctly" in a  
csname or whatever. But that seems to be little comfort, when  
everything else is being expanded when it doesn't make sense.

What I'm trying to ask, I guess, is: is there enough expansion control  
"built-in" to \exp_args: to justify the argument above about \let:cN ?  
I'm not arguing against not protecting the "c" variants, but at the  
same time I'm a bit confused how they might be used.

Will

ATOM RSS1 RSS2