ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Wolfgang Schuster <schuster.wolfgang@gmail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Cc: Xavier Dionne <xavier.dionne@hotmail.com>
Subject: Re: Table generator : Issues with borders and rotated cells
Date: Wed, 27 Jun 2018 10:50:47 +0200	[thread overview]
Message-ID: <5B334FE7.40106@gmail.com> (raw)
In-Reply-To: <DM5PR19MB14650491293D24AECEBC6F53F7700@DM5PR19MB1465.namprd19.prod.outlook.com>


[-- Attachment #1.1: Type: text/plain, Size: 4196 bytes --]


> Xavier Dionne <mailto:xavier.dionne@hotmail.com>
> 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


[-- Attachment #1.2: Type: text/html, Size: 6863 bytes --]

[-- Attachment #2: meta-imp-mpframe.mkiv --]
[-- Type: text/plain, Size: 1735 bytes --]

\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

[-- Attachment #3: mpframe.tex --]
[-- Type: application/x-tex, Size: 647 bytes --]

[-- Attachment #4: Type: text/plain, Size: 492 bytes --]

___________________________________________________________________________________
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
___________________________________________________________________________________

      reply	other threads:[~2018-06-27  8:50 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-19  1:26 Xavier Dionne
2018-06-27  8:50 ` Wolfgang Schuster [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5B334FE7.40106@gmail.com \
    --to=schuster.wolfgang@gmail.com \
    --cc=ntg-context@ntg.nl \
    --cc=xavier.dionne@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).