[OS X TeX] A problem with catcodes

Ross Moore ross at ics.mq.edu.au
Thu Apr 12 11:44:12 EDT 2007


Hi Alessio,

On 12/04/2007, at 2:29 PM, Alessio Guglielmi wrote:

> Hi,

> The macro \aaa redefines the `.' character as active, so that when  
> one types `.', one gets a cross.
>
> This generally works, but it doesn't when what follows \aaa is an  
> argument in a macro call, for example, when used inside a \bbb call  
> as below. The example shows the two different behaviours. I gather  
> that the problem is due to the fact that when arguments are read,  
> they are transformed into lists of tokens, so that the \catcode  
> commands in \aaa lose their effect. I'm not entirely sure I  
> understood this right.
>
> My problem is to define \aaa in such a way that the dot is always  
> typed as a cross, and without altering in any way \bbb and its use.  
> I can change the way \aaa is used. For example, \aaa could be a  
> macro accepting one argument. In other words, a different  
> definition of \aaa, for example involving calling it as \aaa{.},  
> would be acceptable.

Changing the \catcode of a character only works when the
character is first read in, ...

> Any help is very much appreciated, not just by me, but also by a  
> small (but growing) community of people using my macros.
>
> Ciao,
>
> -Alessio
>
>
> %----------------------------------------------------
> \documentclass{article}
>
> {
> \catcode`.=\active
> \gdef\aaa {\catcode`.=\active\let.=\times}
> }
>
> \def\bbb #1{#1}

  ... the argument is read-in when \bbb is encountered ...

>
> \begin{document}
>
> $\aaa .$
>
> \bbb{$\aaa .$}

   ... so this cannot work as you want it to.

The argument, namely  "$\aaa .$"  has been completely read
and tokenised *before* the \aaa  has had a chance to act.
Thus the '.' is already a '.' and cannot be changed to \times .

You need a 2-step macro; defined something like this:

\def\bbb{\bgroup\catcode`\.=\active \bbbb}
{\let`\.=\active
  \gdef\bbbb#1{\let.\times #1\egroup}
}

Now  \bbb{$.$}  should work as you wish it to.


>
> \end{document}
> %----------------------------------------------------

Hope this helps,

	Ross


------------------------------------------------------------------------
Ross Moore                                         ross at maths.mq.edu.au
Mathematics Department                             office: E7A-419
Macquarie University                               tel: +61 +2 9850 8955
Sydney, Australia  2109                            fax: +61 +2 9850 8114
------------------------------------------------------------------------



------------------------- Helpful Info -------------------------
Mac-TeX Website: http://www.esm.psu.edu/mac-tex/
TeX FAQ: http://www.tex.ac.uk/faq
List Archive: http://tug.org/pipermail/macostex-archives/
List Reminders & Etiquette: http://www.esm.psu.edu/mac-tex/list/





More information about the MacOSX-TeX mailing list