MkIV problem+fix with \framed[location=depth / height / hanging]
Hi Hans, I believe that in MkIV some \framed[location=...] keys are not working, namely `depth`, `height`, and `hanging`. In MkIV these all place the bottom of the frame flush with the baseline, like [location=]. In MkII they behave more sensibly, as follows: * depth: place bottom of frame flush with bottom of the line (i.e. \strutdepth below baseline) * height: place top of frame flush with top of line * hanging: place top of frame flush with baseline Test code below, mkii and mkiv output attached. I have produced a fix for the code in pack-rul.mkiv [1], placed at the very bottom of this e-mail. It works; but it is a pure-bred example of cargo cult programming, i.e. lots of 'making it look right' and very little understanding, so you will probably want to check it. [1] http://repo.or.cz/w/context.git/blob/HEAD:/tex/context/base/pack-rul.mkiv All the best, Sietse \setupcolors[state=start] \setupblackrules[depth=\strutdepth,height=\strutheight,width=1mm,color=red] \starttext \ruledhbox {A \framed[width=2cm,align=middle,location=] {location\\equals\\(nothing)}% \blackrule \framed[width=2cm,align=middle,location=depth] {location\\equals\\depth}% \blackrule \framed[width=2cm,align=middle,location=height] {location\\equals\\height}% \blackrule \framed[width=2cm,align=middle,location=hanging]{location\\equals\\hanging} B} \vskip2cm \ruledhbox {A \framed[width=2cm,align=middle,location=low] {location\\equals\\low} \framed[width=2cm,align=middle,location=line] {location\\equals\\line} \framed[width=2cm,align=middle,location=high] {location\\equals\\high} B} \vskip2cm \ruledhbox {A \framed[width=2cm,align=middle,location=bottom] {location\\equals\\bottom} \framed[width=2cm,align=middle,location=lohi] {location\\equals\\lohi} \framed[width=2cm,align=middle,location=middle] {location\\equals\\middle} \framed[width=2cm,align=middle,location=top] {location\\equals\\top} B} \stoptext ------- This is the fixed code -------- \installframedlocator \v!hanging % best with strut=no {} - {\dp\b_framed_normal\scratchdimen + {\scratchdimen\ht\b_framed_normal + \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}% + \dp\b_framed_normal\scratchdimen \ht\b_framed_normal\zeropoint \hbox{\box\b_framed_normal}} \installframedlocator \v!depth {} - \ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax + {\setbox\b_framed_normal\hbox{\lower\strutdp\box\b_framed_normal}% + \ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax \dp\b_framed_normal\strutdp \hbox{\box\b_framed_normal}} \installframedlocator \v!height {} - {\dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax + {\scratchdimen\dimexpr \ht\b_framed_normal - \strutht \relax + \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}% + \dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax \ht\b_framed_normal\strutht \hbox{\box\b_framed_normal}}
Am 14.05.2013 um 23:00 schrieb Sietse Brouwer
Hi Hans,
I believe that in MkIV some \framed[location=...] keys are not working, namely `depth`, `height`, and `hanging`. In MkIV these all place the bottom of the frame flush with the baseline, like [location=]. In MkII they behave more sensibly, as follows:
* depth: place bottom of frame flush with bottom of the line (i.e. \strutdepth below baseline) * height: place top of frame flush with top of line * hanging: place top of frame flush with baseline
The reason why all the location alternatives don’t work is because the original \vbox for the content is converted to a \hbox which ignores the changed values (even though the changed values for the height/depth are used as seen at the surrounding box). The process to create a \hbox happens when the background is applied with: \def\pack_framed_add_background {\setbox\b_framed_normal\hbox % was vbox ... \egroup}} Wolfgang
On 5/14/2013 11:00 PM, Sietse Brouwer wrote:
------- This is the fixed code --------
\installframedlocator \v!hanging % best with strut=no {} - {\dp\b_framed_normal\scratchdimen + {\scratchdimen\ht\b_framed_normal + \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}% + \dp\b_framed_normal\scratchdimen \ht\b_framed_normal\zeropoint \hbox{\box\b_framed_normal}}
\installframedlocator \v!depth {} - \ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax + {\setbox\b_framed_normal\hbox{\lower\strutdp\box\b_framed_normal}% + \ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax \dp\b_framed_normal\strutdp \hbox{\box\b_framed_normal}}
\installframedlocator \v!height {} - {\dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax + {\scratchdimen\dimexpr \ht\b_framed_normal - \strutht \relax + \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}% + \dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax \ht\b_framed_normal\strutht \hbox{\box\b_framed_normal}}
no need for the last \hbox then .. \installframedlocator \v!hanging % best with strut=no {} {\scratchdimen\ht\b_framed_normal \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}% \dp\b_framed_normal\scratchdimen \ht\b_framed_normal\zeropoint \box\b_framed_normal} \installframedlocator \v!depth {} {\setbox\b_framed_normal\hbox{\lower\strutdp\box\b_framed_normal}% \ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax \dp\b_framed_normal\strutdp \box\b_framed_normal} \installframedlocator \v!height {} {\scratchdimen\dimexpr \ht\b_framed_normal - \strutht \relax \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}% \dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax \ht\b_framed_normal\strutht \box\b_framed_normal} ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On 5/14/2013 11:00 PM, Sietse Brouwer wrote:
\setupcolors[state=start]
this is no longer needed in mkiv where colors are enabled by default
\setupblackrules[depth=\strutdepth,height=\strutheight,width=1mm,color=red] ...
.. added to test zip ... ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Sietse wrote:
\setupcolors[state=start]
Hans wrote:
this is no longer needed in mkiv where colors are enabled by default
Leaving it in allowed me to use the same code to test MkII and MkIV. :-)
.. added to test zip ...
I haven't heard of that. Is that the unofficial test suite [1], or is it a zip in the distribution somewhere? [1] https://github.com/melmothx/context-unofficial-test-suite Cheers, Sietse
Am 15.05.2013 um 12:26 schrieb Sietse Brouwer
Hans wrote:
.. added to test zip ...
I haven't heard of that. Is that the unofficial test suite [1], or is it a zip in the distribution somewhere? [1] https://github.com/melmothx/context-unofficial-test-suite
You can find it on the pragma site: http://www.pragma-ade.nl/download-1.htm Wolfgang
participants (3)
-
Hans Hagen
-
Sietse Brouwer
-
Wolfgang Schuster