Dear list, I have an error when I try to insert a block inside a conditional mode (but there is two nested conditional mode.. is this the problem ?). In my courses notes, I insert some blocks (named « Complement » in the minimal exemple below) when in « Professor » mode. This works fine, as shown in the first « \beginComplement … \endComplement » of my example below. But now I have to use another condition for some blocks, depending of the number of the current course. So I insert my block with a condition, here « CourseOne » : \enablemode[CourseOne] \doifmode{CourseOne}{ \beginComplement Another complementary slide. \endComplement } But this does not work : % ———— tex error > tex error on line 1 in file /Users/fabricel/context/tex/texmf-context/tex/context/base/mkiv/cont-yes.mkiv: ! TeX capacity exceeded, sorry [input stack size=50000] % ———— The problem can be summarized in this minimal non working example : % — MWE ————————————————————— \setuppapersize[S5][S5] \enablemode[Professor] \defineblock[Complement] \setupblock[Complement][ before={\page[yes]\setuppagenumber[state=stop]\setupheadertexts[]\setupbackgrounds[page][background=color,backgroundcolor=red]}, after={\page[yes]\setuppagenumber[state=start]}] \doifallmodes{Professor} { \keepblocks[Complement] } \starttext page 1 \beginComplement A complementary slide. \endComplement page 2 \enablemode[CourseOne] \doifmode{CourseOne}{ \beginComplement Another complementary slide but only for course number 1. \endComplement } \disablemode[CourseOne] page 3 \enablemode[CourseTwo] \doifmode{CourseTwo}{ \beginComplement Another complementary slide but only for course number 2. \endComplement } \disablemode[CourseTwo] \stoptext \stoptext % — MWE ————————————————————— Blocks and modes usually works fine for me, but here, I do not understand my error. Thanks for any help ! Fabrice. Note : in case this way of doing things seems a bit silly, here are more explanations. I do use mode « CourseOne » here because in the real life, the content in the condition « \doifmode{CourseOne}{ …} » is read in an external file, containing material for « CourseOne », « CourseTwo », etc. The setup is then, in the main file : % Main file : begin ---------------- Bla bla bla ... \enablemode[CourseOne] \input ComplementMaterial.tex \disablemode[CourseOne] Bla bla bla ... \enablemode[CourseOne] \input ComplementMaterial.tex \disablemode[CourseOne] % Main file : end ---------------- And in the « ComplementMaterial.tex » there is : % ComplementMaterial.tex ————————— \doifmode{CourseOne}{ \beginComplement A complementary slide but only for course number 1. \endComplement \beginComplement Another complementary slide but only for course number 1. \endComplement } \doifmode{CourseTwo}{ \beginComplement A complementary slide but only for course number 2. \endComplement \beginComplement Another complementary slide but only for course number 2. \endComplement } % ComplementMaterial.tex —————————
Am 28.11.21 um 19:39 schrieb Fabrice L via ntg-context:
I have an error when I try to insert a block inside a conditional mode (but there is two nested conditional mode.. is this the problem ?).
You can’t nest modes in \startmode ... \stopmode. I don’t know what are the limitations of \doifmode. Maybe it helps to use additional grouping with {}, \bgroup .. \egroup or \start .. \stop.
In my courses notes, I insert some blocks (named « Complement » in the minimal exemple below) when in « Professor » mode. This works fine, as shown in the first « \beginComplement … \endComplement » of my example below.
Maybe you can work with buffers or (ConTeXt) blocks (the latter were recently discussed here, it’s a quite unknown mechanism). Hraban
Thanks Hraban for your answer,
Le 28 nov. 2021 à 15:42, Henning Hraban Ramm via ntg-context
a écrit : Am 28.11.21 um 19:39 schrieb Fabrice L via ntg-context:
I have an error when I try to insert a block inside a conditional mode (but there is two nested conditional mode.. is this the problem ?).
You can’t nest modes in \startmode ... \stopmode. I don’t know what are the limitations of \doifmode.
According to the wiki, we cannot nest several \startmode …\stopmode, but there is no limitation with \doifmode.
Maybe it helps to use additional grouping with {}, \bgroup .. \egroup or \start .. \stop.
Following your advice, I tried with several {}, but no luck.
In my courses notes, I insert some blocks (named « Complement » in the minimal exemple below) when in « Professor » mode. This works fine, as shown in the first « \beginComplement … \endComplement » of my example below.
Maybe you can work with buffers or (ConTeXt) blocks (the latter were recently discussed here, it’s a quite unknown mechanism).
I already use blocks, but following your message, I tried to think differently. One solution would be to define a block for each course. Something like this (a working minimal example, redone in order this would be more easier to understand (I hope!) what I’m trying to do): % ————————————— \setuppapersize[S5][S5] \enablemode[Professor] \defineblock[ComplementTwo] \defineblock[ComplementThree] \setupblock[ComplementTwo,ComplementThree][ before={\page[yes]\setuppagenumber[state=stop]\setupheadertexts[]\setupbackgrounds[page][background=color,backgroundcolor=red]}, after={\page[yes]\setuppagenumber[state=start]}] \starttext % Let's process the summaries ; \beginComplementTwo Last course, we have seen A. \endComplementTwo \beginComplementThree Last course, we have seen B…. \endComplementThree \beginComplementThree Last course, we have seen C…. \endComplementThree % ---- Let's begin course 1. This is course 1 : a lot of pages here about A! \page[yes] Let's begin course 2. \doifmode{Professor} { \useblocks[ComplementTwo] } This is course 2 : a lot of pages here about B and C! \page[yes] Let's begin course 3. \doifmode{Professor} { \useblocks[ComplementThree] } This is course 3 : a lot of pages here about D... ! \stoptext %————————— The only inconvenient of this solution if that I have to define 15 blocks (one for each week of the term): ComplementOne, ComplementTwo, .., ComplementFithteen… Another drawback of this is difficult to move one block form one week to another if I change something. Each block here correspond in fact to a summary of the previous course. So I have typically around 10 pages of summary for each course. The challenge is that the content of each course is not exactly the same form one term to another, so I have to move a page to the summary from one course to the other one, like in a given term, if teach about subject C in course 3 : \beginComplementThree Last course, we have seen C…. \endComplementThree , but next term in course 4: \beginComplementFour Last course, we have seen C…. \\beginComplementFour I have to manually change \beginComplementThree … \endComplementThree to \beginComplementFour … \beginComplementFour. But I will do this if I do not find another solution. Thanks again Hraban. Fabrice.
Hraban ___________________________________________________________________________________ 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 ___________________________________________________________________________________
On 11/29/2021 2:54 AM, Fabrice L via ntg-context wrote:
The only inconvenient of this solution if that I have to define 15 blocks (one for each week of the term): ComplementOne, ComplementTwo, \defineblock[example]
\starttext \beginexample[Two] Last course, we have seen A. \endexample \beginexample[Three] Last course, we have seen B…. \endexample \beginexample[Three] Last course, we have seen C…. \endexample \useblocks[example][Two] % \useblocks[example][Three] \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Dear Hans,
Le 29 nov. 2021 à 03:54, Hans Hagen
a écrit : On 11/29/2021 2:54 AM, Fabrice L via ntg-context wrote:
The only inconvenient of this solution if that I have to define 15 blocks (one for each week of the term): ComplementOne, ComplementTwo, \defineblock[example]
\starttext
\beginexample[Two] Last course, we have seen A. \endexample
\beginexample[Three] Last course, we have seen B…. \endexample
\beginexample[Three] Last course, we have seen C…. \endexample
\useblocks[example][Two] % \useblocks[example][Three]
\stoptext
%————————————————————————————————
Thanks (again). ConTeXt is always full of ressource ! I did not know we could do this, even if I realized now that there is a similar example in the wiki. For the list, in case in the future this would be useful for another user, below is the complete minimal example using this approach. % ----- Minimal working example : \setuppapersize[S5][S5] \enablemode[Professor] \defineblock[Complement] \setupblock[Complement][ before={\page[yes]\setuppagenumber[state=stop]\setupheadertexts[]\setupbackgrounds[page][background=color,backgroundcolor=red]}, after={\page[yes]\setuppagenumber[state=start]}] \starttext % Let's process the summaries ------------; \beginComplement[Two] Last course, we have seen A. \endComplement \beginComplement[Three] Last course, we have seen B…. \endComplement \beginComplement[Three] Last course, we have seen C…. \endComplementThree \beginComplement[Four] Last course, we have seen D…. \endComplementFour \beginComplement and E ! \endComplementFour % ---- summaries: end ------------; Let's begin course 1. This is course 1 : a lot of pages here about A! \page[yes] Let's begin course 2. \doifmode{Professor} { \useblocks[Complement][Two] } This is course 2 : a lot of pages here about B and C! \page[yes] Let's begin course 3. \doifmode{Professor} { \useblocks[Complement][Three] } This is course 3 : a lot of pages here about D... ! \doifmode{Professor} { \useblocks[Complement][Four] } The course 4 ! \stoptext % ----- Minimal working example : end -------- Fabrice.
participants (3)
-
Fabrice L
-
Hans Hagen
-
Henning Hraban Ramm