Xavier Dionne
19. Juni 2018 um 03:26

Hi everyone,

 

Excuse my poor English. I recently updated my online table generator (http://latex-tables.com) to support ConTeXt. It also supports many languages, like LaTeX, Plain TeX, Markdown, HTML and more. It uses the eXtreme table format and supports many features including :

- Borders, border width and border color

- Merged cells

- Background color

- Alignment (flushleft, center, flushright)

- Splitted tables

- Rotated tables

- Caption

- More...

 

However, I have many issues that I have trouble to fix.

 

1/ I have many troubles with borders, because I can't set the color and the width of each border. Instead, I use "fake rows" and "fake cells" when it is necessary. However, I can't figure out how to set the height of a row to 0.4pt. It's always bigger. So, instead I use "location=hanging" on this row but, because of this, borders are hidden behind the next row's background. What can I do about this ?


Frames accept only a single color and line thickness for all borders but there are two ways to set different values for each side The first method is to disable the frame and apply a background graphic where you draw different lines for each side. The other method is to create a custom renderer for each frame (top, bottom etc.) where you can than apply a different color or linewidth for each side, below (and also attached) is a example where I show how this can be done.

Wolfgang


%%%% begin meta-imp-mpframe.mkiv
\startuseMPgraphic{mp_frame_left}
  draw leftboundary OverlayBox
    withpen pensquare scaled \frameddimension{leftrulethickness}
    withcolor \MPcolor{\framedparameter{leftframecolor}} ;
  setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic

\startuseMPgraphic{mp_frame_right}
  draw rightboundary OverlayBox
    withpen pensquare scaled \frameddimension{rightrulethickness}
    withcolor \MPcolor{\framedparameter{rightframecolor}} ;
  setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic

\startuseMPgraphic{mp_frame_top}
  draw topboundary OverlayBox
    withpen pensquare scaled \frameddimension{toprulethickness}
    withcolor \MPcolor{\framedparameter{topframecolor}} ;
  setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic

\startuseMPgraphic{mp_frame_bottom}
  draw bottomboundary OverlayBox
    withpen pensquare scaled \frameddimension{bottomrulethickness}
    withcolor \MPcolor{\framedparameter{bottomframecolor}} ;
  setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic

\installleftframerenderer   {mp} {\useMPgraphic{mp_frame_left}}
\installrightframerenderer  {mp} {\useMPgraphic{mp_frame_right}}
\installtopframerenderer    {mp} {\useMPgraphic{mp_frame_top}}
\installbottomframerenderer {mp} {\useMPgraphic{mp_frame_bottom}}

\setupframed
  [     leftframecolor=\framedparameter{framecolor},
       rightframecolor=\framedparameter{framecolor},
         topframecolor=\framedparameter{framecolor},
      bottomframecolor=\framedparameter{framecolor},
     leftrulethickness=\framedparameter{rulethickness},
    rightrulethickness=\framedparameter{rulethickness},
      toprulethickness=\framedparameter{rulethickness},
   bottomrulethickness=\framedparameter{rulethickness}]

\endinput
%%%% end meta-imp-mpframe.mkiv


%%%% begin mpframe.tex
\useMPlibrary[mpframe]

\definextable
  [mp]
  [width=2cm,
   height=2cm,
   align={middle,lohi},
   foregroundstyle=\ssd,
   framecolor=red,
   % use the custom frame renderer for all four sides:
   leftframe=mp,
   rightframe=mp,
   topframe=mp,
   bottomframe=mp]

\starttext

\startxtable[mp]
    \startxrow[bottomrulethickness=2pt]
        \startxcell[rightframecolor=blue]
            A
        \stopxcell
        \startxcell[leftframe=off]
            B
        \stopxcell
    \stopxrow
    \startxrow
        \startxcell[leftframecolor=green,leftrulethickness=2pt]
            C
        \stopxcell
        \startxcell[rightframecolor=orange,rightrulethickness=2pt]
            D
        \stopxcell
    \stopxrow
\stopxtable

\stoptext
%%%% end mpframe.tex