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
Show All Mail Headers

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

Print Reply
Subject:
From:
Uwe Lueck <[log in to unmask]>
Reply To:
Mailing list for the LaTeX3 project <[log in to unmask]>
Date:
Fri, 17 Sep 2010 23:34:50 +0200
Content-Type:
text/plain
Parts/Attachments:
text/plain (137 lines)
Will Robertson <[log in to unmask]>, 17.09.2010 07:21:30:
>
> \def\foo{...
>   \lccode`#1=`\~

! Illegal parameter number in definition of \foo.

And according to my own experience, it must be \lccode`\~=`#1..., 
cf. doc.sty \@sverb/\do@noligs and below.

>   \lowercase{%
>     \def ~{...}
>   }
> }
>
> But this requires that ~ is naturally active; 

Sure? In my proposal below, ~ is only locally active.

> and that's not necessarily always a good assumption 
> (well, in expl3 isn't definitely not).

Arno Trautmann [, 17.09.2010 21:53:19
>
> \define_active_char:Nn <character> {<code>}
>
> which makes the <character> active and assigns the given code to it,
> internally using the code that Will wrote.

    \begingroup
      \catcode`\~=13
      \gdef\define_active_char:Nn#1#2{%
        \catcode`#113%
        \begingroup
          \lccode`\~`#1%
          \lowercase{\endgroup \def ~{#2}}%
      }
    \endgroup

Not tested exactly this way, sorry, but in a so far private package of mine, I have

    \providecommand*{\MakeActiveDef}[2]{%
      \catcode`#1\active
      \begingroup
        \lccode`\~`#1%
        \lowercase{\endgroup \def ~{#2}}%
    }

so (unless another definition of \MakeActiveDef occurs earlier) \MakeActiveDef and \define_active_char:Nn almost have the same meaning (\active vs. 13, in case LaTeX3 won't have \active).

The \endgroup trick here is from doc.sty's \[log in to unmask]

Admittedly \MakeActiveDef has a single instance (though vital) at present, but I have an analogous \MakeActiveLet in niceverb.sty (ctan.org/pkg/nicetext) that has several vital instances (active characters) and has been used in at least one large-scale project.

Actually, I prefer \MakeActiveLet to \MakeActiveDef, \MakeActiveDef only exists because I was (for some minutes) unable to use \MakeActiveLet in that other package. I favor \MakeActiveLet for the case that the meaning of a single active character might be wanted to change, so you store intended meanings as macros \@if@active@i, \@if@active@ii, ... and then switch

    \MakeActiveLet\<char>\@if@active@i

somewhere,

    \MakeActiveLet\<char>\@if@active@ii

somewhere else ...

Cheers, 

    Uwe.


Will Robertson <[log in to unmask]>, 17.09.2010 07:21:30:
>
> \def\foo{...
>   \lccode`#1=`\~

! Illegal parameter number in definition of \foo.

And according to my own experience, it must be \lccode`\~=`#1..., 
cf. doc.sty \@sverb/\do@noligs and below.

>   \lowercase{%
>     \def ~{...}
>   }
> }
>
> But this requires that ~ is naturally active; 

Sure? In my proposal below, ~ is only locally active.

> and that's not necessarily always a good assumption 
> (well, in expl3 isn't definitely not).

Arno Trautmann [, 17.09.2010 21:53:19
>
> \define_active_char:Nn <character> {<code>}
>
> which makes the <character> active and assigns the given code to it,
> internally using the code that Will wrote.

    \begingroup
      \catcode`\~=13
      \gdef\define_active_char:Nn#1#2{%
        \catcode`#113%
        \begingroup
          \lccode`\~`#1%
          \lowercase{\endgroup \def ~{#2}}%
      }
    \endgroup

Not tested exactly this way, sorry, but in a so far private package of mine, I have

    \providecommand*{\MakeActiveDef}[2]{%
      \catcode`#1\active
      \begingroup
        \lccode`\~`#1%
        \lowercase{\endgroup \def ~{#2}}%
    }

so (unless another definition of \MakeActiveDef occurs earlier) \MakeActiveDef and \define_active_char:Nn almost have the same meaning (\active vs. 13, in case LaTeX3 won't have \active).

The \endgroup trick here is from doc.sty's \[log in to unmask]

Admittedly \MakeActiveDef has a single instance (though vital) at present, but I have an analogous \MakeActiveLet in niceverb.sty (ctan.org/pkg/nicetext) that has several vital instances (active characters).

Actually, I prefer \MakeActiveLet to \MakeActiveDef, \MakeActiveDef only exists because I was for some minutes unable to use \MakeActiveLet in that other package. I favor \MakeActiveLet for the case that the meaning of a single active character might be wanted to change, so you store intended meanings as macros \@if@active@i, \@if@active@ii, ... and then switch

    \MakeActiveLet<char>\@if@active@i

somewhere,

    \MakeActiveLet<char>\@if@active@ii

somewhere else ...

Cheers, 

    Uwe.

ATOM RSS1 RSS2