ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Wolfgang Schuster <wolfgang.schuster.lists@gmail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Cc: "Thomas A. Schmitz" <thomas.schmitz@uni-bonn.de>
Subject: Re: line numbering within frame
Date: Sat, 25 Jan 2020 19:17:04 +0100	[thread overview]
Message-ID: <20200125191704.1a99491f9dd5e956caad30d7@gmail.com> (raw)
In-Reply-To: <FB0A0CB1-682D-4444-BD90-539B4C2D1B03@uni-bonn.de>

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

> > On 23. Jan 2020, at 22:32, Wolfgang Schuster <wolfgang.schuster.lists@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	other threads:[~2020-01-25 18:17 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-23 10:54 Thomas A. Schmitz
2020-01-23 11:45 ` Tomas Hala
2020-01-23 21:32   ` Wolfgang Schuster
2020-01-23 21:53     ` Thomas A. Schmitz
2020-01-25 18:17       ` Wolfgang Schuster [this message]
2020-01-26 12:49         ` Thomas A. Schmitz
2020-01-24 17:45   ` Thomas A. Schmitz
2020-01-24 17:57     ` Tomas Hala
2020-01-24 19:06       ` Wolfgang Schuster

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=20200125191704.1a99491f9dd5e956caad30d7@gmail.com \
    --to=wolfgang.schuster.lists@gmail.com \
    --cc=ntg-context@ntg.nl \
    --cc=thomas.schmitz@uni-bonn.de \
    /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).