ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: luigi scarso <luigi.scarso@gmail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: TeX capacity exceeded - in Lua block - why?
Date: Thu, 16 Jul 2015 15:29:10 +0200	[thread overview]
Message-ID: <CAG5iGsDM1Eae48FGq3_jLvWHWOhbW=0Oj5w1gZhPbEdhK0v3Hw@mail.gmail.com> (raw)
In-Reply-To: <op.x1u2o2futpjj8f@lpr>


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

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 <luigi.scarso@gmail.com>
> 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

[-- Attachment #1.2: Type: text/html, Size: 4678 bytes --]

[-- Attachment #2: Type: text/plain, Size: 485 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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

  parent reply	other threads:[~2015-07-16 13:29 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-16  8:20 Procházka Lukáš Ing. - Pontex s. r. o.
2015-07-16  8:27 ` Hans Hagen
2015-07-16  8:55   ` Procházka Lukáš Ing. - Pontex s. r. o.
2015-07-16  9:03     ` luigi scarso
2015-07-16 10:13       ` Procházka Lukáš Ing. - Pontex s. r. o.
2015-07-16 10:45         ` Hans Hagen
2015-07-16 10:52         ` Hans Hagen
2015-07-16 13:29         ` luigi scarso [this message]
2015-07-16  9:29     ` Hans Hagen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAG5iGsDM1Eae48FGq3_jLvWHWOhbW=0Oj5w1gZhPbEdhK0v3Hw@mail.gmail.com' \
    --to=luigi.scarso@gmail.com \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).