Re: [NTG-context] problem with layers and line spacing
Understood, but actually it is obeying the 12pt switchtobodyfont for
the interline spacing in the backgrounds. It is not using either the
layer's switchtobodyfont, which I think should be correct behavior,
nor is it obeying the setupbodyfont. Note that the font size is
correct, it is the interline spacing that is incorrect.
Thanks,
Brian
On Aug 11, 2009, at 6:11 PM, Hans Hagen
Brian R. Landy wrote:
Hi, I am attempting to do some work with layers that can repeat (and update) using \startsetups & \stopsetups. However I find that the line spacing in a \framed in the layers is not alterable and instead tracks the font size on the page. I'm attaching a simple example (it shows the same issue under MKII and MKIV, although the \vbox{} example does not work under MKII). If you remove the \startsetups and \stopsetups the line spacing works like it should. While they are used, the line spacing in the layer's \framed tracks the setting in \switchtobodyfont[12pt]. It does not track to either 6pt or 8pt. And I can't find a way to reset the spacing (I tried adding in a \setupinterlinespace[reset]). Am I doing something wrong? I've tried with MKIV 2009.06.03 and 2009.08.07, and MKII at contextgarden. Thanks! Brian \setupbodyfont[8pt]% \starttext \definelayer[RCheaderleft][preset=lefttop,width=\paperwidth, height= \paperheight]% \definelayer[RCheaderright][preset=lefttop,width=\paperwidth, height=\paperheight]% \startsetups[RClayers]% \setlayer[RCheaderleft][hoffset=\backspace,voffset=\topspace]{\vbox {Line 1\\ Line 2}}% \setlayer[RCheaderright][hoffset=\backspace,voffset=\topspace] {\switchtobodyfont[6pt]\framed[align= {middle,flushright},width=broad]{Line 1\\ Line 2}}% \stopsetups \setupbackgrounds[page][setups=RClayers,background= {RCheaderleft,RCheaderright}]% \switchtobodyfont[12pt] \dorecurse{250}{test\par} \stoptext
there is a difference between:
\setupbodyfont : global usage, document wide \switchtobodyfont : local usage, does not affect the header, footer etc
so, when the backgrounds are constructed, the 8pt is in charge
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 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 : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
Brian R. Landy wrote:
Understood, but actually it is obeying the 12pt switchtobodyfont for the interline spacing in the backgrounds. It is not using either the layer's switchtobodyfont, which I think should be correct behavior, nor is it obeying the setupbodyfont. Note that the font size is correct, it is the interline spacing that is incorrect.
sure, it depends a bit how it's set up ... \setlayer is kind of immediate (so there the current settinsg apply) while the flushing happens under global bodyfont control; if one uses setups and fills the layer delayed (as part of setupheadertexts) it's delayed as setup*texts is delayed keep in mind that tex only sets interlinespace when \par is issued so { [set spacing] [text] } { [set spacing] [text] \par } are different things btw, often the easiest way to set a bodyfont in for instance layers is: \setlayerframed[...][...][style={\switchtobodyfont}] turning the frame on then also helps tracking down problems concerning your problem, experiment a bit with adding \par and so otherwise add some \setupinterlinespace (no argument) ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Aha. When I'm not using \startsetup...\stopsetups things are more
forgiving; once those are in place things became a little more strict
in two regards --
- The \switchtobodyfont (or, more technically accurate, the
\setupinterlinespace) must be inside of the \framed. I had tried it
both ways and had never seen the difference because of...
- Not terminating the final line with \par. If my case had required
three lines I would have seen the issue, because the first two lines
would have had the proper spacing under one of my tests..
Interestingly if I nest more \frameds, each one needs it's own
\setupinterlinespace.
One more interesting point, in case this helps anyone out, is I find
that the behavior also changes if \framed has an offset vs.
offset=overlay or offset=none. To get the proper line spacing when
there is an offset you need to \switchtobodyfont both inside and
before \framed. With offset=overlay or offset=none, it is only
necessary to \switchtobodyfont inside \framed.
I found that using style={\switchtobodyfont} was ignored in this case,
but Wolfgang's suggestion (in another email) of creating a separate
\startsetups/\stopsetups block and passing it via setups= to \framed
worked perfectly.
Hans, Wolfgang -- thanks for your help!
Brian
Quoting Hans Hagen
Brian R. Landy wrote:
Understood, but actually it is obeying the 12pt switchtobodyfont for the interline spacing in the backgrounds. It is not using either the layer's switchtobodyfont, which I think should be correct behavior, nor is it obeying the setupbodyfont. Note that the font size is correct, it is the interline spacing that is incorrect.
sure, it depends a bit how it's set up ... \setlayer is kind of immediate (so there the current settinsg apply) while the flushing happens under global bodyfont control; if one uses setups and fills the layer delayed (as part of setupheadertexts) it's delayed as setup*texts is delayed
keep in mind that tex only sets interlinespace when \par is issued so
{ [set spacing] [text] } { [set spacing] [text] \par }
are different things
btw, often the easiest way to set a bodyfont in for instance layers is:
\setlayerframed[...][...][style={\switchtobodyfont}]
turning the frame on then also helps tracking down problems
concerning your problem, experiment a bit with adding \par and so
otherwise add some \setupinterlinespace (no argument)
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 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 : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
Brian R. Landy wrote:
One more interesting point, in case this helps anyone out, is I find that the behavior also changes if \framed has an offset vs. offset=overlay or offset=none. To get the proper line spacing when there is an offset you need to \switchtobodyfont both inside and before \framed. With offset=overlay or offset=none, it is only necessary to \switchtobodyfont inside \framed.
spacing inside framed is also determined by the strut (use \showstruts to see what happens) and when you use the foregroundstyle or setup keys the strut will adapt itself to the bodyfont, contrary to when you pass it as content (it then depends on things like grouping and so) so: whenever you want the spacing in a framed to adapt to the font, use the foregroundstyle key ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
participants (3)
-
Brian R. Landy
-
Brian R. Landy
-
Hans Hagen