ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* unusual behaviour of \if(x)
@ 2011-06-01 13:26 Mojca Miklavec
  2011-06-01 13:36 ` Wolfgang Schuster
  2011-06-01 13:46 ` luigi scarso
  0 siblings, 2 replies; 9+ messages in thread
From: Mojca Miklavec @ 2011-06-01 13:26 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Dear magitians,

I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
behaves differently). Can somebody please explain me why this code
fails to work? (A workaround is to move \newif on top which I'm
willing to do, but I'm still curious.)

\starttext

\ifx\hbox\undefined
  \message{invisible to tex}
  \newif\ifabc \abcfalse
  \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
\fi

\stoptext


systems         : begin file iftest at line 1
abc false breaks
! Extra \fi.
l.7 \fi

or

abc false breaks
! Extra \fi.

system          > tex > error on line 7 in file iftest.tex: Extra  ...

 1     \starttext
 2
 3     \ifx\hbox\undefined
 4       \message{invisible to tex}
 5       \newif\ifabc \abcfalse
 6       \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
 7 >>  \fi
 8
 9     \stoptext
10

l.7 \fi

Mojca
___________________________________________________________________________________
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
___________________________________________________________________________________


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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:26 unusual behaviour of \if(x) Mojca Miklavec
@ 2011-06-01 13:36 ` Wolfgang Schuster
  2011-06-01 13:52   ` Mojca Miklavec
  2011-06-01 13:46 ` luigi scarso
  1 sibling, 1 reply; 9+ messages in thread
From: Wolfgang Schuster @ 2011-06-01 13:36 UTC (permalink / raw)
  To: mailing list for ConTeXt users


Am 01.06.2011 um 15:26 schrieb Mojca Miklavec:

> Dear magitians,
> 
> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
> behaves differently). Can somebody please explain me why this code
> fails to work? (A workaround is to move \newif on top which I'm
> willing to do, but I'm still curious.)
> 
> \starttext
> 
> \ifx\hbox\undefined
>  \message{invisible to tex}
>  \newif\ifabc \abcfalse
>  \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
> \fi
> 
> \stoptext
> 
> 
> systems         : begin file iftest at line 1
> abc false breaks
> ! Extra \fi.
> l.7 \fi

The \ifx ends with the first \fi from \ifabc which isn’t defined and
ignored by TeX, the last \fi is left which generates the error message

Wolfgang

___________________________________________________________________________________
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
___________________________________________________________________________________


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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:26 unusual behaviour of \if(x) Mojca Miklavec
  2011-06-01 13:36 ` Wolfgang Schuster
@ 2011-06-01 13:46 ` luigi scarso
  2011-06-01 13:56   ` Hans Hagen
  1 sibling, 1 reply; 9+ messages in thread
From: luigi scarso @ 2011-06-01 13:46 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Wed, Jun 1, 2011 at 3:26 PM, Mojca Miklavec
<mojca.miklavec.lists@gmail.com> wrote:
> Dear magitians,
>
> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
> behaves differently). Can somebody please explain me why this code
> fails to work? (A workaround is to move \newif on top which I'm
> willing to do, but I'm still curious.)
>
> \starttext
>
> \ifx\hbox\undefined
>  \message{invisible to tex}
>  \newif\ifabc \abcfalse
>  \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
> \fi
>
> \stoptext
(see wolfgang)
this works

\newif\ifabc
\starttext

\ifx\dhbox\undefined
 \message{dhbox invisible to tex}
   \abcfalse
   \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
\fi


\ifx\hbox\undefined
 \message{hbox invisible to tex}
   \abcfalse
   \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
\fi


\stoptext



-- 
luigi
___________________________________________________________________________________
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
___________________________________________________________________________________

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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:36 ` Wolfgang Schuster
@ 2011-06-01 13:52   ` Mojca Miklavec
  2011-06-01 14:08     ` Hans Hagen
  2011-06-01 14:10     ` luigi scarso
  0 siblings, 2 replies; 9+ messages in thread
From: Mojca Miklavec @ 2011-06-01 13:52 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Wed, Jun 1, 2011 at 15:36, Wolfgang Schuster wrote:
>
> Am 01.06.2011 um 15:26 schrieb Mojca Miklavec:
>
>> Dear magitians,
>>
>> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
>> behaves differently). Can somebody please explain me why this code
>> fails to work? (A workaround is to move \newif on top which I'm
>> willing to do, but I'm still curious.)
>>
>> \starttext
>>
>> \ifx\hbox\undefined
>>  \message{invisible to tex}
>>  \newif\ifabc \abcfalse
>>  \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>> \fi
>>
>> \stoptext
>>
>>
>> systems         : begin file iftest at line 1
>> abc false breaks
>> ! Extra \fi.
>> l.7 \fi
>
> The \ifx ends with the first \fi

I figured that out, but I still find it very weird.

> from \ifabc which isn’t defined and
> ignored by TeX

This part somehow makes sense (TeX should not keep defining stuff and
writing out stuff) ...

> the last \fi is left which generates the error message

The code works when using \ifx\hboxx\undefined ... But despite the
explanation, this is very very very weird. Or to quote Taco: "The
trick of TeX being bug-free is that all the bugs and limitations are
documented." I hope that this behaviour is documented in TeXbook.

To some extent this resembles
/* I want to comment out this code
   c = a + b;
   /* a more complex equation */
   c = a * b;
*/
but it is not quite the same.

Mojca
___________________________________________________________________________________
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
___________________________________________________________________________________

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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:46 ` luigi scarso
@ 2011-06-01 13:56   ` Hans Hagen
  2011-06-01 14:01     ` luigi scarso
  0 siblings, 1 reply; 9+ messages in thread
From: Hans Hagen @ 2011-06-01 13:56 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 1-6-2011 3:46, luigi scarso wrote:
> On Wed, Jun 1, 2011 at 3:26 PM, Mojca Miklavec
> <mojca.miklavec.lists@gmail.com>  wrote:
>> Dear magitians,
>>
>> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
>> behaves differently). Can somebody please explain me why this code
>> fails to work? (A workaround is to move \newif on top which I'm
>> willing to do, but I'm still curious.)
>>
>> \starttext
>>
>> \ifx\hbox\undefined
>>   \message{invisible to tex}
>>   \newif\ifabc \abcfalse
>>   \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>> \fi
>>
>> \stoptext
> (see wolfgang)
> this works
>
> \newif\ifabc
> \starttext
>
> \ifx\dhbox\undefined
>   \message{dhbox invisible to tex}
>     \abcfalse
>     \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
> \fi
>
>
> \ifx\hbox\undefined
>   \message{hbox invisible to tex}
>     \abcfalse
>     \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
> \fi

hm, you want to start an \ifx pissing contest ... ?

\ifx\hbox\undefined
     \message{invisible to tex}
     \newif\ifabc \abcfalse
     \ifcsname ifabc\endcsname \message{abc true breaks} \else 
\message{abc false breaks} \fi
\fi



-----------------------------------------------------------------
                                           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
-----------------------------------------------------------------
___________________________________________________________________________________
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
___________________________________________________________________________________


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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:56   ` Hans Hagen
@ 2011-06-01 14:01     ` luigi scarso
  2011-06-01 14:09       ` Wolfgang Schuster
  0 siblings, 1 reply; 9+ messages in thread
From: luigi scarso @ 2011-06-01 14:01 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Wed, Jun 1, 2011 at 3:56 PM, Hans Hagen <pragma@wxs.nl> wrote:
> On 1-6-2011 3:46, luigi scarso wrote:
>>
>> On Wed, Jun 1, 2011 at 3:26 PM, Mojca Miklavec
>> <mojca.miklavec.lists@gmail.com>  wrote:
>>>
>>> Dear magitians,
>>>
>>> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
>>> behaves differently). Can somebody please explain me why this code
>>> fails to work? (A workaround is to move \newif on top which I'm
>>> willing to do, but I'm still curious.)
>>>
>>> \starttext
>>>
>>> \ifx\hbox\undefined
>>>  \message{invisible to tex}
>>>  \newif\ifabc \abcfalse
>>>  \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>>> \fi
>>>
>>> \stoptext
>>
>> (see wolfgang)
>> this works
>>
>> \newif\ifabc
>> \starttext
>>
>> \ifx\dhbox\undefined
>>  \message{dhbox invisible to tex}
>>    \abcfalse
>>    \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>> \fi
>>
>>
>> \ifx\hbox\undefined
>>  \message{hbox invisible to tex}
>>    \abcfalse
>>    \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>> \fi
>
> hm, you want to start an \ifx pissing contest ... ?
>
> \ifx\hbox\undefined
>    \message{invisible to tex}
>    \newif\ifabc \abcfalse
>    \ifcsname ifabc\endcsname \message{abc true breaks} \else \message{abc
> false breaks} \fi
> \fi


no, --- infact I've said "this works", not "it's the only solution" or
" it's the perfect solution".
\ifcsname...
looks a bit strange if I'm working with \newif .



-- 
luigi
___________________________________________________________________________________
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
___________________________________________________________________________________

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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:52   ` Mojca Miklavec
@ 2011-06-01 14:08     ` Hans Hagen
  2011-06-01 14:10     ` luigi scarso
  1 sibling, 0 replies; 9+ messages in thread
From: Hans Hagen @ 2011-06-01 14:08 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Mojca Miklavec

On 1-6-2011 3:52, Mojca Miklavec wrote:
> On Wed, Jun 1, 2011 at 15:36, Wolfgang Schuster wrote:
>>
>> Am 01.06.2011 um 15:26 schrieb Mojca Miklavec:
>>
>>> Dear magitians,
>>>
>>> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
>>> behaves differently). Can somebody please explain me why this code
>>> fails to work? (A workaround is to move \newif on top which I'm
>>> willing to do, but I'm still curious.)
>>>
>>> \starttext
>>>
>>> \ifx\hbox\undefined
>>>   \message{invisible to tex}
>>>   \newif\ifabc \abcfalse
>>>   \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>>> \fi
>>>
>>> \stoptext
>>>
>>>
>>> systems         : begin file iftest at line 1
>>> abc false breaks
>>> ! Extra \fi.
>>> l.7 \fi
>>
>> The \ifx ends with the first \fi
>
> I figured that out, but I still find it very weird.
>
>> from \ifabc which isn’t defined and
>> ignored by TeX
>
> This part somehow makes sense (TeX should not keep defining stuff and
> writing out stuff) ...
>
>> the last \fi is left which generates the error message
>
> The code works when using \ifx\hboxx\undefined ... But despite the
> explanation, this is very very very weird. Or to quote Taco: "The
> trick of TeX being bug-free is that all the bugs and limitations are
> documented." I hope that this behaviour is documented in TeXbook.

Actually the code does what it is supposed to do .. tex's scanner does a 
fast scan for \else\fi and nested \if's so when you define one in a to 
be skipped branch you're on your own.

The reason why plain tex behaves a bit different is that there \newif is 
defined as outer. Actually, you might like to stare for a while at the 
definition of \newif, especially if you love catcodes.

All language have their specialities, like

local l = {
     ["in"] = "in",
     out    = "out",
}

in Lua.


-----------------------------------------------------------------
                                           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
-----------------------------------------------------------------
___________________________________________________________________________________
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
___________________________________________________________________________________

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

* Re: unusual behaviour of \if(x)
  2011-06-01 14:01     ` luigi scarso
@ 2011-06-01 14:09       ` Wolfgang Schuster
  0 siblings, 0 replies; 9+ messages in thread
From: Wolfgang Schuster @ 2011-06-01 14:09 UTC (permalink / raw)
  To: mailing list for ConTeXt users


Am 01.06.2011 um 16:01 schrieb luigi scarso:

> no, --- infact I've said "this works", not "it's the only solution" or
> " it's the perfect solution".
> \ifcsname...
> looks a bit strange if I'm working with \newif .

And he’s cheating because he tests only the existence of the \ifabc command.

It’s easier to understand with the \ifdefined:

\ifx\hbox\undefined
   \newif\ifabc \abcfalse
   \ifdefined\ifabc … \else … \fi
\fi

Wolfgang

___________________________________________________________________________________
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
___________________________________________________________________________________


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

* Re: unusual behaviour of \if(x)
  2011-06-01 13:52   ` Mojca Miklavec
  2011-06-01 14:08     ` Hans Hagen
@ 2011-06-01 14:10     ` luigi scarso
  1 sibling, 0 replies; 9+ messages in thread
From: luigi scarso @ 2011-06-01 14:10 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Wed, Jun 1, 2011 at 3:52 PM, Mojca Miklavec
<mojca.miklavec.lists@gmail.com> wrote:
> On Wed, Jun 1, 2011 at 15:36, Wolfgang Schuster wrote:
>>
>> Am 01.06.2011 um 15:26 schrieb Mojca Miklavec:
>>
>>> Dear magitians,
>>>
>>> I discovered this in LaTeX, but ConTeXt behaves the same (plain TeX
>>> behaves differently). Can somebody please explain me why this code
>>> fails to work? (A workaround is to move \newif on top which I'm
>>> willing to do, but I'm still curious.)
>>>
>>> \starttext
>>>
>>> \ifx\hbox\undefined
>>>  \message{invisible to tex}
>>>  \newif\ifabc \abcfalse
>>>  \ifabc \message{abc true breaks} \else \message{abc false breaks} \fi
>>> \fi
>>>
>>> \stoptext
>>>
>>>
>>> systems         : begin file iftest at line 1
>>> abc false breaks
>>> ! Extra \fi.
>>> l.7 \fi
>>
>> The \ifx ends with the first \fi
>
> I figured that out, but I still find it very weird.
>
>> from \ifabc which isn’t defined and
>> ignored by TeX
>
> This part somehow makes sense (TeX should not keep defining stuff and
> writing out stuff) ...
>
>> the last \fi is left which generates the error message
>
> The code works when using \ifx\hboxx\undefined ... But despite the
> explanation, this is very very very weird. Or to quote Taco: "The
> trick of TeX being bug-free is that all the bugs and limitations are
> documented." I hope that this behaviour is documented in TeXbook.
>
> To some extent this resembles
> /* I want to comment out this code
>   c = a + b;
>   /* a more complex equation */
>   c = a * b;
> */
> but it is not quite the same.
see TeX by Topic e.g.
13.7 Evaluation of conditionals


-- 
luigi
___________________________________________________________________________________
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
___________________________________________________________________________________

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

end of thread, other threads:[~2011-06-01 14:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-01 13:26 unusual behaviour of \if(x) Mojca Miklavec
2011-06-01 13:36 ` Wolfgang Schuster
2011-06-01 13:52   ` Mojca Miklavec
2011-06-01 14:08     ` Hans Hagen
2011-06-01 14:10     ` luigi scarso
2011-06-01 13:46 ` luigi scarso
2011-06-01 13:56   ` Hans Hagen
2011-06-01 14:01     ` luigi scarso
2011-06-01 14:09       ` Wolfgang Schuster

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).