On Thu, 23 Jan 2020 22:53:42 +0100
"Thomas A. Schmitz" <thomas.schm...@uni-bonn.de> wrote:

> > On 23. Jan 2020, at 22:32, Wolfgang Schuster 
> > <wolfgang.schuster.li...@gmail.com> wrote:
> > 
> > Bonus question: Why is it necessary to put \definelinenumbering before 
> > \framed?
> > 
> > Wolfgang
> 
> I would be grateful for an answer because I have no clue ;-) In my real life 
> case, I fetch the content of the frame from an xml file. Since not every 
> frame has line numbering, I am already inside the frame when I have to define 
> and set up the line numbering environment. I can probably code around it, but 
> it makes my life definitely more difficult…


Before I give the answer to the question we have to go back to a few 
TeX/ConTeXt basics.


# Grouping

When you create a new command it is normally local to the current group level 
and after you end the group the command no longer exists.

In the following example I redefine the value for the color red in a group, 
when the group ends the new value is forgotten and the previous one is used. 
When you now create a new command or environment in the group and try to use it 
after its end you will get a error message (something I tried to avoid with the 
example) about an undefined command.

%%%% begin example
\starttext

\color[red]{Red}

\start

\definecolor[red][b=1]

\color[red]{Red}

\stop

\color[red]{Red}

\stoptext
%%%% end example


# Inheritance

When you create a new command or environment with \define... the new instance 
inherits most of its values from a parent instance.

You can overwrite individual values for your new instance but all other values 
are taken from the parent.

%%%% begin example
\setupframed[foregroundstyle=bold]

\defineframed[customframe][framecolor=red]

\starttext

\framed{Framed text!}

\placeframed[customframe]{Framed text!}

\stoptext
%%%% end example

When you can combine this with the previous section which explained grouping 
and overwrite values within the group. After the group has ended the new values 
are forgotten and the instance uses what was set before the group.

%%%% begin example
\defineframed[customframe][framecolor=red]

\starttext

\placeframed[customframe]{Framed text!}

\start

\setupframed[customframe][foregroundstyle=bold]

\placeframed[customframe]{Framed text!}

\stop

\placeframed[customframe]{Framed text!}

\stoptext
%%%% end example


# Line numbering

Line numbering in MkIV happens at a different point as it did in MkII. When you 
use line numbers for \framed (or \startframedtext) ConTeXt adds the numbers to 
the frame after the framed box is completed.

When the framed content is put in the box you're always within a group which 
means the numbers are added after the group has ended and as explained in the 
two sections above settings within a group normally are forgotten afterwards.

The first and bigger problem is that you try to create a new line numbering 
instance in each frame which no longer exists when the numbers are added and 
when ConTeXt tries to access values of this no longer existing instance in 
fails to get them which results in the error message.

%%%% begin example
\starttext

\startframedtext

\definelinenumbering[example]

\startlinenumbering[example]

\samplefile{klein}

\stoplinenumbering

\stopframedtext

\stoptext
%%%% end example

The minor problem is that you local changes for each instance (e.g. the color 
for the numbers) are also forgotten because you set them within the group. Only 
a limited numbers of values can be set in a group (e.g. the starting number) 
and they have to bet set with \startlinenumbering, this is possible because 
they are passed to Lua which ignores TeX groups.

While new linenumbering instances outside of frames are save in most cases you 
should try to avoid this and do it at the begin of the document because even 
here you can run into problems. Below is a example where I show that you can 
get the same error as in your example with line numbers for the whole page.

%%%% begin example
\setupsectionblock[bodypart][page=no]

\starttext

\startbodymatter

\definelinenumbering[example]

\startlinenumbering[example]

\samplefile{klein}

\stoplinenumbering

\stopbodymatter

\stoptext
%%%% end example


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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to