[tex-eplain] [solved] Re: Position of optional argument
Rodolfo Medina
rodolfo.medina at gmail.com
Mon Apr 27 21:07:16 CEST 2009
Rodolfo Medina <rodolfo.medina at gmail.com> writes:
> On Sun, Apr 26, 2009 at 07:16:55PM +0100, Rodolfo Medina wrote:
>
>>> I've been using the eplain \@getoptionalarg and \@optionalarg commands in a
>>> certain macro. It turns out to me that the optional argument must be put
>>> *before* the non optional argument.
>>>
>>> How can I set things - if possible - so to put it after it?
>
>
>
> Oleg Katsitadze <olegkat at gmail.com> writes:
>
>> Try this:
>>
>> \input eplain
>>
>> \makeatletter
>>
>> \def\test#1{%
>> \def\test at arg{#1}%
>> \@getoptionalarg\@test
>> }
>>
>> \def\@test{%
>> \message{^^JArg: \test at arg}%
>> \message{^^JOptional arg: \@optionalarg}%
>> }
>>
>> \makeatother
>>
>> \test{text}
>> \test{text}[optional text]
>>
>> \bye
>
>
>
> Thanks, but when I process the file I get error message:
>
> $ tex test
> This is TeX, Version 3.141592 (Web2C 7.5.5)
> (./test.tex (/home/rodolfo/macros/eplain-3.2.tex)
> Arg: text
> Optional arg:
> ! Use of \test doesn't match its definition.
> l.18 \test{
> text}[optional text]
> ? h
> If you say, e.g., `\def\a1{...}', then you must always
> put `1' after `\a', since control sequence names are
> made up of letters only. The macro here has not been
> followed by the required stuff, so I'm ignoring it.
>
> ?
>
>
> Besides, it's not clear to me how I can use that to add an optional argument
> to, say, such a macro:
>
> \def\mymacro#1{%
> Hallo, #1!
> }
All right, now it seems to work:
\catcode`@=\letter
\def\myhallo#1{%
\def\temp <at> arg{#1}%
\@getoptionalarg\@myhallo}
\def\@myhallo{%
\message{^^JArg: \temp <at> arg}%
\message{^^JOptional arg: \@optionalarg}%
\ifx\@optionalarg\empty Hallo, \temp <at> arg!
\else Hallo, \temp <at> arg and \@optionalarg!
\fi
}
\myhallo{John}[Mary]
bla bla
\myhallo{Paul}
\bye
Thanks, bye
Rodolfo
More information about the tex-eplain
mailing list