TeX capacity exceeded - in Lua block - why?
Hello, why this code: ---- \def\GG{\ifmmode G_G\else$\GG$\fi} \starttext \GG $\GG$ % OK \startitemize[][] \sym{\GG} \GG % OK \stopitemize \startluacode context.startitemize() context.sym([[\GG]]) context("Abc") context.stopitemize() \stopluacode \stoptext ---- fails with: " ... tex error > tex error on line 14 in file d://Lukas/Docs/Ull-Gra/Test/Abr.mkiv: ! TeX capacity exceeded, sorry [input stack size=10000] \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi ... l.14 \stopluacode ... " I need to call "\GG" from within Lua, and the real macro name is created run-time (contrary to this MNWE; so to be \GG, \HH, \Fik etc. - the name is obtained from a Lua table as a string). I cannot understand why all TeX calls are OK but the problem appears in Lua block... Best regards, Lukas -- Ing. Lukáš Procházka | mailto:LPr@pontex.cz Pontex s. r. o. | mailto:pontex@pontex.cz | http://www.pontex.cz Bezová 1658 147 14 Praha 4 Tel: +420 241 096 751 Fax: +420 244 461 038
On 7/16/2015 10:20 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
why this code:
---- \def\GG{\ifmmode G_G\else$\GG$\fi}
because in math mode \GG expands \GG which expands \GG .... maybe you mean: \def\GG{\ifmmode G_G\else$GG$\fi}
\starttext \GG $\GG$ % OK \startitemize[][] \sym{\GG} \GG % OK \stopitemize
\startluacode context.startitemize() context.sym([[\GG]]) context("Abc") context.stopitemize() \stopluacode \stoptext ----
fails with:
" .... tex error > tex error on line 14 in file d://Lukas/Docs/Ull-Gra/Test/Abr.mkiv: ! TeX capacity exceeded, sorry [input stack size=10000]
\GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi .... l.14 \stopluacode .... "
I need to call "\GG" from within Lua, and the real macro name is created run-time (contrary to this MNWE; so to be \GG, \HH, \Fik etc. - the name is obtained from a Lua table as a string).
I cannot understand why all TeX calls are OK but the problem appears in Lua block...
Best regards,
Lukas
___________________________________________________________________________________ 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 : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Hello,
On Thu, 16 Jul 2015 10:27:48 +0200, Hans Hagen
On 7/16/2015 10:20 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
why this code:
---- \def\GG{\ifmmode G_G\else$\GG$\fi}
because in math mode \GG expands \GG which expands \GG ....
I want to just pass G_G in math mode, so it seems to me that "\ifmmode G_G..." does the check. The macro should write G + "lower index G" for both math and non-math scope. And, in non math scope, the macro should just enclose itself by $...$ (or \m{...})... And, this works well in TeX code: ---- \def\GG{\ifmmode G_G\else$\GG$\fi} \starttext \GG $\GG$ \startitemize[][] \sym{\GG} \GG \sym{$\GG$} $\GG$ \sym{\m{\GG}} \m{\GG} \item End \stopitemize \stoptext ---- So how to rewrite the itemization into Lua?
maybe you mean:
\def\GG{\ifmmode G_G\else$GG$\fi}
... Could be \def\GG{\ifmmode G_G\else$G_G$\fi}, too, but why not \def\GG{\ifmmode G_G\else$\GG$\fi} (seems to me be simpler as the macro definition - which may be more complicated - appears only once)? Lukas
\starttext \GG $\GG$ % OK \startitemize[][] \sym{\GG} \GG % OK \stopitemize
\startluacode context.startitemize() context.sym([[\GG]]) context("Abc") context.stopitemize() \stopluacode \stoptext ----
fails with:
" .... tex error > tex error on line 14 in file d://Lukas/Docs/Ull-Gra/Test/Abr.mkiv: ! TeX capacity exceeded, sorry [input stack size=10000]
\GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi .... l.14 \stopluacode .... "
I need to call "\GG" from within Lua, and the real macro name is created run-time (contrary to this MNWE; so to be \GG, \HH, \Fik etc. - the name is obtained from a Lua table as a string).
I cannot understand why all TeX calls are OK but the problem appears in Lua block...
Best regards,
Lukas
___________________________________________________________________________________ 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 : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- Ing. Lukáš Procházka | mailto:LPr@pontex.cz Pontex s. r. o. | mailto:pontex@pontex.cz | http://www.pontex.cz Bezová 1658 147 14 Praha 4 Tel: +420 241 096 751 Fax: +420 244 461 038
On Thu, Jul 16, 2015 at 10:55 AM, Procházka Lukáš Ing. - Pontex s. r. o. < LPr@pontex.cz> wrote:
Hello,
On Thu, 16 Jul 2015 10:27:48 +0200, Hans Hagen
wrote: On 7/16/2015 10:20 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
why this code:
---- \def\GG{\ifmmode G_G\else$\GG$\fi}
because in math mode \GG expands \GG which expands \GG ....
I want to just pass G_G in math mode, so it seems to me that "\ifmmode G_G..." does the check.
The macro should write G + "lower index G" for both math and non-math scope.
And, in non math scope, the macro should just enclose itself by $...$ (or \m{...})...
And, this works well in TeX code:
---- \def\GG{\ifmmode G_G\else$\GG$\fi}
\starttext \GG $\GG$ \startitemize[][] \sym{\GG} \GG \sym{$\GG$} $\GG$ \sym{\m{\GG}} \m{\GG} \item End \stopitemize \stoptext ----
So how to rewrite the itemization into Lua?
maybe you mean:
\def\GG{\ifmmode G_G\else$GG$\fi}
... Could be \def\GG{\ifmmode G_G\else$G_G$\fi}, too, but why not \def\GG{\ifmmode G_G\else$\GG$\fi} (seems to me be simpler as the macro definition - which may be more complicated - appears only once)?
\def\GG{\ifmmode G_G\else$\GG$\fi} means "define the macro \GG as G_G if mmmod is true, else as \GG " It's clear that you always are in a situation where mmod is true, then \GG is replaced with G_G but as soon as you fall into "mmod not true" then you have infinite recursion. -- luigi
Hello,
On Thu, 16 Jul 2015 11:03:05 +0200, luigi scarso
\def\GG{\ifmmode G_G\else$\GG$\fi} means "define the macro \GG as G_G if mmmod is true, else as \GG " It's clear that you always are in a situation where mmod is true, then \GG is replaced with G_G
Well, I intended "replaced with $G_G$", not "replaced with G_G"; so I thought this would force/ensure math mode and thus prevent infinite recursion.
but as soon as you fall into "mmod not true" then you have infinite recursion.
Also, my observation was that my original macro worked well when called for TeX code (at various places of use: \GG $\GG$ \startitemize[][] \sym{\GG} \GG \sym{$\GG$} $\GG$ \sym{\m{\GG}} \m{\GG} \item End \stopitemize ) but stopped working when called from Lua (?!). @Hans: This seems to be best solution - exactly what I wanted to achieve: \def\GG{\mathematics{G_G}}. Thanks both for your help. Best ragrds, Lukas -- Ing. Lukáš Procházka | mailto:LPr@pontex.cz Pontex s. r. o. | mailto:pontex@pontex.cz | http://www.pontex.cz Bezová 1658 147 14 Praha 4 Tel: +420 241 096 751 Fax: +420 244 461 038
On 7/16/2015 12:13 PM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
On Thu, 16 Jul 2015 11:03:05 +0200, luigi scarso
wrote: \def\GG{\ifmmode G_G\else$\GG$\fi} means "define the macro \GG as G_G if mmmod is true, else as \GG " It's clear that you always are in a situation where mmod is true, then \GG is replaced with G_G
Well, I intended "replaced with $G_G$", not "replaced with G_G"; so I thought this would force/ensure math mode and thus prevent infinite recursion.
but as soon as you fall into "mmod not true" then you have infinite recursion.
Also, my observation was that my original macro worked well when called for TeX code (at various places of use: \GG $\GG$ \startitemize[][] \sym{\GG} \GG \sym{$\GG$} $\GG$ \sym{\m{\GG}} \m{\GG} \item End \stopitemize ) but stopped working when called from Lua (?!).
it all depends ... if you pass it in a way that it gets expanded you get already expansion at the write you could try \unexpanded\def\GG then it's hard to say what happens unless one sees the whole application (for which i have no time anyway)
@Hans:
This seems to be best solution - exactly what I wanted to achieve: \def\GG{\mathematics{G_G}}.
Thanks both for your help.
Best ragrds,
Lukas
-- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On 7/16/2015 12:13 PM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
This seems to be best solution - exactly what I wanted to achieve: \def\GG{\mathematics{G_G}}.
compare these two: \def\GG{\ifmmode G_G\else$\GG$\fi} \starttext \edef\x{\GG} \stoptext and \unexpanded\def\GG{\ifmmode G_G\else$\GG$\fi} \starttext \edef\x{\GG} \stoptext so it all depends on usage ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On Thu, Jul 16, 2015 at 12:13 PM, Procházka Lukáš Ing. - Pontex s. r. o. < LPr@pontex.cz> wrote:
Hello,
On Thu, 16 Jul 2015 11:03:05 +0200, luigi scarso
wrote: \def\GG{\ifmmode G_G\else$\GG$\fi}
means "define the macro \GG as G_G if mmmod is true, else as \GG " It's clear that you always are in a situation where mmod is true, then \GG is replaced with G_G
Well, I intended "replaced with $G_G$", not "replaced with G_G"; so I thought this would force/ensure math mode and thus prevent infinite recursion.
but as soon as you fall into "mmod not true" then you have infinite
recursion.
Also, my observation was that my original macro worked well when called for TeX code (at various places of use: \GG $\GG$ \startitemize[][] \sym{\GG} \GG \sym{$\GG$} $\GG$ \sym{\m{\GG}} \m{\GG} \item End \stopitemize ) but stopped working when called from Lua (?!).
\def\GG{\ifmmode G_G\else$\GG$\fi} define a macro \GG with replacement text \ifmmode G_G\else$\GG$\fi In your use in TeX, \if is expanded: if we are in mmode then we have the expansion of G ,then _ and then G. If we are not in mmode, then we have the expansion of $ , so we enter in mmode and then we have the expansion of \GG again. In this second level of expansion, we are in mmod for sure and so we end again with G, _ and G. We cannot know what happen in other situations. For example, in \edef\x{\GG} as shown by Hans, at definition time the replacement text is expanded until possible. If at definition time we are not in mmode, this gives the endless sequence \GG ->\ifmmode G_G\else $\GG $\fi {\ifmmode: (level 1) entered on line 9} {false} {\else: \ifmmode (level 1) entered on line 9} \GG ->\ifmmode G_G\else $\GG $\fi {\ifmmode: (level 2) entered on line 9} {false} {\else: \ifmmode (level 2) entered on line 9} \GG ->\ifmmode G_G\else $\GG $\fi {\ifmmode: (level 3) entered on line 9} {false} {\else: \ifmmode (level 3) entered on line 9} \GG ->\ifmmode G_G\else $\GG $\fi .... because in this case the first $ is just accumulated, not interpretated --- i.e. doesn't trig the change of state to math mode. To avoid expansion we can say \edef\x{\noexpand\GG} which means that the replacement text of \x is \GG . Perhaps we can see better here: \def\HH{\ifmmode H_H\else$H_H$\fi} \edef\x{\HH} means, if we are not in mmode when \x is defined, \HH ->\ifmmode H_H\else $H_H$\fi {\ifmmode: (level 1) entered on line 10} {false} {\else: \ifmmode (level 1) entered on line 10} {\fi: \ifmmode (level 1) entered on line 10} {changing \x=undefined} {into \x=macro:->$H_H$} so the replacement text of \x is $H_H$ -- luigi
On 7/16/2015 10:55 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
On Thu, 16 Jul 2015 10:27:48 +0200, Hans Hagen
wrote: On 7/16/2015 10:20 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
why this code:
---- \def\GG{\ifmmode G_G\else$\GG$\fi}
because in math mode \GG expands \GG which expands \GG ....
I want to just pass G_G in math mode, so it seems to me that "\ifmmode G_G..." does the check.
The macro should write G + "lower index G" for both math and non-math scope.
so \def\GG{\ifmmode G_G\else$G\low{G}$\fi} or \def\GG{\mathematics{G_G}} now you do a check in \GG and then call for \GG again so \GG again does a check etc etc ... you just enforce endless recursion
And, in non math scope, the macro should just enclose itself by $...$ (or \m{...})...
And, this works well in TeX code:
---- \def\GG{\ifmmode G_G\else$\GG$\fi}
\starttext \GG $\GG$ \startitemize[][] \sym{\GG} \GG \sym{$\GG$} $\GG$ \sym{\m{\GG}} \m{\GG} \item End \stopitemize \stoptext ----
So how to rewrite the itemization into Lua?
maybe you mean:
\def\GG{\ifmmode G_G\else$GG$\fi}
... Could be \def\GG{\ifmmode G_G\else$G_G$\fi}, too, but why not \def\GG{\ifmmode G_G\else$\GG$\fi} (seems to me be simpler as the macro definition - which may be more complicated - appears only once)?
Lukas
\starttext \GG $\GG$ % OK \startitemize[][] \sym{\GG} \GG % OK \stopitemize
\startluacode context.startitemize() context.sym([[\GG]]) context("Abc") context.stopitemize() \stopluacode \stoptext ----
fails with:
" .... tex error > tex error on line 14 in file d://Lukas/Docs/Ull-Gra/Test/Abr.mkiv: ! TeX capacity exceeded, sorry [input stack size=10000]
\GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi \GG ->\ifmmode G_G\else $\GG $\fi .... l.14 \stopluacode .... "
I need to call "\GG" from within Lua, and the real macro name is created run-time (contrary to this MNWE; so to be \GG, \HH, \Fik etc. - the name is obtained from a Lua table as a string).
I cannot understand why all TeX calls are OK but the problem appears in Lua block...
Best regards,
Lukas
___________________________________________________________________________________
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 : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
participants (3)
-
Hans Hagen
-
luigi scarso
-
Procházka Lukáš Ing. - Pontex s. r. o.