% language=us \environment details-environment \startcomponent details-pseudocolumns \start \page[right] \definelayout [temp] [columndistance=12pt, columns=3] \setuplayout [temp] \startchapter[title={Pseudo columns}] \index {grid snapping+columns} \index {pseudo columns} \index {layers} \index {backgrounds} In desk top publishing applications the grid is pretty dominant in defining layouts. On the other hand, \TEX\ is pretty good defining layouts in terms of relative dimensions. This means that mapping a desk top publishing layout into its \TEX\ (or \CONTEXT) counterpart takes some effort. For what it's worth, personally I don't like grids that much, specially not in complex documents, unless one makes sure that all elements are suitable sized for the grid used. We not only have to deal with vertical grids, but also with horizontal ones. Here we focus on the second category. When implementing designs, it is best first to look into the normal page layout areas. For most documents these are sufficient, but occasionally we need a more detailed approach. When playing with grids, you need to make sure that grid snapping is turned on. It helps if you turn on the grid so that you can see where things end up. When a horizontal grid is defined, gray vertical rules show their boundaries. \starttyping \setuplayout[grid=yes] \showgrid \stoptyping The \type {\setuplayout} command has a few settings that have to do with so called pseudo columns. These are in no sense related to multi|-|column typesetting and only play a role in placing text on specific locations. \starttyping \setuplayout [columndistance=12pt, columns=3] \stoptyping You can use \type {\layoutcolumnoffset} for positioning relative to the left boundary of the running text: \startbuffer \hskip\layoutcolumnoffset{2}{\red Text positioned in column 2!} \stopbuffer \typebuffer \getbuffer This mechanism is actually meant to ease the definition of complicated (title) pages where many text and graphic elements need to be anchored at well defined places. The layer mechanism is the most natural candidate for this. \startbuffer \definelayer [text] \setupbackgrounds [text] [background=text] \stopbuffer \typebuffer When anchoring elements on a layer, you can specify absolute positions using the \type {x} and \type {y} keys but grid based positioning is possible with the \type {column} and \type {line} keys. We need to pass \type {grid} as location specifier. \startbuffer \setlayer[text][column=1,line=48,location=grid]{these are not} \setlayer[text][column=2,line=47,location=grid]{real columns} \setlayer[text][column=3,line=48,location=grid]{but fake ones} \stopbuffer \typebuffer \getbuffer \page \startbuffer \setlayer [text] [column=1,line=32,location=grid] {\ruledvtop {\hsize\layoutcolumnwidth \style[regular:3]{nitty\par gritty}}} \setlayer [text] [column=2,line=37,location=grid] {\ruledvbox {\hsize\layoutcolumnwidth \style[regular:3]{nitty\par gritty}}} \setlayer [text] [column=3,line=42,location=grid] {\ruledvcenter {\hsize\layoutcolumnwidth \style[regular:3]{nitty\par gritty}}} \stopbuffer \typebuffer \getbuffer The data that goes into the layer is collected and flushed as soon as \TEX\ builds the page. The buffer associated to the layer is then ready for new data (for the next page). In this example, you can see that the baselines of the boxes (here visualized by dashed rules) are put at the specified lines. You can use the \TEX\ box commands \type {\vbox}, \type {\vtop} and \type {\vcenter} to specify where the main baseline of the box content is positioned (at the top or bottom line, or centered). \startbuffer \setlayer [text] [column=2,line=48,x=\layoutcolumnwidth,location=left] {\framed [background=color,backgroundcolor=red, foregroundstyle=regular:2,foregroundcolor=white, frame=off] {Why ain't I framed?}} \stopbuffer \typebuffer \getbuffer \page On the previous page we demonstrated a more complicated call to \type {\setlayer} and more features will be introduced in later chapters. We position the framed text in column~2 and at line~48. In addition we shift the text over the pseudo column width, i.e. we position the text at the right of the column. The location specifier aligns the text left from the point of positioning. When we have set up the pseudo columns, we have access to a couple of variables: \starttabulate[|l|l|l|] \NC \type {\layoutcolumns} \NC counter \NC number of columns \NC \NR \NC \type {\layoutlines} \NC counter \NC number of gridlines \NC \NR \NC \type {\layoutcolumnwidth} \NC dimension \NC width of one column \NC \NR \NC \type {\layoutcolumnoffset{n}} \NC macro \NC position of column n \NC \NR \stoptabulate This is typically a feature that has been there for quite a while but that I forget about. It's probably because I never have to use grids myself. In the examples before we used some predefined (font) styles: \typebuffer[regular:sizes] \page \setuplayout[reset] \stop \stopchapter \stopcomponent