ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* vardef with @# not working within context
@ 2009-09-21 11:56 Matthijs Kooijman
  2009-09-21 12:20 ` Aditya Mahajan
  0 siblings, 1 reply; 10+ messages in thread
From: Matthijs Kooijman @ 2009-09-21 11:56 UTC (permalink / raw)
  To: Mailing list for ConTeXt users


[-- Attachment #1.1: Type: text/plain, Size: 1254 bytes --]

Hi all,

I've been fiddling around with metaobj a bit, but defining my own objects
failed. After some debugging, I've reduced this to a metapost / context MkIV
issue (so no metaobj specifics anymore).

What happens, is that vardefs that use @# as a placeholder in their name only
work when they are defined in an external .mp file. When I define them inside
context (\startMPcode or \startMPinclusions), I get funny errors (mostly
"Isolated expression", which seems to mean that the macro is not defined).

I suspect this is because the way context extracts metapost code. Is this a
fundamental problem, or could it be fixed?

The following context file will easily reproduce the problem:

\starttext
\startMPcode
    vardef foo = draw (0mm,0mm)--(10mm,10mm); enddef;
    foo;

    vardef xy@# = (@#,@#) enddef ;
    draw xy0mm -- xy10mm; 
\stopMPcode
\stoptext

Running this file gives the following (first) error:
  mplib | mp terminal: >> xy0mm
  ! Improper `addto'.

To illustrate that this is specific to the use of @#, I've included the foo
vardef which does work properly. When I move the vardef xy.. line to a
separate file, say foo.mp, and replace it with "input foo;", the errors
disappear.

Gr.

Matthijs

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

