Table headers and section titles
Hello all, I've had another stab at converting our Word template to Context. I've managed to draw some pretty shapes using MetaPost (and I'd like to add my +1 for getting some alpha channel support for linear_shade) and I got really close to getting my table headings working. I would like to have a gradient fill that runs the width of the table header. The following shows where I've got to: %% GRADIENT SETUP \definecolor[a][r=0.098039,g=0.223529,b=0.52549] \definecolor[b][r=0.098039,g=0.654902,b=0.866667] \startuniqueMPgraphic{LinearShade} path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ; linear_shade(p,5,\MPcolor{a},\MPcolor{b}) ; \stopuniqueMPgraphic \defineoverlay[shaded][\useMPgraphic{LinearShade}] \setupTABLE[row][1][background={shaded},backgroundcolor=blue,foregroundcolor=white] \starttext \framed[background={shaded}, width=\textwidth, frame=off]{} \bTABLE \bTABLEhead \bTR \bTH 1 \eTH \bTH 1 \eTH \bTH 1 \eTH \bTH 1 \eTH \bTH Page \eTH \eTR \eTABLEhead \bTABLEbody \bTR \bTD 1 \eTD \bTD 1 \eTD \bTD 1 \eTD \bTD 1 \eTD \bTD 1 \eTD \eTR \eTABLEbody \eTABLE \stoptext The output shows a framed element which is similar to what I want to achieve and the table shows where I've got to. I believe that there are only really two options as to how I can get what I want: 1. Recalculate the gradient fill for each cell. This will require knowing the column width and the ability to change the cell's background as appropriate. I have no idea how to do either. 2. Draw the framed fill to the width of the table and then position it behind the table header (which is actually how it gets done in Word). However, I don't know how to determine the table width, or how to accurately position the frame. The next problem I have is with section headings. For each section heading we are required to include a box that contains some meta information. This is what I have at the moment: \setuphead[section][color=blue, aligntitle=float] \definefloat[issueinfo][issueinfos] % Define our fancy boxout \setupcaption[issueinfo][location=none] % Define our fancy boxout \defineframedtext[issueinfo][] \starttext \section{My section header} \placeissueinfo[right, y=-2cm]{}{ \startissueinfo[width=4cm] Ref: ref-1 \par a: Medium \par b: low \par c: 9.0 \stopissueinfo } Short loin shank rump pork belly ball tip pig. Spare ribs shank tri-tip capicola strip steak. Frankfurter leberkäse filet mignon boudin pork belly. Capicola shankle ribeye, hamburger brisket jerky rump short ribs turkey ham hock andouille pork chop chicken tongue pork belly. Ball tip tongue corned beef shoulder bresaola. Tri-tip turducken salami ground round pork. Rump tenderloin pork loin ham hock boudin, meatball venison pastrami prosciutto. \stoptext I'd like to be able to accurately place the box alongside the title itself. Ideally I'd like to draw a line under the section header that meets the left side of the box as well, though I'll take what I can get at this point. I hope the examples make sense. Thanks in advance for any help you can give. Felix
Some follow up notes in case anyone else is trying to do something similar
On 13 September 2011 15:30, Felix Ingram
I've had another stab at converting our Word template to Context. I've managed to draw some pretty shapes using MetaPost (and I'd like to add my +1 for getting some alpha channel support for linear_shade) and I got really close to getting my table headings working.
Re: alpha channels - I'm now using TIKZ for the drawing and so this is now sorted.
I would like to have a gradient fill that runs the width of the table header. The following shows where I've got to:
%% GRADIENT SETUP \definecolor[a][r=0.098039,g=0.223529,b=0.52549] \definecolor[b][r=0.098039,g=0.654902,b=0.866667]
\startuniqueMPgraphic{LinearShade} path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ; linear_shade(p,5,\MPcolor{a},\MPcolor{b}) ; \stopuniqueMPgraphic
\defineoverlay[shaded][\useMPgraphic{LinearShade}]
\setupTABLE[row][1][background={shaded},backgroundcolor=blue,foregroundcolor=white]
\starttext \framed[background={shaded}, width=\textwidth, frame=off]{} \bTABLE \bTABLEhead \bTR \bTH 1 \eTH \bTH 1 \eTH \bTH 1 \eTH \bTH 1 \eTH \bTH Page \eTH \eTR \eTABLEhead \bTABLEbody \bTR \bTD 1 \eTD \bTD 1 \eTD \bTD 1 \eTD \bTD 1 \eTD \bTD 1 \eTD \eTR \eTABLEbody \eTABLE \stoptext
The output shows a framed element which is similar to what I want to achieve and the table shows where I've got to. I believe that there are only really two options as to how I can get what I want:
1. Recalculate the gradient fill for each cell. This will require knowing the column width and the ability to change the cell's background as appropriate. I have no idea how to do either. 2. Draw the framed fill to the width of the table and then position it behind the table header (which is actually how it gets done in Word). However, I don't know how to determine the table width, or how to accurately position the frame.
Still no idea about these - I will probably try to draw something with tikz and then move it. Still not sure how to determine the table width, but we only have a few tables and they are fairly constant in size, so I might just fake it.
The next problem I have is with section headings. For each section heading we are required to include a box that contains some meta information. This is what I have at the moment:
\setuphead[section][color=blue, aligntitle=float]
\definefloat[issueinfo][issueinfos] % Define our fancy boxout \setupcaption[issueinfo][location=none] % Define our fancy boxout \defineframedtext[issueinfo][]
\starttext
\section{My section header} \placeissueinfo[right, y=-2cm]{}{ \startissueinfo[width=4cm] Ref: ref-1 \par a: Medium \par b: low \par c: 9.0 \stopissueinfo } Short loin shank rump pork belly ball tip pig. Spare ribs shank tri-tip capicola strip steak. Frankfurter leberkäse filet mignon boudin pork belly. Capicola shankle ribeye, hamburger brisket jerky rump short ribs turkey ham hock andouille pork chop chicken tongue pork belly. Ball tip tongue corned beef shoulder bresaola. Tri-tip turducken salami ground round pork. Rump tenderloin pork loin ham hock boudin, meatball venison pastrami prosciutto.
\stoptext
I'd like to be able to accurately place the box alongside the title itself. Ideally I'd like to draw a line under the section header that meets the left side of the box as well, though I'll take what I can get at this point.
After some careful reading of the Details manual I have something that I'm fairly happy with. \definefloat[issueinfo][issueinfos] \setupcaption[issueinfo][location=none] % Turn off caption \defineframedtext[issueinfo] \setupframedtext[issueinfo][ width=4cm, % set the width frame=on, % turn on the framw framecolor=blue, % colour it ] \setupfloat[issueinfo] [ default={inner, height, high, low, none}, % set up padding etc margin=\structdepth, rightmargindistance=2cm, maxwidth=0.5cm, color=blue, ] I then place it with the following: \movesidefloat[-5*line] \placeissueinfo[right]{}{ \startissueinfo ... \stopissueinfo The movesidefloat shifts it up to where I want it to be. The only issue is that my section headings would overlap the box if the text was too long, so I redefined the heading like this: \setuphead[section] [before=\page, aligntitle=float, % Redundant I believe, as the next option will prevent it being required width=12cm, % Set the width to something that won't impact our box. after={{\color[red] \hrule width 125mm \vskip 2em}}, ] The 'after' settings draw the line that I was looking for and 125mm just happens to bring it to the edge of the box, so I'm a little happier. I hope this is useful to someone. Felix
participants (1)
-
Felix Ingram