ConTeXters, When \dorecurse is active in the following MWE, the lines of text are overprinted. At least, this is the case for me, please confirm it for yourself. When \dorecurse is disabled, the lines print as they should, separately. Please tell me what I am doing wrong with this, if anything, and how to fix it. (Running ConTeXt ver: 2017.01.17 17:37 MKIV beta fmt: 2017.1.19 on Win10 x64. There are no errors in the log.) \definelayer [blocks] [width=\textwidth, height=\textheight] \setupbackgrounds [page] [background=blocks] \starttext \dorecurse{1}{ % comment to clear error \startstandardmakeup \setlayerframed [blocks] [preset=lefttop, frame=off, align=right]{ \startlines Line one on the left Line two on the left \stoplines } \setlayerframed [blocks] [preset=righttop, frame=off, align=flushright]{ \startlines thgir eht no eno eniL thgir eht no owt eniL \stoplines } \stopstandardmakeup } % comment to clear error \stoptext -- Rik
Hi Rik, I can confirm the behaviour you are reporting (even without \startstandardmakeup—\stopstandardmakeup, but adding a line of text in the document in order to have an output). It seems that \dorecurse suppresses the passage to another line, since if one says \dorecurse{10} the texts in the framed layer are typeset ten times on the same line, as if the command \startlines were not there. Best regards: OK
On 20 Jan 2017, at 04:34, Rik Kabel
wrote: ConTeXters,
When \dorecurse is active in the following MWE, the lines of text are overprinted. At least, this is the case for me, please confirm it for yourself. When \dorecurse is disabled, the lines print as they should, separately. Please tell me what I am doing wrong with this, if anything, and how to fix it. (Running ConTeXt ver: 2017.01.17 17:37 MKIV beta fmt: 2017.1.19 on Win10 x64. There are no errors in the log.)
\definelayer [blocks] [width=\textwidth, height=\textheight]
\setupbackgrounds [page] [background=blocks]
\starttext \dorecurse{1}{ % comment to clear error \startstandardmakeup \setlayerframed [blocks] [preset=lefttop, frame=off, align=right]{ \startlines Line one on the left Line two on the left \stoplines } \setlayerframed [blocks] [preset=righttop, frame=off, align=flushright]{ \startlines thgir eht no eno eniL thgir eht no owt eniL \stoplines } \stopstandardmakeup } % comment to clear error \stoptext
-- Rik
On Thu, 19 Jan 2017, Rik Kabel wrote:
ConTeXters,
When \dorecurse is active in the following MWE, the lines of text are overprinted. At least, this is the case for me, please confirm it for yourself. When \dorecurse is disabled, the lines print as they should, separately. Please tell me what I am doing wrong with this, if anything, and how to fix it. (Running ConTeXt ver: 2017.01.17 17:37 MKIV beta fmt: 2017.1.19 on Win10 x64. There are no errors in the log.)
This has nothing to do with \dorecurse, but due to the fact that the argument of \dorecurse or any macro is parsed before the catcode changes introduced by \startlines come into effect. Here is a simpler example demonstrating similar behavior: \def\test#1{#1} \starttext \test{Something \startlines Line one Line two \stoplines} \stoptext Depending on what you want to do, it should be possible to come up with a workaround. Aditya
On 1/20/2017 8:59 AM, Aditya Mahajan wrote:
On Thu, 19 Jan 2017, Rik Kabel wrote:
ConTeXters,
When \dorecurse is active in the following MWE, the lines of text are overprinted. At least, this is the case for me, please confirm it for yourself. When \dorecurse is disabled, the lines print as they should, separately. Please tell me what I am doing wrong with this, if anything, and how to fix it. (Running ConTeXt ver: 2017.01.17 17:37 MKIV beta fmt: 2017.1.19 on Win10 x64. There are no errors in the log.)
This has nothing to do with \dorecurse, but due to the fact that the argument of \dorecurse or any macro is parsed before the catcode changes introduced by \startlines come into effect. Here is a simpler example demonstrating similar behavior:
\def\test#1{#1}
\starttext \test{Something \startlines Line one Line two \stoplines} \stoptext
Depending on what you want to do, it should be possible to come up with a workaround.
\startbuffer \startstandardmakeup \setlayerframed [blocks] [preset=lefttop, frame=off, align=right]{ \startlines Line one on the left Line two on the left \stoplines } \setlayerframed [blocks] [preset=righttop, frame=off, align=flushright]{ \startlines thgir eht no eno eniL thgir eht no owt eniL \stoplines } \stopstandardmakeup \stopbuffer \dorecurse{1}{ \getbuffer } ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Hi Hans, Unfortunately your workaround with \getbuffer does not produce the correct page: it gives only a blank page. Thanks for your attention: OK
On 20 Jan 2017, at 10:08, Hans Hagen
wrote: On 1/20/2017 8:59 AM, Aditya Mahajan wrote:
On Thu, 19 Jan 2017, Rik Kabel wrote:
ConTeXters,
When \dorecurse is active in the following MWE, the lines of text are overprinted. At least, this is the case for me, please confirm it for yourself. When \dorecurse is disabled, the lines print as they should, separately. Please tell me what I am doing wrong with this, if anything, and how to fix it. (Running ConTeXt ver: 2017.01.17 17:37 MKIV beta fmt: 2017.1.19 on Win10 x64. There are no errors in the log.)
This has nothing to do with \dorecurse, but due to the fact that the argument of \dorecurse or any macro is parsed before the catcode changes introduced by \startlines come into effect. Here is a simpler example demonstrating similar behavior:
\def\test#1{#1}
\starttext \test{Something \startlines Line one Line two \stoplines} \stoptext
Depending on what you want to do, it should be possible to come up with a workaround.
\startbuffer \startstandardmakeup \setlayerframed [blocks] [preset=lefttop, frame=off, align=right]{ \startlines Line one on the left Line two on the left \stoplines } \setlayerframed [blocks] [preset=righttop, frame=off, align=flushright]{ \startlines thgir eht no eno eniL thgir eht no owt eniL \stoplines } \stopstandardmakeup \stopbuffer
\dorecurse{1}{ \getbuffer }
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | 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://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________
On 2017-01-20 11:42, Otared Kavian wrote:
Hi Hans,
Unfortunately your workaround with \getbuffer does not produce the correct page: it gives only a blank page.
Thanks for your attention: OK
On 20 Jan 2017, at 10:08, Hans Hagen
wrote: On 1/20/2017 8:59 AM, Aditya Mahajan wrote:
On Thu, 19 Jan 2017, Rik Kabel wrote:
ConTeXters,
When \dorecurse is active in the following MWE, the lines of text are overprinted. At least, this is the case for me, please confirm it for yourself. When \dorecurse is disabled, the lines print as they should, separately. Please tell me what I am doing wrong with this, if anything, and how to fix it. (Running ConTeXt ver: 2017.01.17 17:37 MKIV beta fmt: 2017.1.19 on Win10 x64. There are no errors in the log.) This has nothing to do with \dorecurse, but due to the fact that the argument of \dorecurse or any macro is parsed before the catcode changes introduced by \startlines come into effect. Here is a simpler example demonstrating similar behavior:
\def\test#1{#1}
\starttext \test{Something \startlines Line one Line two \stoplines} \stoptext
Depending on what you want to do, it should be possible to come up with a workaround. \startbuffer \startstandardmakeup \setlayerframed [blocks] [preset=lefttop, frame=off, align=right]{ \startlines Line one on the left Line two on the left \stoplines } \setlayerframed [blocks] [preset=righttop, frame=off, align=flushright]{ \startlines thgir eht no eno eniL thgir eht no owt eniL \stoplines } \stopstandardmakeup \stopbuffer
\dorecurse{1}{ \getbuffer }
___________________________________________________________________________________
Hans and Aditya, Thank you for the explanation and the workaround. Otared, I am not sure what you are doing, but if you are using only the code snippet that Hans posted, you will get a blank page. You have to define the layer and page background in addition to Hans' snippet. --- Rik
On 20 Jan 2017, at 18:00, Rik Kabel
wrote: […] Otared,
I am not sure what you are doing, but if you are using only the code snippet that Hans posted, you will get a blank page. You have to define the layer and page background in addition to Hans' snippet.
Oh yes… sorry, I am ashamed :-( I just put the code sent by Hans below your’s, and then commented out your code, including the definition of layers and backgounds… Indeed everything works as expected with a buffer. Best regards: OK
participants (4)
-
Aditya Mahajan
-
Hans Hagen
-
Otared Kavian
-
Rik Kabel