[-- Attachment #2: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 11:56 vardef with @# not working within context Matthijs Kooijman
@ 2009-09-21 12:20 ` Aditya Mahajan
  2009-09-21 13:42   ` Hans Hagen
  0 siblings, 1 reply; 10+ messages in thread
From: Aditya Mahajan @ 2009-09-21 12:20 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Mon, 21 Sep 2009, Matthijs Kooijman wrote:

> Hi all,
>
> I've been fiddling around with metaobj a bit, but defining my own objects
> failed. After some debugging, I've reduced this to a metapost / context MkIV
> issue (so no metaobj specifics anymore).
>
> What happens, is that vardefs that use @# as a placeholder in their name only
> work when they are defined in an external .mp file. When I define them inside
> context (\startMPcode or \startMPinclusions), I get funny errors (mostly
> "Isolated expression", which seems to mean that the macro is not defined).
>
> I suspect this is because the way context extracts metapost code. Is this a
> fundamental problem, or could it be fixed?

You need to escape # inside any \startMPwhatever...\stopMPwhatever. This 
has to do with the fact that TeX processes the contents before they 
are passed to metapost, and TeX does not like isolated #. Try replacing
# with \# or \string#

Hans, does it make sense to parse all MP environments (ironically except 
\startMPenvironment, but that is almost redundant in MKIV) with a separate 
catcode regime where # has catcode other. After all, it is highly unlikely 
that anyone will define a TeX maco inside \startMPcode or 
\startMPinclusions.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 12:20 ` Aditya Mahajan
@ 2009-09-21 13:42   ` Hans Hagen
  2009-09-21 15:38     ` Aditya Mahajan
  2009-09-22  8:50     ` Matthijs Kooijman
  0 siblings, 2 replies; 10+ messages in thread
From: Hans Hagen @ 2009-09-21 13:42 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Aditya Mahajan wrote:
> On Mon, 21 Sep 2009, Matthijs Kooijman wrote:
> 
>> Hi all,
>>
>> I've been fiddling around with metaobj a bit, but defining my own objects
>> failed. After some debugging, I've reduced this to a metapost / 
>> context MkIV
>> issue (so no metaobj specifics anymore).
>>
>> What happens, is that vardefs that use @# as a placeholder in their 
>> name only
>> work when they are defined in an external .mp file. When I define them 
>> inside
>> context (\startMPcode or \startMPinclusions), I get funny errors (mostly
>> "Isolated expression", which seems to mean that the macro is not 
>> defined).
>>
>> I suspect this is because the way context extracts metapost code. Is 
>> this a
>> fundamental problem, or could it be fixed?
> 
> You need to escape # inside any \startMPwhatever...\stopMPwhatever. This 
> has to do with the fact that TeX processes the contents before they are 
> passed to metapost, and TeX does not like isolated #. Try replacing
> # with \# or \string#

it's more that tex likes to duplicate the # internally

> Hans, does it make sense to parse all MP environments (ironically except 
> \startMPenvironment, but that is almost redundant in MKIV) with a 
> separate catcode regime where # has catcode other. After all, it is 
> highly unlikely that anyone will define a TeX maco inside \startMPcode 
> or \startMPinclusions.

how about adding

let @## = @# ;

to mp-tool.mp (you need to remake the context format in mkiv or the 
metafun format in mkii)

seems to work

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 13:42   ` Hans Hagen
@ 2009-09-21 15:38     ` Aditya Mahajan
  2009-09-21 17:42       ` Hans Hagen
  2009-09-22  8:50     ` Matthijs Kooijman
  1 sibling, 1 reply; 10+ messages in thread
From: Aditya Mahajan @ 2009-09-21 15:38 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Mon, 21 Sep 2009, Hans Hagen wrote:

> how about adding
>
> let @## = @# ;
>
> to mp-tool.mp (you need to remake the context format in mkiv or the metafun 
> format in mkii)
>
> seems to work

Works in mkiv, but in mkii I get an error with

\starttext
\startMPcode
    vardef foo = draw (0mm,0mm)--(10mm,10mm); enddef;
    foo;

    vardef xy@# = (@#,@#) enddef ;
    draw xy0mm -- xy10mm;
\stopMPcode
\stoptext

! Illegal parameter number in definition of \@MPG@@@.
<to be read again>

vardef xy@## .m,10mm); enddef;
draw ...                                          = (@##,@##) enddef ;

\dodostartuseMPgraphic ...useMPgraphic {#1}{#2}{#3
                                                   }}\elabelgroup
\dostartMPcode ...graphic {@@}#1\stopuseMPgraphic
                                                   \useMPgraphic 
{@@}\endgroup
l.9 \stopMPcode

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 15:38     ` Aditya Mahajan
@ 2009-09-21 17:42       ` Hans Hagen
  2009-09-21 18:04         ` Aditya Mahajan
  0 siblings, 1 reply; 10+ messages in thread
From: Hans Hagen @ 2009-09-21 17:42 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Aditya Mahajan wrote:
> On Mon, 21 Sep 2009, Hans Hagen wrote:
> 
>> how about adding
>>
>> let @## = @# ;
>>
>> to mp-tool.mp (you need to remake the context format in mkiv or the 
>> metafun format in mkii)
>>
>> seems to work
> 
> Works in mkiv, but in mkii I get an error with
> 
> \starttext
> \startMPcode
>    vardef foo = draw (0mm,0mm)--(10mm,10mm); enddef;
>    foo;
> 
>    vardef xy@# = (@#,@#) enddef ;
>    draw xy0mm -- xy10mm;
> \stopMPcode
> \stoptext
> 
> ! Illegal parameter number in definition of \@MPG@@@.
> <to be read again>

hm, weird. did you remake the metafun format?

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 17:42       ` Hans Hagen
@ 2009-09-21 18:04         ` Aditya Mahajan
  2009-09-21 18:30           ` Hans Hagen
  0 siblings, 1 reply; 10+ messages in thread
From: Aditya Mahajan @ 2009-09-21 18:04 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Mon, 21 Sep 2009, Hans Hagen wrote:

> Aditya Mahajan wrote:
>> On Mon, 21 Sep 2009, Hans Hagen wrote:
>> 
>>> how about adding
>>> 
>>> let @## = @# ;
>>> 
>>> to mp-tool.mp (you need to remake the context format in mkiv or the 
>>> metafun format in mkii)
>>> 
>>> seems to work
>> 
>> Works in mkiv, but in mkii I get an error with
>> 
>> \starttext
>> \startMPcode
>>    vardef foo = draw (0mm,0mm)--(10mm,10mm); enddef;
>>    foo;
>>
>>    vardef xy@# = (@#,@#) enddef ;
>>    draw xy0mm -- xy10mm;
>> \stopMPcode
>> \stoptext
>> 
>> ! Illegal parameter number in definition of \@MPG@@@.
>> <to be read again>
>
> hm, weird. did you remake the metafun format?

I did. Just to verify, I created an mp file

beginfig(1) ;
vardef xy@## = (@##,@##) enddef ;
     draw xy0mm -- xy10mm;
endfig;
end;

and ran  mpost -progname=metafun test.mp   which gives me the correct 
output, so @## is defined. I am using 2009.09.18. I'll try later with the 
latest beta.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 18:04         ` Aditya Mahajan
@ 2009-09-21 18:30           ` Hans Hagen
  2009-09-21 18:34             ` Aditya Mahajan
  0 siblings, 1 reply; 10+ messages in thread
From: Hans Hagen @ 2009-09-21 18:30 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Aditya Mahajan wrote:
> On Mon, 21 Sep 2009, Hans Hagen wrote:
> 
>> Aditya Mahajan wrote:
>>> On Mon, 21 Sep 2009, Hans Hagen wrote:
>>>
>>>> how about adding
>>>>
>>>> let @## = @# ;
>>>>
>>>> to mp-tool.mp (you need to remake the context format in mkiv or the 
>>>> metafun format in mkii)
>>>>
>>>> seems to work
>>>
>>> Works in mkiv, but in mkii I get an error with
>>>
>>> \starttext
>>> \startMPcode
>>>    vardef foo = draw (0mm,0mm)--(10mm,10mm); enddef;
>>>    foo;
>>>
>>>    vardef xy@# = (@#,@#) enddef ;
>>>    draw xy0mm -- xy10mm;
>>> \stopMPcode
>>> \stoptext
>>>
>>> ! Illegal parameter number in definition of \@MPG@@@.
>>> <to be read again>
>>
>> hm, weird. did you remake the metafun format?
> 
> I did. Just to verify, I created an mp file
> 
> beginfig(1) ;
> vardef xy@## = (@##,@##) enddef ;
>     draw xy0mm -- xy10mm;
> endfig;
> end;
> 
> and ran  mpost -progname=metafun test.mp   which gives me the correct 
> output, so @## is defined. I am using 2009.09.18. I'll try later with 
> the latest beta.

in supp-mps.mkii, patch:

\long\def\runtimeobeyMPlines
   {\catcode35=11\relax % goodie
    \ifx\rawcharacter\undefined

better than nothing


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 18:30           ` Hans Hagen
@ 2009-09-21 18:34             ` Aditya Mahajan
  0 siblings, 0 replies; 10+ messages in thread
From: Aditya Mahajan @ 2009-09-21 18:34 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Mon, 21 Sep 2009, Hans Hagen wrote:

> Aditya Mahajan wrote:
>> On Mon, 21 Sep 2009, Hans Hagen wrote:
>> 
>>> Aditya Mahajan wrote:
>>>> On Mon, 21 Sep 2009, Hans Hagen wrote:
>>>> 
>>>>> how about adding
>>>>> 
>>>>> let @## = @# ;
>>>>> 
>>>>> to mp-tool.mp (you need to remake the context format in mkiv or the 
>>>>> metafun format in mkii)
>>>>> 
>>>>> seems to work
>>>> 
>>>> Works in mkiv, but in mkii I get an error with
>>>> 
>>>> \starttext
>>>> \startMPcode
>>>>    vardef foo = draw (0mm,0mm)--(10mm,10mm); enddef;
>>>>    foo;
>>>>
>>>>    vardef xy@# = (@#,@#) enddef ;
>>>>    draw xy0mm -- xy10mm;
>>>> \stopMPcode
>>>> \stoptext
>>>> 
>>>> ! Illegal parameter number in definition of \@MPG@@@.
>>>> <to be read again>
>>> 
>>> hm, weird. did you remake the metafun format?
>> 
>> I did. Just to verify, I created an mp file
>> 
>> beginfig(1) ;
>> vardef xy@## = (@##,@##) enddef ;
>>     draw xy0mm -- xy10mm;
>> endfig;
>> end;
>> 
>> and ran  mpost -progname=metafun test.mp   which gives me the correct 
>> output, so @## is defined. I am using 2009.09.18. I'll try later with the 
>> latest beta.
>
> in supp-mps.mkii, patch:
>
> \long\def\runtimeobeyMPlines
>  {\catcode35=11\relax % goodie
>   \ifx\rawcharacter\undefined
>
> better than nothing

This works.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-21 13:42   ` Hans Hagen
  2009-09-21 15:38     ` Aditya Mahajan
@ 2009-09-22  8:50     ` Matthijs Kooijman
  2009-09-22  9:56       ` Hans Hagen
  1 sibling, 1 reply; 10+ messages in thread
From: Matthijs Kooijman @ 2009-09-22  8:50 UTC (permalink / raw)
  To: mailing list for ConTeXt users


[-- Attachment #1.1: Type: text/plain, Size: 449 bytes --]

Hi Hans,

> it's more that tex likes to duplicate the # internally
Ah, yes, I've seen some mentions on @## in error messages, but I thought that
was just part of the way metapost handled @#. Apparently not :-)

> how about adding
>
> let @## = @# ;
>
> to mp-tool.mp (you need to remake the context format in mkiv or the  
> metafun format in mkii)
This worked for me in MkIV. Will this be included in the next beta?

Gr.

Matthijs

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

[-- Attachment #2: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: vardef with @# not working within context
  2009-09-22  8:50     ` Matthijs Kooijman
@ 2009-09-22  9:56       ` Hans Hagen
  0 siblings, 0 replies; 10+ messages in thread
From: Hans Hagen @ 2009-09-22  9:56 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Matthijs Kooijman wrote:
> Hi Hans,
> 
>> it's more that tex likes to duplicate the # internally
> Ah, yes, I've seen some mentions on @## in error messages, but I thought that
> was just part of the way metapost handled @#. Apparently not :-)
> 
>> how about adding
>>
>> let @## = @# ;
>>
>> to mp-tool.mp (you need to remake the context format in mkiv or the  
>> metafun format in mkii)
> This worked for me in MkIV. Will this be included in the next beta?

sure

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-09-22  9:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-21 11:56 vardef with @# not working within context Matthijs Kooijman
2009-09-21 12:20 ` Aditya Mahajan
2009-09-21 13:42   ` Hans Hagen
2009-09-21 15:38     ` Aditya Mahajan
2009-09-21 17:42       ` Hans Hagen
2009-09-21 18:04         ` Aditya Mahajan
2009-09-21 18:30           ` Hans Hagen
2009-09-21 18:34             ` Aditya Mahajan
2009-09-22  8:50     ` Matthijs Kooijman
2009-09-22  9:56       ` Hans Hagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).