[dev-context] Local settings for frame borders

Aditya Mahajan adityam at umich.edu
Wed May 23 06:43:25 CEST 2012


Hi,

Currently it is not possible to individually set the thickness of the 
different borders of a frame. A typical use-case is typesetting a table 
row where the top frame is double the thichness of the bottom frame. 
Having to resort to metapost for something as simple as this is a bit 
annoying.

Attached is a metapost library that defines "local" fences and allows you 
to set border individually. For example

\defineframed[...][frame=off, topframe=local, topframethickness=1pt, 
bottomframe=local, bottomframethickness=0.5pt]

sets the top frame to be 1pt and the bottomframe to be 0.5pt.

Does it make sense to include this (appropriately modified) in the core? 
Or is it better to distribute such enhancements as a user module.

Aditya
-------------- next part --------------
%D \module
%D   [       file=meta-imp-local-fences,
%D        version=2012.05.23,
%D          title=\METAPOST\ Graphics,
%D       subtitle=Fences,
%D         author=Aditya Mahajan,
%D           date=\currentdate,
%D      copyright={Aditya Mahajan}]
%C

%D This module allows one to set the thickness and color of each side of a
%D frame.

\unprotect
\def\insall_local_fence_handler#1#2%
    {\startuniqueMPgraphic {#1_local_fence}
        draw #1boundary OverlayBox 
          withpen pensquare scaled (\the\dimexpr\framedparameter{#2\c!rulethickness}\relax) 
          withcolor \MPcolor{\framedparameter{#2\c!framecolor}} ;
        
        setbounds currentpicture to OverlayBox ;
      \stopuniqueMPgraphic
      \setupframed[#2\c!rulethickness=\c!rulethickness, #2\c!framecolor=\c!framecolor]
      \getvalue{install#1framerenderer}\v!local {\uniqueMPgraphic{#1_local_fence}}}


\insall_local_fence_handler {top}    \v!top
\insall_local_fence_handler {bottom} \v!bottom
\insall_local_fence_handler {left}   \v!left
\insall_local_fence_handler {right}  \v!right


\protect

\continueifinputfile{meta-imp-local-fences.mkiv}

% Typo in pack-fen.mkiv
\unprotected
\let\setinstalledframedimensions\pack_framed_overlay_initialize_indeed

\defineframed
  [colorful]
  [
    toprulethickness=1pt,
    topframecolor=red,
    bottomrulethickness=2pt,
    bottomframecolor=blue,
    leftrulethickness=3pt,
    leftframecolor=green,
    rightrulethickness=4pt,
    rightframecolor=yellow,
    frame=off,
    topframe=local,
    bottomframe=local,
    rightframe=local,
    leftframe=local,
  ]

\colorful{Hello world}

\stoptext


More information about the dev-context mailing list